Инструменты пользователя

Инструменты сайта


examples-py

ВНИМАНИЕ: текущая версия среды исполнения 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]                       # возвращаем значения
examples-py.txt · Последние изменения: 2017/01/15 23:05 — tagunil