AsciiMassage ではメッセージの送受信が可能です。より正確には、これはマイクロコントローラーのメッセージパッカーであり、あらゆる種類のストリーム (シリアル、UDP など) の ASCII 形式のパーサーです。メッセージメッセージは常にアドレス文字列で始まり、その後にユーザー定義の数の要素 (バイト、整数、長整数、浮動小数点数、または文字列) が続きます。アドレス文字列はメッセージのルーティングに使用されます。
これは、Massage API の ASCII 実装です。
https://github.com/SofaPirate/AsciiMassage
完全なクラスのドキュメントは、「docs」フォルダーまたはオンラインのここにあります。
コードの先頭にライブラリを追加し、「inbound」という名前の AsciiMassageParser をインスタンス化します。
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
LOOP() 内で、parse() を使用してシリアル ストリームを解析します。 parse() が true を返した場合、メッセージは完了し、準備ができています。
if ( inbound.parseStream( &Serial ) ) {
// parse completed massage elements here.
}
この例では、アドレス「value」で始まり、1 つの long とそれに続く 1 つの 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 ();
}
}
// [...]
}
コードの先頭にライブラリを追加し、「inbound」という名前の AsciiMassageParser をインスタンス化します。
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
メッセージを受信したときに呼び出される関数を、loop() の前に追加します。
void readMessage () {
// parse completed massage elements here.
}
LOOP() 内で 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 );
// [...]
}
コードの先頭にライブラリを追加し、「outbound」という名前の 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.