This shows you the differences between two versions of the page.
en:examples-py [2017/11/26 21:23] writer |
en:examples-py [2020/03/25 16:28] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | |||
- | **ATTENTION: the current version of the Python environment does not support characters other than ASCII (including Cyrillic)!** | ||
- | |||
- | **0. Working with the designer ** | ||
- | |||
- | To work with the designer connect the library ''libschsat.py'': | ||
- | <code python> | ||
- | from schsat import * | ||
- | </code> | ||
- | in Python, the names of libraries and modules are called without the extension .py, the '*' in this context means the import of all fields. All functions for controlling the construction set must be called inside the ''control()'' function in the text of your program. Example: | ||
- | <code python> | ||
- | def control(): | ||
- | print ("Hello, world!") | ||
- | </code> | ||
- | |||
- | **1. Example of a code to take a photo ** | ||
- | |||
- | <code python> | ||
- | # function definition | ||
- | def take_frame(frame): | ||
- | camera_turn_on() | ||
- | sleep(2) # turn on the camera and wait for the device to load | ||
- | ready = camera_get_state() # Check if the camera is ready | ||
- | if ready: | ||
- | err = camera_take_photo(frame) # take a photo | ||
- | if err: | ||
- | print 'Error while taking frame (frame=%d)!' % frame # is used print () python 2.7 | ||
- | camera_turn_off() | ||
- | return 1 # error code | ||
- | else: | ||
- | print 'Camera is not ready!' | ||
- | camera_turn_off() | ||
- | return 1 | ||
- | camera_turn_off() # be sure to turn off the camera! | ||
- | return 0 # normal execution | ||
- | # use of the function | ||
- | def control(): | ||
- | op_result = take_frame(0) | ||
- | print(op_result) | ||
- | </code> | ||
- | |||
- | **2. Code recommended for testing the magnetometer** | ||
- | <code python> | ||
- | # Function - wrapper for magnetometer_request_raw (num) -> err function | ||
- | def magn_get(nmg, off = True): # nmg - magnetometer number, variable off - whether to switch off the sensor | ||
- | # function that works with the sensor checking whether it is on | ||
- | # and returning the list [0, x_raw, y_raw, z_raw] if it is possible | ||
- | # to get the data, and [1, 0, 0, 0] if an error occurred. | ||
- | if not magnetometer_get_state(nmg): # if the sensor is not turned on | ||
- | if magnetometer_turn_on(nmg): return [1, 0, 0, 0] # try to turn it on | ||
- | sleep(0.5) # if the sensor was turned on wait 0.5 seconds for the loading | ||
- | magn_ret = magnetometer_request_raw(nmg) # save the speed value to variable magn_ret | ||
- | if magn_ret[0]: # if the sensor returned an error message | ||
- | magnetometer_turn_off(nmg) # turn off the sensor | ||
- | return [1, 0, 0, 0] # return [1, 0, 0, 0] | ||
- | if off: magnetometer_turn_off(nmg) # turn off if needed | ||
- | return magn_ret # return result in case of success | ||
- | |||
- | def control(): # The main function of the program in which you should call other functions | ||
- | mgn_ret = [0,0,0,0] # Initialize mgn_ret | ||
- | while not mgn_ret[0]: # while the sensor returns normal values | ||
- | mgn_ret = magn_get(1, False) # save the returned values to the variable mgn_ret | ||
- | print ("state: {}, x_raw = {}, y_raw = {}, z_raw = {}".\ # Notice the line break character! | ||
- | format(mgn_ret[0], mgn_ret[1], mgn_ret[2], mgn_ret[3])) # Print them to the console | ||
- | print("Program failed!") # If the sensor does not take readings display an error message | ||
- | |||
- | </code> | ||
- | |||
- | | ||
- | **3. Code recommended for checking the AVS** | ||
- | <code python> | ||
- | # Function - wrapper for hyro_request_raw (num) -> err function | ||
- | def hyro_get(nhyr, off = True): # nhyr - AVS number | ||
- | # variable off - should the sensor be turned off at the end of the call | ||
- | # function that works with the sensor, checking whether it is on | ||
- | # and returning the list [0, x_raw, y_raw, z_raw] if it is possible | ||
- | # to get the data, and [1, 0, 0, 0] if an error occurred. | ||
- | if not hyro_get_state(nhyr): # if the sensor is not turned on | ||
- | if hyro_turn_on(nhyr): return [1, 0, 0, 0] # try to turn on | ||
- | sleep(0.5) # if the sensor was turned on wait 0.5 seconds for the loading | ||
- | hyro_ret = hyro_request_raw(nhyr) # save the speed value to variable hyro_ret | ||
- | if hyro_ret[0]: # if the sensor returned an error message | ||
- | hyro_turn_off(nhyr) # turn off the sensor | ||
- | return [1, 0, 0, 0] # return [1, 0, 0, 0] | ||
- | if off: hyro_turn_off(nhyr) # turn off if needed | ||
- | return hyro_ret # return result in case of success | ||
- | |||
- | def control(): # The main function of the program in which you should call other functions | ||
- | hyr_ret = [0,0,0,0] # Initialize hyr_ret | ||
- | while not hyr_ret[0]: # while the sensor returns normal values | ||
- | hyr_ret = hyro_get(1, False) # save the returned values to the variable hyr_ret | ||
- | print ("state: %d, x_raw = %d, y_raw = %d, z_raw = %d",\ # Notice the line break character! | ||
- | % (hyr_ret[0], hyr_ret[1], hyr_ret[2], hyr_ret[3]) # Print them to the console | ||
- | print("Program failed!") # If the sensor does not take readings display an error message | ||
- | |||
- | |||
- | </code> | ||
- | |||
- | **4. Code recommended for testing solar sensors** | ||
- | |||
- | <code python> | ||
- | def sunsensors_get(off = True): # True - the default argument off | ||
- | # sensor numbers - from the 1st to the 4th | ||
- | s_is_on = [sun_sensor_get_state(i+1) for i in range(4)] # checking if the sensor is on | ||
- | if 0 in s_is_on: # if the sensor is not on | ||
- | s_on_bus = [sun_sensor_turn_on(i+1) for i in range(4)] # turn it on | ||
- | sleep(2) # waiting the devices to load | ||
- | s_is_on = [int(not(i)) for i in s_on_bus] # write the values in the list s_is_on | ||
- | data = [] # create a list for storing data | ||
- | for idx, i in enumerate(s_is_on): all sensors | ||
- | if s_is_on: data.append(sun_sensor_request_raw(idx+1)) # the value of sensors illumination | ||
- | else: data.append([1, 0, 0, 0]) # value if the sensor is off | ||
- | if off: [sun_sensor_turn_off(i+1) for i in range(4)] # turn off the sensors if it is necessary | ||
- | return data # to return readings | ||
- | # use of the function | ||
- | sun_raw = sunsensors_get(False) # replace the default argument, the sensors are not turned off after the call | ||
- | |||
- | </code> | ||
- | |||
- | **5. Code recommended for checking the flywheel control** | ||
- | |||
- | <code python> | ||
- | def motor_check(num): | ||
- | if not motor_get_state(num): # checking if the motor is on | ||
- | if motor_turn_on(num): return 1 # try to turn on, if not possible display the error code | ||
- | sleep(2) # wait for device to load | ||
- | if motor_set_speed(num, 1000): return 1 # set the speed or return an error code | ||
- | sleep(5) # five seconds waiting | ||
- | if motor_set_speed(num, 0): return 1 # set the speed or return an error code | ||
- | motor_turn_off(num) # turn off | ||
- | # The main program | ||
- | def control(): | ||
- | res = motor_check(1) | ||
- | print (res) | ||
- | </code> | ||
- | |||
- | **6. Сode recommended for checking the telemetry transmitter** | ||
- | <code python> | ||
- | # An example of a function to send any message sent as a msg variable of type str | ||
- | def msg_send(msg, trn = 1, res = 2, off = True): | ||
- | # msg - message, trn - transmitter number, res - ground receiver number, | ||
- | # off - whether it is necessary to turn off the transmitter after the program termination | ||
- | # (True - yes, False - no) | ||
- | if not transceiver_get_state(trn): # if the transmitter is off: turn it on | ||
- | if transceiver_turn_on(trn): # try to turn on | ||
- | return 1 # if failed, return error code 1 | ||
- | sleep(0.5) # if the power-on signal is normally received, wait 0.5 s | ||
- | if not transceiver_send(res, trn, msg): # if the message could not be transmitted | ||
- | transceiver_turn_off(trn) # turn off the transmitter | ||
- | return 1 # return error code | ||
- | if off: transceiver_turn_off(trn) # turn off the transmitter | ||
- | return 0 # return normal completion code | ||
- | </code> | ||
- | |||
- | **7. Сode recommended for checking the HF transmitter** | ||
- | <code python> | ||
- | def send_frame(num, frame, off = True): | ||
- | if not tranmitter_get_state(num): # check the status of the HF transmitter | ||
- | if transmitter_turn_on(num): return 1 | ||
- | sleep(2) | ||
- | if transmitter_transmit_photo(num, frame): # transmit frame "frame" | ||
- | if off: transmitter_turn_off(name) # it is assumed that the shutdown is always successful, | ||
- | return 1 # but, generally speaking, this may not be the case | ||
- | if off: transmitter_turn_off(1) | ||
- | return 0 # normal completion code | ||
- | </code> | ||
- | |||
- | **8. Code recommended for working with battery ** | ||
- | <code python> | ||
- | def battery(): | ||
- | ah = battery_get_charge() # check the charge | ||
- | cc = battery_get_charging_current() # charging current | ||
- | dc = battery_get_discharging_current() # discharging current | ||
- | print 'Ёмкость батареи: %g A-H' % ah # output the data | ||
- | print 'Ток заряда: %g mA' % cc | ||
- | print 'Ток разряда: %g mA' % dc | ||
- | return [ah, cc, dc] # return values | ||
- | </code> | ||