Go Down

Topic: Serial csv nachricht zerlegen (Read 1 time) previous topic - next topic

nr1

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?  

Korman

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

MaFu

#2
Oct 11, 2010, 04:17 pm Last Edit: Oct 11, 2010, 04:18 pm by MaFu Reason: 1
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?
_______
Manfred

nr1

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

MaFu

Meinst Du jetzt Korman oder mich?
_______
Manfred


MaFu

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...
_______
Manfred

nr1

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?

MaFu

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?
_______
Manfred

Korman

#9
Oct 12, 2010, 11:19 am Last Edit: Oct 12, 2010, 11:37 am by Korman Reason: 1
Quote
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

nr1

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

Korman

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

Korman

MaFu

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

nr1

So, habs jetzt mit dieser Library gelöst: http://www.arduino.cc/playground/Code/SimpleMessageSystem

Anscheinend gibts davon auch einen Nachfolger namens "Messenger", k.a. welche Vorteile diese Library hat: http://www.arduino.cc/playground/Code/Messenger

Go Up