Перейти к основному содержимому

RI_SDK_exec_RGB_LED_Flicker

Информация

RISDK - библиотека Robo Intellect Software Development Kit
exec - группа исполнителей
RGB_LED - название устройства светодиод
Flicker - название метода мерцания светодиода

Сигнатура функции:

RI_SDK_exec_RGB_LED_Flicker(descriptor, r, g, b, duration, qty, async, errorText):errorCode

Описание метода

Мерцание.

Дает команду светодиоду с дескриптором descriptor мерцать (постепенно изменять яркость цвета от 0 до значений r, g, b для красного, зеленого и синего цвета соответственно и обратно). Параметр duration устанавливает время, за которое яркость света изменяется от 0 до значения установленного параметрами r, g, b и за которое яркость уменьшается обратно до 0. Количество мерцаний задается параметром qty. Параметр async устанавливает режим выполнения команды - асинхронный или синхронный.

При синхронном режиме, программа, которая вызвала данную функцию, ожидает завершение выполнения команды. При асинхронном режиме этого ожидания не происходит, и выполнение команды осуществляется параллельно дальнейшей работе программы, вызвавшей данную функцию.

*При значении qty = 0 операция выполняется до тех пор, пока не придет другая команда или команда остановки

Параметры и возвращаемые значения

ПараметрТип для Shared objectТип для Golang gRPCОписание
descriptorint (тип C)int64Дескриптор компонента светодиода
rint (тип C)int64Значение максимальной яркости для красного цвета (0 -255)
gint (тип C)int64Значение максимальной яркости для зеленого цвета (0 -255)
bint (тип C)int64Значение максимальной яркости для синего цвета (0 -255)
durationint (тип C)int64Продолжительность изменения яркости от 0 до максимальной(миллисекунды)
qtyint (тип C)int64Количество итераций (мерцаний)
asyncbool (тип C)boolПризнак асинхронного выполнения команды
errorTextchar[1000] (тип C)stringТекст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCodeint (тип C)int64Код ошибки

Примеры

Пример №1 - Мерцания светодиода всеми тремя цветами

В данном примере осуществляется мерцание светодиодом с дескриптором led с продолжительностью 1 импульса в 0.5 секунды. Количество мерцаний - 5. Значения максимальной яркости всех цветов - 250.

# Мерцания светодиода всеми тремя цветами с продолжительностью 1 импульса в 0.5 секунды.
# Количество мерцаний - 5. Значения максимальной яркости всех цветов - 250.
errCode = lib.RI_SDK_exec_RGB_LED_Flicker(led, 250, 250, 250, 500, 5, False, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

Полный текст примера


from ctypes.util import find_library
import platform
import sys
from ctypes import *

# Подключаем внешнюю библиотеку для работы с SDK
platform = platform.system()
if platform == "Windows":
libName = "librisdk.dll"
if platform == "Linux":
libName = "librisdk.so"

pathLib = find_library(libName)
lib = cdll.LoadLibrary(pathLib)


# Указываем типы аргументов для функций библиотеки RI_SDK
lib.RI_SDK_InitSDK.argtypes = [c_int, c_char_p]
lib.RI_SDK_CreateModelComponent.argtypes = [c_char_p, c_char_p, c_char_p, POINTER(c_int), c_char_p]
lib.RI_SDK_LinkPWMToController.argtypes = [c_int, c_int, c_uint8, c_char_p]
lib.RI_SDK_LinkLedToController.argtypes = [c_int, c_int, c_int, c_int, c_int, c_char_p]
lib.RI_SDK_DestroySDK.argtypes = [c_bool, c_char_p]
lib.RI_SDK_exec_RGB_LED_Flicker.argtypes = [c_int, c_int, c_int, c_int, c_int, c_int, c_bool, c_char_p]

def main():
errTextC = create_string_buffer(1000) # Текст ошибки. C type: char*
i2c = c_int()
pwm = c_int()
led = c_int()

# Инициализация библиотеки RI SDK с уровнем логирования 3
errCode = lib.RI_SDK_InitSDK(3, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

# Создание компонента i2c адаптера модели ch341
errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "i2c_adapter".encode(), "ch341".encode(), i2c, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("i2c: ", i2c.value)

# Создание компонента ШИМ модели pca9685
errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "pwm".encode(), "pca9685".encode(), pwm, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("pwm: ", pwm.value)

# Создание компонента светодиода модели ky016
errCode = lib.RI_SDK_CreateModelComponent("executor".encode(), "led".encode(), "ky016".encode(), led, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("led: ", led.value)

# Связывание i2c с ШИМ
errCode = lib.RI_SDK_LinkPWMToController(pwm, i2c, 0x40, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

# Связывание ШИМ со светодиодом
errCode = lib.RI_SDK_LinkLedToController(led, pwm, 15, 14, 13, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

# Мерцания светодиода всеми тремя цветами с продолжительностью 1 импульса в 0.5 секунды.
# Количество мерцаний - 5. Значения максимальной яркости всех цветов - 250.
errCode = lib.RI_SDK_exec_RGB_LED_Flicker(led, 250, 250, 250, 500, 5, False, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

# Удаление библиотеки со всеми компонентами
errCode = lib.RI_SDK_DestroySDK(True, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("Success")

main()