AsciiMassage позволяет отправлять и получать сообщения. Точнее, это микроконтроллерный массажный упаковщик и парсер формата ASCII для любого типа потока (Serial, UDP и т.д.). Сообщение сообщения всегда начинается с адресной строки, за которой следует определенное пользователем количество элементов (байты, целые числа, длинные числа, числа с плавающей запятой или строки). Строка адреса используется для маршрутизации сообщения.
Это ASCII-реализация API-интерфейса массажа.
https://github.com/SofaPirate/AsciiMassage
Полную документацию по классу можно найти в папке «docs» или здесь.
Добавьте библиотеку в начало вашего кода и создайте экземпляр AsciiMassageParser с именем «inbound»:
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
Внутри цикла() анализируйте последовательный поток с помощью parse(). Если parse() возвращает true, массаж завершен и готов.
if ( inbound.parseStream( &Serial ) ) {
// parse completed massage elements here.
}
В этом примере анализируются элементы сообщения, которые начинаются с адреса «value» и содержат один long, за которым следует один int:
// Does the massage's address match "value"?
if ( inbound.fullMatch ( " value " ) ) {
// Get the first long.
long ms = inbound. nextLong ();
// Get the next int.
int an0 = inbound. nextInt ();
}
Полный блок кода выглядит следующим образом:
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
// [...]
void loop () {
if ( inbound. parseStream ( &Serial ) ) {
// parse completed massage elements here.
// Does the massage's address match "value"?
if ( inbound. fullMatch ( " value " ) ) {
// Get the first long.
long ms = inbound. nextLong ();
// Get the next int.
int an0 = inbound. nextInt ();
}
}
// [...]
}
Добавьте библиотеку в начало вашего кода и создайте экземпляр AsciiMassageParser с именем «inbound»:
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
Добавьте перед циклом() функцию, которая будет вызываться при получении сообщения.
void readMessage () {
// parse completed massage elements here.
}
Внутри цикла() анализируйте последовательный поток с помощью parse() и запускайте "readMessage" при получении сообщения.
inbound.parseStream( &Serial , readMessage );
Полный блок кода выглядит следующим образом:
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
// [...]
void readMessage () {
// parse completed massage elements here.
// Does the massage's address match "value"?
if ( inbound. fullMatch ( " value " ) ) {
// Get the first long.
long ms = inbound. nextLong ();
// Get the next int.
int an0 = inbound. nextInt ();
}
}
void loop () {
inbound. parseStream ( &Serial , readMessage );
// [...]
}
Добавьте библиотеку в начало вашего кода и создайте экземпляр AsciiMassagePacker под названием «исходящий»:
# include < AsciiMassagePacker.h >
AsciiMassagePacker outbound;
Упакуйте массаж , а затем пропарьте его через сериал:
outbound.beginPacket( " value " ); // Start a packet with the address called "value".
outbound.addLong( millis() ); // Add the milliseconds.
outbound.addInt( analogRead( 0 ) ); // Add a reading of analog 0.
outbound.streamPacket(&Serial); // End the packet and stream it.