Pages: [1]   Go Down
Author Topic: Serial csv nachricht zerlegen  (Read 941 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?  
Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: October 11, 2010, 09:18:21 am by MaFu » Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Meinst Du jetzt Korman oder mich?
Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

beide smiley-wink
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

_______
Manfred

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: October 12, 2010, 04:37:11 am by Korman » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Korman
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

_______
Manfred

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: