Serial auswerten - bin nicht zufrieden mit meiner Lösung..

Hallo Experten,

ich hab einen Arduino Uno per USB an einem Android Tablet hängen. Vom Tablet aus werden Befehle für einen 433MHZ Transmitter gesendet.

Diese kommen im Arduino als Serial-Text an.

Mein Sketch funktioniert (meist) - ich bin aber nicht ganz sicher ob es nicht zuverlässiger und besser geht.

#include <RemoteTransmitter.h>
String inputString = "";  
void setup() {
  Serial.begin(9600);
  Serial.println("Arduino ist mit 9600 bereit");
   }

void loop() {
  if (Serial.available() > 0)  {
    char inByte = Serial.read();
    inputString  += inByte;
             if (inputString == "7,522451,285,3") {RemoteTransmitter::sendCode(7, 522451, 285, 3);  }         
             
                                                   
      }   
   
     else {

             delay(50);
             inputString="";
          }
}

Könnte mal jemand drüber schauen und mir einen Tip geben.

Vielen Dank für Eure Hilfe!

VG Tom

Bei 9600 Baudrate kommt ein Byte ca alle 1 mS. Um 14 Byte zu empfangen braucht es ca 15mS. Du mußt dem Arduino Zeit geben die Bytes zu empfangen bevor Du sie ausliest. Ein delay(20); vor char inByte = Serial.read(); müßte genügen.
Grüße Uwe

Hallo Tom,

Ich wundere mich, dass das "meist" funktioniert ?

Du liest Zeichen und hängst sie an einen leeren String an, der daraufhin den Inhalt
"7,522451,285,3" haben soll ?
Na gut, wenn die Zeichen so schnell kommen, dass zwischendrin nie Serial.available() 0 zurückliefert, kann es evtl. gehen.

Bei 9600 Bd kriegst du ca. ein Zeichen je ms. Üblicherweise sollte eine leere loop() schneller sein...

Ich würde es so machen, dass bei Empfang des ersten Zeichens ( '7' ) so lange gewartet wird, bis alle Zeichen da sein müssten ( ca 20 ms ), diese von Text in Zahlen gewandelt werden und dann das entsprechende sendCode Kommando gesendet wird.

Zur Synchronisierung würde ich auch Zeilenende-Zeichen mitsenden, auslesen und dadurch das sendCode Kommando starten ...

Uwe, du bist einfach schneller...

michael_x:
Uwe, du bist einfach schneller...

Ich sehe das so, daß wir beide das Richtige geschrieben haben. :wink: :wink: :wink: :wink:

DANKE - an Euch BEIDE!!!

Es hat mir geholfen, den Ablauf von Serial besser zu vestehen.

Hab das Sketch schon ein wenig verändert.... nun kommt der Dauertest.

Viele Grüße
Tom