AsciiMassage ermöglicht das Senden und Empfangen von Nachrichten. Genauer gesagt handelt es sich um einen Mikrocontroller- Massagepacker und -Parser für das ASCII-Format für jede Art von Stream (seriell, UDP usw.). Eine Nachrichtennachricht beginnt immer mit einer Adresszeichenfolge und wird von einer benutzerdefinierten Anzahl von Elementen (Bytes, Ints, Longs, Floats oder Strings) gefolgt. Die Adresszeichenfolge wird zum Weiterleiten der Nachricht verwendet.
Dies ist die ASCII-Implementierung der Massage-API.
https://github.com/SofaPirate/AsciiMassage
Die vollständige Kursdokumentation finden Sie im Ordner „docs“ oder online hier.
Fügen Sie die Bibliothek oben in Ihrem Code hinzu und instanziieren Sie einen AsciiMassageParser mit dem Namen „inbound“:
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
Innerhalb von loop() wird der serielle Stream mit parse() analysiert. Wenn parse() true zurückgibt, ist die Massage abgeschlossen und bereit.
if ( inbound.parseStream( &Serial ) ) {
// parse completed massage elements here.
}
In diesem Beispiel werden die Elemente einer Nachricht analysiert, die mit der Adresse „value“ beginnt und einen long gefolgt von einem int enthält:
// 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 ();
}
Der vollständige Codeblock lautet wie folgt:
# 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 ();
}
}
// [...]
}
Fügen Sie die Bibliothek oben in Ihrem Code hinzu und instanziieren Sie einen AsciiMassageParser mit dem Namen „inbound“:
# include < AsciiMassageParser.h >
AsciiMassageParser inbound;
Fügen Sie vor loop() eine Funktion hinzu, die aufgerufen wird, wenn eine Nachricht empfangen wird
void readMessage () {
// parse completed massage elements here.
}
Analysieren Sie innerhalb von loop() den seriellen Stream mit parse() und führen Sie „readMessage“ aus, wenn eine Nachricht empfangen wird
inbound.parseStream( &Serial , readMessage );
Der vollständige Codeblock lautet wie folgt:
# 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 );
// [...]
}
Fügen Sie die Bibliothek oben in Ihrem Code hinzu und instanziieren Sie einen AsciiMassagePacker mit dem Namen „outbound“:
# include < AsciiMassagePacker.h >
AsciiMassagePacker outbound;
Packen Sie eine Massage ein und dampfen Sie sie dann durch Serial:
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.