Serial csv nachricht zerlegen

Hallo,

ich schicke vom PC einige Nachrichten an den Arduino Baustein, die das Ziel haben von verschiedenen Pins das PWM Ausgangssignal zu setzen. Die Nachricht ist folgend ausgebaut:

SET;1;255

SET = was soll arduino machen
1 = pin
255 = pwm wert

Arduino soll diese Nachricht zerlegen, und dann also Pin 1 auf Wert 255 setzen. Wie empfange und zerlege ich die Message auf Arduino am besten?

Serial.available()
Serial.read()
Diverse Stringfunktionen aus C wenn du es nicht beim lesen direkt machst.
Eventuell atoi, wenn es unbedingt sein muß.

Das ist ein ganz typisches Progrämmchen aus Programmieren für Anfänger - unser 3. Programm.

Korman

Nachdem die SerialLib des Arduino die Daten byteweise empfängt, schickst Du am besten einfach 3 Bytes.
Byte 1: Befehlscode (z.B. 1 für SET)
Byte 2: Pin Nummer
Byte 3: PWM Wert
Nachdem Du bei PWM eh nur max. 255 einstellen kannst, sollte das die einfachste Lösung sein.
Wozu das Ganze als Text übertragen?

Hast du vll ein kurzes Codebeispiel wie die Nachricht aussieht und diese auf Arduino verarbeitet wird?

Meinst Du jetzt Korman oder mich?

beide :wink:

Auf Arduino Seite:

#define COMMAND_SET 1

...

void getCommand()
{
if (Serial.available() > 0)
{
switch (Serial.read())
{
case COMMAND_SET:
analogWrite(Serial.read(), Serial.read());
break;
case ...
}
}
}

Sollten halt noch ein paar Fehlerprüfungen rein...

ok ist schon kalr wie du das meinst.

So kann ich es aber nicht realisieren, da ich im Steuerprogramm Threads benutze => ich muss die nachricht als ganzes rausschicken und nicht in Teilen

Wie kann ich die gesamte Nachricht auf Arduino empfangen und in eine String Variable einlesen?

Du kannst doch die Nachricht als Ganzes schicken. Die Nachricht besteht aus 3 Bytes und landet komplett im Eingangspuffer des Arduino (Größe: 128 Byte).
Das Auslesen der Übertragung geht aber nicht anders weil Serial.read() nur ein einzelnes Byte aus dem Puffer liest.
Wo ist das Problem?

Wie kann ich die gesamte Nachricht auf Arduino empfangen und in eine String Variable einlesen?

Woran erkennst du, daß eine Nachricht zu Ende ist? Sobald das klar ist, einfach auf das Ende der Nachricht warten und die Nachricht erst bearbeiten, wenn die ganz da ist. Dann funktioniert alles ganz einfach.

Korman

Das Problem ist, dass ich ein vollständiges Beispiel suche, wie ich aus einer Anwendung heraus Daten an Arduino zur Verarbeitung schicken kann.

Wenn dir das zu viel Arbeit ist, dann nimm doch Firmata. Da hast du fertige Beispiele.

Korman

Ohne zu wissen, mit was Du die PC-seitige Anwendung erstellst, wird man wohl kein Beispiel liefern können.

So, habs jetzt mit dieser Library gelöst: Arduino Playground - SimpleMessageSystem

Anscheinend gibts davon auch einen Nachfolger namens "Messenger", k.a. welche Vorteile diese Library hat: Arduino Playground - Messenger