Шановні друзі! Сайт знаходиться в процесі перекладу на солов'їну мову. Все буде Україна!

Библиотека Firmata

В данной библиотеке реализован протокол Firmata, предназначенный для связи микроконтроллера с прикладным программным обеспечением на компьютере. Использование библиотеки Firmata освобождает от необходимости написания собственных протоколов и объектов для взаимодействия устройства и ПК.

Методы

begin()
запустить библиотеку
begin(long)
запустить библиотеку, переопределив скорость передачи данных
printVersion()
отправить компьютеру текущую версию протокола
blinkVersion()
отобразить текущую версию протокола путем изменения логического состояния 13 вывода
printFirmwareVersion()
отправить компьютеру название и текущую версию прошивки
setFirmwareVersion(byte major, byte minor)
задать имя и версию прошивки по имени файла (без .pde)

Отправка сообщений

sendAnalog(byte pin, int value)
отправить аналоговое сообщение
sendDigitalPorts(byte pin, byte firstPort, byte secondPort)
отправить состояние цифровых портов в виде двух отдельных байт
sendDigitalPortPair(byte pin, int value)
отправить состояние цифровых портов в виде целого числа типа int
sendSysex(byte command, byte bytec, byte* bytev)
отправить массив байт в виде команды определенного типа
sendString(const char* string)
отправить строку компьютеру
sendString(byte command, const char* string)
отправить строку в виде команды определенного типа

Получение сообщений

available()
проверить наличие входящих сообщений в буфере
processInput()
обработать входящие сообщения в буфере, отправив поступившие данные зарегистрированным функциям обратного вызова.
attach(byte command, callbackFunction myFunction)
ассоциировать функцию с определенным типом сообщений
detach(byte command)
отменить ассоциацию функции с определенным типом сообщений

Функции обратного вызова

Для того, чтобы ассоциировать свою функцию с каким-либо типом сообщений, ее формат должен совпадать с форматом стандартных функций обратного вызова. На данный момент в протоколе Firmata предусмотрено всего три стандартных типа таких функций: generic, string и sysex.

generic
void callbackFunction(byte pin, int value);
system_reset
void systemResetCallbackFunction(void);
string
void stringCallbackFunction(char *myString);
sysex
void sysexCallbackFunction(byte pin, byte byteCount, byte *arrayPointer);

Типы сообщений

Ниже перечислены разные типы сообщений, с которыми можно ассоциировать функции обратного вызова.

ANALOG_MESSAGE
аналоговое значение для одного вывода
DIGITAL_MESSAGE
8-битное цифровое значение (соответствует выводам одного порта)
REPORT_ANALOG
включение/выключение отчета о состоянии аналогового вывода
REPORT_DIGITAL
включение/выключение отчета о состоянии цифрового порта
SET_PIN_MODE
изменение режима работы вывода между INPUT/OUTPUT/PWM/и др.
FIRMATA_STRING
C-строки, в качестве типа функции необходимо использовать stringCallbackFunction
SYSEX_START
общие сообщения произвольной длины (через протокол MIDI SysEx), в качестве типа функции необходимо использовать sysexCallbackFunction
SYSTEM_RESET
сообщение о сбросе прошивки в первоначальное состояние, в качестве типа функции необходимо использовать systemResetCallbackFunction

Пример

В данном примере показана процедура отправки и получения аналоговых сообщений с использованием протокола Firmata.

#include <Firmata.h>

byte analogPin;

void analogWriteCallback(byte pin, int value)
{
    pinMode(pin,OUTPUT);
    analogWrite(pin, value);
}

void setup()
{
    Firmata.setFirmwareVersion(0, 1);
    Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
    Firmata.begin();
}

void loop()
{
    while(Firmata.available()) {
        Firmata.processInput();
    }
    for(analogPin = 0; analogPin < TOTAL_ANALOG_PINS; analogPin++) {
        Firmata.sendAnalog(analogPin, analogRead(analogPin)); 
    }
}