Arduino:Примеры/Firmata
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Библиотека Firmata[1]
Библиотека Firmata реализует работу протокола Firmata для коммуникации с ПО хоста-компьютера. Это позволяет вам писать специальную прошивку без необходимости создавать свои собственные объекты и протокол для используемой вами программной среды.
Функции
Общие:
begin(); // запускает библиотеку
begin(long); // запускает библиотеку и задает скорость передачи данных в бодах
begin(Stream &s); // запускает библиотеку при помощи класса Stream (http://wikihandbk.com/wiki/Arduino:Справочник_языка_Arduino/Функции/Функции_передачи_данных/Stream), а не Serial (например, 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); // отправляет команду c произвольным массивом байтов
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 pin, byte byteCount, byte *arrayPointer);
Типы сообщений
Также в Firmata существуют разные типы сообщений, к которым можно «приклеить» функцию обратного вызова.
ANALOG_MESSAGE // аналоговое значение для одного контакта
DIGITAL_MESSAGE // 8 бит данных от цифрового контакта (один порт)
REPORT_ANALOG // включение/выключение отчетности о том, как работает аналоговый контакт
REPORT_DIGITAL // включение/выключение отчетности о том, как работает цифровой контакт
SET_PIN_MODE // переключение режима контакта между INPUT/OUTPUT/PWM и т.д.
STRING_DATA // строки в стиле C, используются с функцией stringCallbackFunction()
SYSEX_START // generic-сообщения произвольной длины (через протокол MIDI SysEx protocol), используются с функцией 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));
}
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino
- Стандартные библиотеки
- Стандартная библиотека
- Стандартная библиотека Arduino
- Стандартные библиотеки Arduino