Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Firmata

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Библиотека Firmata[1]

Библиотека Firmata реализует работу протокола Firmata для коммуникации с ПО хоста-компьютера. Это позволяет вам писать специальную прошивку без необходимости создавать свои собственные объекты и протокол для используемой вами программной среды.

Функции

Общие:

  1. begin(); // запускает библиотеку
  2. begin(long); // запускает библиотеку и задает скорость передачи данных в бодах
  3. begin(Stream &s); // запускает библиотеку при помощи класса Stream (http://wikihandbk.com/wiki/Arduino:Справочник_языка_Arduino/Функции/Функции_передачи_данных/Stream), а не Serial (например, Serial1 или EthernetClient)
  4. printVersion(); // отсылает версию протокола компьютера-хоста
  5. blinkVersion(): // мигает встроенным светодиодом (как правило, 13-ым), тем самым информируя о версии протокола
  6. printFirmwareVersion(); // отправляет название и версию прошивки компьютера-хоста
  7. setFirmwareVersion(byte major, byte minor); // задает название и версию прошивки (используя файловое имя скетча) минус расширение «.ino»
  8. setFirmwareNameAndVersion(const char *name, byte major, byte minor); // задает название и версию прошивки

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

  1. sendAnalog(byte pin, int value); // отправляет аналоговое сообщение
  2. sendDigitalPort(byte portNumber, int portData); // отправляет данные о 8-битном порте в одном цифровом сообщении
  3. sendString(const char* string); // отправляет строку компьютеру-хосту
  4. sendString(byte command, byte bytec, byte *bytev); // отправляет строку компьютеру-хосту, используя команду особого типа
  5. sendSysex(byte command, byte bytec, byte* bytev); // отправляет команду c произвольным массивом байтов
  6. write(byte c); // записывает байт в Stream

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

  1. available(); // проверяет, есть ли в буфере входящие сообщения
  2. processInput(); // обрабатывает входящие сообщения из буфера, отправляя данные к любой зарегистрированной функции обратного вызова
  3. attach(byte command, callbackFunction myFunction); // «приклеивает» функцию к типу входящего сообщения
  4. detach(byte command); // «отклеивает» функцию от типа входящего сообщения

Служебные функции

  1. sendValueAsTwo7bitBytes(int value); // записывает 2-байтное значение
  2. startSysex(void); // начинает sysex-сообщение
  3. endSysex(void); // заканчивает sysex-сообщение

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

Чтобы «приклеить» вашу функцию к типу сообщения, она должна соответствовать стандартной функции обратного вызова. В настоящий момент Firmata имеет три типа функций обратного вызова – generic, string и sysex.

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

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

Также в Firmata существуют разные типы сообщений, к которым можно «приклеить» функцию обратного вызова.

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

Пример

Этот пример показывает, как при помощи Firmata отправлять и получать аналоговые строки.

  1. #include <Firmata.h>
  2.  
  3. byte analogPin;
  4.  
  5. void analogWriteCallback(byte pin, int value)
  6. {
  7.   pinMode(pin, OUTPUT);
  8.   analogWrite(pin, value);
  9. }
  10.  
  11. void setup()
  12. {
  13.   Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);
  14.   Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
  15.   Firmata.begin();
  16. }
  17.  
  18. void loop()
  19. {
  20.   while (Firmata.available()) {
  21.     Firmata.processInput();
  22.   }
  23.   for (analogPin = 0; analogPin < TOTAL_ANALOG_PINS; analogPin++) {
  24.     Firmata.sendAnalog(analogPin, analogRead(analogPin));
  25.   }
  26. }

См.также

Внешние ссылки

  1. Arduino - Firmata Library