Arduino:Библиотеки/SimpleMessageSystem
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Библиотека SimpleMessageSystem[1][2]
Библиотека SimpleMessageSystem упрощает коммуникацию с терминалами и программами, которыми можно управлять при помощи сообщений (к примеру, Max/Msp или Pure Data). Поддерживает платы Arduino версий 0004 и выше. Все данные, входящие и исходящие через последовательную коммуникацию, интерпретируются как сообщения формата ASCII.
Саму библиотеку, а также примеры и инструкции к ней можно скачать отсюда.
Главные преимущества библиотеки SimpleMessageSystem:
- Возможность отправлять, получать и обрабатывать списки символов и целых чисел, присылаемых и отсылаемых платой Arduino
- Терминальная программа, Max/Msp и Pure Data могут коммуницировать при помощи одного и того же кода, используемого для Arduino
- Может быть адаптирована для отправки, получения и обработки строк
- Пересылаемая информация удобочитаема
Главный недостаток:
- Медленней, чем специализированный последовательный протокол, который обращается с битами и байтами, как с числами, а не ASCII-символами
Что такое сообщение?
Сообщение – это серия слов, которая заканчивается символом возврата каретки (опционально – символом перевода строки); слова состоят из символов формата ASCII и разделены пробелами. Выглядит все это следующим образом:
слово 1 (пробел) слово2 (пробел) слово3 (возврат каретки)
В текущей версии SimpleMessageSystem слова могут быть либо одним символом, либо целым числом. Сообщение считается завершенным, если в конце поставлен символ возврата каретки. Это также значит, что теперь его можно обрабатывать в скетче Arduino.
Пример кода Arduino номер 1
if (messageBuild()) { // проверяем, завершено ли сообщение
firstChar = messageGetChar()) { // берем первое присланное слово и в виде символа сохраняем его в переменную firstChar
if (firstChar = 'r') { // проверяем, является ли он символом «r»
secondChar = messageGetChar() // берем следующее слово и в виде символа сохраняем его в secondChar
if (firstChar = 'd') // чтобы продолжить, следующим символом должен быть «d»
messageSendChar('d'); // отправляем обратно считанный символ
for (char i=2;i<14;i++) {
messageSendInt(digitalRead(i)); // считываем контакты 2-13
}
messageEnd(); // завершаем сообщение, чтобы отправить его
}
}
}
Если этот код получит сообщение rd CR (CR означает возврат каретки), то вернет значения всех цифровых контактов в сообщении, имеющем следующую структуру:
d кон2 кон3 кон4 кон5 кон6 кон7 кон8 кон9 кон10 кон11 кон12 кон13 CR
Пример кода Arduino номер 2
if (messageBuild()) { // проверяем, завершено ли сообщение
firstChar = messageGetChar()) { // берем первое присланное слово и в виде символа сохраняем его в переменную firstChar
if (firstChar = 'w') { // проверяем, является ли он символом «w»
int pin = messageGetInt(); // берем следующее слово и в виде целого числа сохраняем его в pin
int state = messageGetInt(); // берем следующее слово и в виде целого числа сохраняем его в state
pinMode(pin,OUTPUT);
digitalWrite(pin,state);
}
Если этот код получит сообщение w 13 1 CR (CR означает возврат каретки), то выставит 13-ый контакт в состояние HIGH, в результате чего последняя строчка будет выглядеть как digitalWrite(13, HIGH). В языке Arduino HIGH – это «1», а LOW – это «0».
Как импортировать/установить библиотеку
- Скачайте ZIP-файл с библиотекой SimpleMessageSystem (ссылку смотрите выше).
- Откройте IDE Arduino, кликните на Скетч > Подключить библиотеку > Добавить .ZIP библиотеку (Sketch > Include Library > Add .ZIP Library…), в появившемся окне укажите путь к скачанному ZIP-файлу и нажмите Open.
- Создайте новый скетч (или откройте уже существующий) и кликните на Скетч > Подключить библиотеку > SimpleMessageSystem (Sketch > Include Library > SimpleMessageSystem). Когда библиотека будет импортирована, в верхней части скетча появится строчка
#inlcude SimpleMessageSystem.h
- Когда вы запустите (скомпилируете) свой код, он также скомпилирует библиотеку SimpleMessageSystem. Вы получите предупреждающие сообщения, но это «нормально».
Примеры использования
Запустите в IDE Arduino следующий скетч-пример: Файл > Примеры > SimpleMessageSystem > SimpleMessageSystem_example_1 (File > Examples > SimpleMessageSystem > SimpleMessageSystem_example_1).
Теперь откройте патч для Max/Msp или Pure Data, чтобы начать коммуникацию с платой Arduino.
Max/Msp
Откройте файл SimpleMessageSystem.mxb в папке MaxMsp Example. Используйте абстракции max2asciimessage и asciimessage2max в своих патчах Max/Msp, чтобы коммуницировать с платой Arduino, в которую загружена библиотека SimpleMessageSystem.
Pure Data
Откройте файл SimpleMessageSystem.pd в папке Pure Data Example. Используйте абстракции pd2ascii и ascii2pd в своих патчах Pure Data, чтобы коммуницировать с платой Arduino, в которую загружена библиотека SimpleMessageSystem. Если вы работаете на Linux и не знаете номер порта, к которому подключена Arduino, воспользуйтесь следующей терминальной командой:
i=0; for f in `ls /dev/tty[US]*`; do echo $i $f; i=$(( $i + 1 )); done
Как пользоваться библиотекой
Получение сообщения
- Вызовите функцию messageBuilt(). Если она возвращает «1» или больше, это значит, что в конце сообщения стоит символ возврата каретки, то есть оно считается законченным. По сути, функция messageBuilt() возвращает количество символов в сообщении, включая пробелы.
- Извлекаем первое слово, используя функцию messageGetChar() или messageGetInt().
- Повторяем второй шаг для всех входящих слов.
Отправка сообщения
- Вызываем функцию messageSendChar() или messageSendInt(), чтобы отправить символ или целое число.
- Повторяем второй шаг для всех символов и чисел, которые хотим отправить. Между вызовами этих функций автоматически ставятся пробелы.
- Вызываем функцию messageEnd(), чтобы отправить символ возврата каретки и тем самым просигнализировать, что сообщение завершено и готово к обработке.
Функции
Получение сообщения
- Проверяет, завершено ли сообщение. Если завершено, возвращает размер сообщения, включая пробелы. ВНИМАНИЕ: если вы вызовите эту функцию второй раз, это сбросит предыдущее сообщение!
int messageBuild()
- Если имеется доступное слово, возвращает его в качестве символа. Если доступных слов нет, возвращает «0». ВНИМАНИЕ: если вы отправите что-то вроде «foo», она вернет «f» и проигнорирует «oo».
char messageGetChar()
- Если имеется доступное слово, возвращает его в качестве целого числа. Если доступных слов нет, возвращает «0».
int messageGetInt()
Отправка сообщения
- Отправляет символ (автоматически вставляет пробелы в сообщении между каждым отправляемым символом).
void messageSendChar(char value)
- Отправляет целое число (автоматически вставляет пробелы в сообщении между каждым отправляемым целым числом).
void messageSendInt(int value)
- Завершает сообщение, сигнализируя цели, что сообщение готово к обработке.
void messageEnd()
Примеры
- SimpleMessageSystem example 1 - Управление функциями Arduino при помощи сообщений