ВНИМАНИЕ: текущая версия среды исполнения Python не поддерживает символы, отличные от ASCII (в том числе кириллические)!
0. Работа с конструктором
Для работы с конструктором подключите библиотеку libschsat.py:
from schsat import *
в Python имена библиотек и модулей вызываются без расширения .py, символ '*' в данном контексте обозначает импорт всех полей. Все функции для управления конструктором должны быть вызваны внутри функции control() в тексте вашей программы. Пример:
def control(): print ("Hello, world!")
1. Пример кода для получения снимка
# определение функции def take_frame(frame): camera_turn_on() sleep(2) # включить камеру и ждать загрузки устройства ready = camera_get_state() # проверить готовность камеры if ready: err = camera_take_photo(frame) # сделать снимок if err: print 'Error while taking frame (frame=%d)!' % frame # используется print() python 2.7 camera_turn_off() return 1 # код ошибки else: print 'Camera is not ready!' camera_turn_off() return 1 camera_turn_off() # обязательно выключить камеру! return 0 # нормальное исполнение # использование функции def control(): op_result = take_frame(0) print(op_result)
2. Рекомендуемый код для проверки магнитометра
# Функция - обертка для функции magnetometer_request_raw(num) -> err def magn_get(nmg, off = True): # nmg - номер магнетометра, переменная off - нужно ли выключать датчик # функция, которая работает с датчиком, проверяя, включен ли он, # и возвращая список [0, x_raw, y_raw, z_raw], если удалось # получить данные, и [1, 0, 0, 0], если произошла ошибка. if not magnetometer_get_state(nmg): # елси датчик не включен if magnetometer_turn_on(nmg): return [1, 0, 0, 0] # попробовать включить sleep(0.5) # если датчик включили, ждать загрузки 0.5 секунды magn_ret = magnetometer_request_raw(nmg) # сохранить значение скоростей в переменную magn_ret if magn_ret[0]: # если датчик вернул сообщение об ошибке, magnetometer_turn_off(nmg) # выключить датчик return [1, 0, 0, 0] # вернуть [1, 0, 0, 0] if off: magnetometer_turn_off(nmg) # выключить, если нужно return magn_ret # вернуть результат в случае успеха def control(): # Основная функция программы, в которой нужно вызывать остальные функции mgn_ret = [0,0,0,0] # Инициализируем mgn_ret while not mgn_ret[0]: # Пока датчик возвращает нормальные значения mgn_ret = magn_get(1, False) # сохраняем возвращаемые значения в переменную mgn_ret print ("state: {}, x_raw = {}, y_raw = {}, z_raw = {}".\ # Обратите внимание на символ переноса строки! format(mgn_ret[0], mgn_ret[1], mgn_ret[2], mgn_ret[3])) # Печатаем их в консоль print("Program failed!") # Если датчик не снимает данные, выводим сообщение об ошибке
3. Рекомендуемый код для проверки ДУС
# Функция - обертка для функции hyro_request_raw(num) -> err def hyro_get(nhyr, off = True): # nhyr - номер ДУС, переменная off - нужно ли выключать датчик в конце вызова # функция, которая работает с датчиком, проверяя, включен ли он, # и возвращая список [0, x_raw, y_raw, z_raw], если удалось # получить данные, и [1, 0, 0, 0], если произошла ошибка. if not hyro_get_state(nhyr): # елси датчик не включен if hyro_turn_on(nhyr): return [1, 0, 0, 0] # попробовать включить sleep(0.5) # если датчик включили, ждать загрузки 0.5 секунды hyro_ret = hyro_request_raw(nhyr) # сохранить значение скоростей в переменную hyro_ret if hyro_ret[0]: # если датчик вернул сообщение об ошибке, hyro_turn_off(nhyr) # выключить датчик return [1, 0, 0, 0] # вернуть [1, 0, 0, 0] if off: hyro_turn_off(nhyr) # выключить, если нужно return hyro_ret # вернуть результат в случае успеха def control(): # Основная функция программы, в которой нужно вызывать остальные функции hyr_ret = [0,0,0,0] # Инициализируем hyr_ret while not hyr_ret[0]: # Пока датчик возвращает нормальные значения hyr_ret = hyro_get(1, False) # сохраняем возвращаемые значения в переменную hyr_ret print ("state: %d, x_raw = %d, y_raw = %d, z_raw = %d",\ # внимание, символ разделения строки! % (hyr_ret[0], hyr_ret[1], hyr_ret[2], hyr_ret[3]) # Печатаем их в консоль print("Program failed!") # Если датчик не снимает данные, выводим сообщение об ошибке
4. Рекомендуемый код для проверки солнечных датчиков
def sunsensors_get(off = True): # True - значение аргумента off по умолчанию # номера датчиков - с 1-го по 4-й s_is_on = [sun_sensor_get_state(i+1) for i in range(4)] # проверка включенности if 0 in s_is_on: # если датчик не включен, s_on_bus = [sun_sensor_turn_on(i+1) for i in range(4)] # включаем sleep(2) # ждем загрузки устройств s_is_on = [int(not(i)) for i in s_on_bus] # переписываем значения в список s_is_on data = [] # создаем список для хранения данных for idx, i in enumerate(s_is_on): все датчики if s_is_on: data.append(sun_sensor_request_raw(idx+1)) # значение освещенности датчиков else: data.append([1, 0, 0, 0]) # значение, если датчик выключен if off: [sun_sensor_turn_off(i+1) for i in range(4)] # выключить датчики, если надо return data # вернуть полученные данные # использование функции sun_raw = sunsensors_get(False) # заменяем аргумент по умолчанию, датчики не выключаются после вызова
5. Рекомендуемый код для проверки управления маховиком
def motor_check(num): if not motor_get_state(num): # включен ли мотор if motor_turn_on(num): return 1 # попробовать включить, если невозможно, ошибка sleep(2) # ждать включения if motor_set_speed(num, 1000): return 1 # настроить скорость, или вернуть ошибку sleep(5) # пять секунд ожидания if motor_set_speed(num, 0): return 1 # натсроить скорость, или верунть ошибку motor_turn_off(num) # выключить ошибку # основная программа def control(): res = motor_check(1) print (res)
6. Рекомендуемый код для проверки передатчика телеметрии
# Пример функции для передачи любого сообщения, переданного как переменная msg типа str def msg_send(msg, trn = 1, res = 2, off = True): # msg - сообщение, trn - номер передатчика, res - номер наземного приемника, # off - нужно ли выключить передатчик при завершении (True - да, False - нет) if not transceiver_get_state(trn): # если передатчик не включен: включить if transceiver_turn_on(trn): # попытка включить return 1 # если не удалось включить, вернуть код ошибки 1 sleep(0.5) # если нормально принят сигнал о включении, ждать 0.5 сек if not transceiver_send(res, trn, msg): # если не удалось передать сообщение, transceiver_turn_off(trn) # выключить передатчик return 1 # вернуть код ошибки if off: transceiver_turn_off(trn) # выключить передатчик return 0 # вернуть код нормального завершения
7. Рекомендуемый код функции для проверки ВЧ-передатчика
def send_frame(num, frame, off = True): if not tranmitter_get_state(num): # проверка состояния ВЧ-передатчика if transmitter_turn_on(num): return 1 sleep(2) if transmitter_transmit_photo(num, frame): # передаем кадр frame if off: transmitter_turn_off(name) # допускаем, что выключение всегда успешно, return 1 # но, вообще говоря, это может быть не так if off: transmitter_turn_off(1) return 0 # код нормального завершения
8. Рекомендуемый код для работы с батареей
def battery(): ah = battery_get_charge() # проверяем заряд cc = battery_get_charging_current() # ток зарядки dc = battery_get_discharging_current() # ток разрядки print 'Ёмкость батареи: %g A-H' % ah # выводим данные print 'Ток заряда: %g mA' % cc print 'Ток разряда: %g mA' % dc return [ah, cc, dc] # возвращаем значения