Бібліотека Firmata

Документація

Firmata


Бібліотека Firmata реалізовує протокол Firmata для взаємодії з програмним забезпеченням на головному комп’ютері. Це дозволяє записувати користувальницьке програмне забезпечення без створення власного протоколу та об’єктів для середовища розробки, яке Ви використовуєте.

Методи
begin(); // запустити бібліотеку
begin(long); // запустити бібліотеку та перевизначити стандартну швидкість передачі
begin(Stream &s); // запустити бібліотеку з
// використанням [Stream](http://www.arduino.cc/en/Reference/Stream),
// але не Serial (eg Serial1 чи EthernetClient)
printVersion(); // надіслати версію протоколу до головного комп’ютера
blinkVersion(): // блимання версії протоколу на вбудованому світлодіоді (зазвичай пін 13)
printFirmwareVersion(); // надсилає ім’я користувальницького програмного забезпечення
// та версію головного комп’ютера
setFirmwareVersion(byte major, byte minor); // встановити ім’я користувальницького програмного забезпечення
// та версію, використовуючи ім’я скетчу без '.ino'
setFirmwareNameAndVersion(const char *name, byte major, byte minor); //  встановити ім’я
// та версію користувальницького програмного забезпечення

Надсилання повідомлень
sendAnalog(byte pin, int value); // надіслати аналогове повідомлення
sendDigitalPort(byte portNumber, int portData); // надіслати 8-бітний порт в одиничному цифровому
// повідомленні
sendString(const char* string); // надіслати рядок головному комп’ютеру
sendString(byte command, byte bytec, byte *bytev); // надіслати рядок головному комп’ютеру, використовуючи
// індивідуальний тип команди
sendSysex(byte command, byte bytec, byte* bytev); // надіслати команду довільним масивом байтів
write(byte c); // записати байт у Stream

Отримування повідомлень
available(); // перевірити, чи є вхідні повідомлення у буфері
processInput(); // обробляти вхідні повідомлення з буфера, відправляючи дані до будь-яких зареєстрованих
// функцій зворотного виклику
attach(byte command, callbackFunction myFunction); // прикріпити функцію до типу вхідного повідомлення
detach(byte command); // від'єднати функцію від типу вхідного повідомлення

Службові методи
sendValueAsTwo7bitBytes(int value); // записує значення як 2 байти
startSysex(void); // розпочинає повідомлення sysex
endSysex(void); // завершує повідомлення sysex

Функції зворотного виклику
Щоб прикріпити функцію до типу повідомлення, Ваша функція повинна відповідати стандартній функції зворотного виклику. На даний момент існує три типи функцій зворотного виклику у 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 command, byte byteCount, byte *arrayPointer);

Типи повідомлень
Існують різні типи повідомлень, які можна прикріпити до функцій зворотного виклику.
ANALOG_MESSAGE // аналогове значення для одиничного піна
DIGITAL_MESSAGE // 8-бітні дані цифрового піна (один порт)
REPORT_ANALOG // увімкнути / вимкнути звітування аналогового піна
REPORT_DIGITAL // увімкнути / вимкнути звітування цифрового піна
SET_PIN_MODE // змінити режим піна між INPUT/OUTPUT/PWM/тощо.
STRING_DATA // рядки стилю C, використовує stringCallbackFunction для типу функції
SYSEX_START //generic, довільна довжина повідомлень (через протокол 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(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);
  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));
  }
}

Повернутись до головної

Коментарі 0

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.