Schwierigkeiten mit Auswertung Serieller Übertragung

Hiho,

ich habe Probleme mit folgendem Sketch, wenn ich über den Serial Monitor das Wort "fade" eingebe sollte
eigentlich die Anweisung im If ausgeführt werden. Funktioniert aber leider nicht, und ich weiß nicht warum :fearful:

Hier mal der Sketch:

String message ="";
char char_In;


void setup()
{
  Serial.begin(9600);
  Serial.print("Serielle Schnittstelle gestartet");
  Serial.println();   
  delay(5);
  /* add setup code here */

}

void loop(){

  if(Serial.available()>0){

    while(Serial.available() > 0 ){
      char_In = Serial.read();
      message.concat(char_In);
      delay(5);            
    }  

    Serial.println(message);


    if( message.equals("fade")){
      Serial.println("Match");

    }
    else Serial.println("No Match");

  }
  message="";

}

Vielleicht könnt Ihr helfen.

Schönen Gruß
Ilu

iluvatar2k13:
Funktioniert aber leider nicht, und ich weiß nicht warum :fearful:

Achte auf die Steuerzeichen, die der serielle Monitor am Zeilenende senden soll!

Dein Code funktioniert nur dann, wenn Du den seriellen Monitor rechts unten auf "kein Zeilenende" einstellst.

Wenn Du z.B. "sowohl NL als auch CR" eingestellt hast, kommen zwei zusätzliche Steuerzeichen für "New Line" und "Carriage Return", die Du mit ans Ende Deines Strings einliest. Wenn Du diese unsichtbaren Steuercodes unterhalb ASCII-32 ausfiltern möchtest, verwende:

      if (char_In>=32) message.concat(char_In);

Dann funktioniert es unabhängig davon, ob und welches Zeilenende nach Deiner Eingabe gesendet wird.

Du kannst das verwenden:
http://forum.arduino.cc/index.php?topic=194811.msg1439191#msg1439191

Damit musst du den SerialMonitor so einstellen, dass er ein Carriage Return als Abschluss schickt.

Der Vergleich geht dann mit strcmp():
if(strcmp(message, "fade") == 0)
...

char* receiveBuffer()
#define ZEILENTRENNZEICHEN 13   // 13 ist Steuerzeichen CR (Carriage Return)
{
  static char lineBuffer[63]; // Maximale Zeilenlänge festlegen
  static byte counter=0;
  char c;
  if (Serial.available()==0) return NULL; // Nullpointer zurück
  if (counter==0) memset(lineBuffer,0,sizeof(lineBuffer));// Puffer vor Benutzung löschen
  c=Serial.read();
  if (c==ZEILENTRENNZEICHEN)
  {
    counter=0;
    return lineBuffer;
  }
  else if (c>=32) // kein Steuerzeichen?
  {
    lineBuffer[counter]=c; // Zeichen im Zeilenpuffer einfügen
    if (counter<sizeof(lineBuffer)-2) counter++;
  }
  return NULL;
}

void loop()
{
      char* text = receiveBuffer()

      if(text != NULL)
      {
               if(strcmp(text, "fade") == 0)
               {
                    Serial.println("Match");
               }
               else
               { 
                   Serial.println("No match");
               }
      }
    
}