Pages: [1]   Go Down
Author Topic: Serial.read() -> Ausgabe mehrfach  (Read 747 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe ein kleines Problem und komm nicht weiter.
Ich habe eine kleine Visual Basic Anwendung welche verschiedene Strings an den Arduino sendet. Momentan in der Testphase ohne irgend welche CRC Prüfung, kommt dann ev. noch hinzu.
Das Problem ist nun wenn ich z.B. "test" an den uC sende und danach "day" nimmt der uC nochmals "test" an obwohl dies gar nicht gesendet wurde und erst nach mehrfachem senden des "day" wird dann auch wirklich dies angenommen.
Ich dachte mir zuerst dass das char array ev. irgend wie falsch ist und habe es danach einfach direkt mal jedesmal mit "0" gefüllt was aber auch keine Besserung bringt.
Sieht jemand den Fehler?
Code:
long mili ;

char input[15];  // puffer für die Daten
char current;     // puffer für empfangenes Zeichen
int incount = 0;  // Zähler zum schreiben in den Puffer
bool lineComplete = false; //
void loop() {
mili = millis();
temp_update();
  int z=1;
  while ( (Serial.available()) & (incount < 16) & (!lineComplete) )
  {
    current = Serial.read(); // aktuelles Zeichen einlesen
    if (current != 10)            // ist das empfange Zeichen kein ENTER
    {
      if(current==13)
      {
      } else {
       input[incount] = current;
       incount++;
      }
    }
    else
    {
        input[incount] = '\0';
        lineComplete = true;
    }
  }

    if (lineComplete) {
      z= 1;
    lineComplete = false;
    incount = 0;
    current=0;
    String rec = String(input);
    // Soll das Array leeren....
    for (int j=0; j<15; ++j) {input[j] = '\0'; }
   
   
    // Ein paar Tests, nicht weiter beachten...
    if(rec=="test")
    {
      toggle() ;
    } else {
     
      if(rec=="night")
      {
       analogWrite(LCDLIGHT, 7);
      } else {
       
       if(rec=="day")
      {
       analogWrite(LCDLIGHT, 250);
      }
       
      }
     
     
    }
}

 
}
Logged

Bavaria Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 121
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Auf den ersten (flüchtigen) Blick muss

Code:
while ( (Serial.available()) & (incount < 16) & (!lineComplete)

in

Code:
while ( (Serial.available()) && (incount < 16) && (!lineComplete)

geändert werden, also 2x& - Du willst ja eine bedingungsabhängige Verknüpfung.

Gruß, mmi.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke! Es scheint wirklich daran gelegen zu haben. Nun Funktioniert es zumindest bei mehrfachem Test ohne das beschriebene Problem.
Logged

Heidelberg
Offline Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vor der Änderung hat er deine Ausgabe vermutlich 3-fach ausgegeben. Da gibt es überall so eine DIN A4 Seiten große Erklärung zu den Operatoren in C, wenn man das mal gelesen hat passiert das nicht mehr.
Logged

 

Pages: [1]   Go Up
Jump to: