Бібліотека 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