Arduino:Библиотеки/SimpleMessageSystem: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Строка 112: Строка 112:
===Получение сообщения===
===Получение сообщения===


* <syntaxhighlight lang="c">int messageBuild()</syntaxhighlight> Проверяет, завершено ли сообщение. Если завершено, возвращает размер сообщения, включая пробелы. '''ВНИМАНИЕ: если вы вызовите эту функцию второй раз, это сбросит предыдущее сообщение!'''
* <syntaxhighlight lang="c">int messageBuild()</syntaxhighlight> Проверяет, завершено ли сообщение. Если завершено, возвращает размер сообщения, включая пробелы.  
* <syntaxhighlight lang="c">char messageGetChar()</syntaxhighlight> Если имеется доступное слово, возвращает его в качестве символа. Если доступных слов нет, возвращает '''«0»'''. '''ВНИМАНИЕ: если вы отправите что-то вроде «foo», она вернет «f» и проигнорирует «oo».'''
{{Внимание1|Если вы вызовите эту функцию второй раз, это сбросит предыдущее сообщение!}}
* <syntaxhighlight lang="c">char messageGetChar()</syntaxhighlight> Если имеется доступное слово, возвращает его в качестве символа. Если доступных слов нет, возвращает '''«0»'''.  
{{Внимание1|Если вы отправите что-то вроде «foo», она вернет «f» и проигнорирует «oo».}}
* <syntaxhighlight lang="c">int messageGetInt()</syntaxhighlight> Если имеется доступное слово, возвращает его в качестве целого числа. Если доступных слов нет, возвращает '''«0»'''.
* <syntaxhighlight lang="c">int messageGetInt()</syntaxhighlight> Если имеется доступное слово, возвращает его в качестве целого числа. Если доступных слов нет, возвращает '''«0»'''.



Текущая версия от 11:33, 18 февраля 2024

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



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

Как импортировать/установить библиотеку

  1. Скачайте ZIP-файл с библиотекой SimpleMessageSystem (ссылку смотрите выше).
  2. Откройте IDE Arduino, кликните на Скетч > Подключить библиотеку > Добавить .ZIP библиотеку (Sketch > Include Library > Add .ZIP Library…), в появившемся окне укажите путь к скачанному ZIP-файлу и нажмите Open.
  3. Создайте новый скетч (или откройте уже существующий) и кликните на Скетч > Подключить библиотеку > SimpleMessageSystem (Sketch > Include Library > SimpleMessageSystem). Когда библиотека будет импортирована, в верхней части скетча появится строчка
    #inlcude SimpleMessageSystem.h
    
  4. Когда вы запустите (скомпилируете) свой код, он также скомпилирует библиотеку 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

Как пользоваться библиотекой

Получение сообщения

  1. Вызовите функцию messageBuilt(). Если она возвращает «1» или больше, это значит, что в конце сообщения стоит символ возврата каретки, то есть оно считается законченным. По сути, функция messageBuilt() возвращает количество символов в сообщении, включая пробелы.
  2. Извлекаем первое слово, используя функцию messageGetChar() или messageGetInt().
  3. Повторяем второй шаг для всех входящих слов.

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

  1. Вызываем функцию messageSendChar() или messageSendInt(), чтобы отправить символ или целое число.
  2. Повторяем второй шаг для всех символов и чисел, которые хотим отправить. Между вызовами этих функций автоматически ставятся пробелы.
  3. Вызываем функцию messageEnd(), чтобы отправить символ возврата каретки и тем самым просигнализировать, что сообщение завершено и готово к обработке.

Функции

Получение сообщения

  • int messageBuild()
    
    Проверяет, завершено ли сообщение. Если завершено, возвращает размер сообщения, включая пробелы.
Внимание!

Если вы вызовите эту функцию второй раз, это сбросит предыдущее сообщение!

  • char messageGetChar()
    
    Если имеется доступное слово, возвращает его в качестве символа. Если доступных слов нет, возвращает «0».
Внимание!

Если вы отправите что-то вроде «foo», она вернет «f» и проигнорирует «oo».

  • int messageGetInt()
    
    Если имеется доступное слово, возвращает его в качестве целого числа. Если доступных слов нет, возвращает «0».

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

  • void messageSendChar(char value)
    
    Отправляет символ (автоматически вставляет пробелы в сообщении между каждым отправляемым символом).
  • void messageSendInt(int value)
    
    Отправляет целое число (автоматически вставляет пробелы в сообщении между каждым отправляемым целым числом).
  • void messageEnd()
    
    Завершает сообщение, сигнализируя цели, что сообщение готово к обработке.

Примеры

См.также

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