RX String mit serialEvent einlesen und als Integer oder Float ausgeben

Mit serialEvent() können Zeichen von RX oder der USB Schnittstelle in den Arduino eingelesen werden. serialEvent() wird außerhalb von loop() ausgeführt und liest hier den Seriellen Buffer mit standardmäßig bis zu 64 Zeichen aus.

Das Programm basiert auf der Erklärung hier.

Sollten 64 Zeichen nicht reichen kann man den Buffer vergrößern, siehe hier.

Die Zeichen werden in einem String abgelegt. Das Zeilenende wird mit \n erkannt und dann wird stringComplete auf true gesetzt.

Im Hauptprogramm wird bei stringComplete==true der String ausgegeben. Zusätzlich wird der String in Integer und Float umgewandelt und ausgegeben.

Hier das Programm

// Seriell auf RX ( oder USB ) reinkommende Daten per event auslesen und das Zeilenende erkennen
// serialEvent() ist nicht kompatible mit Arduino Esplora, Leonardo oder Micro
//
// Matthias Busse 17.12.2018 Version 1.0

String inputString="";            // Eingabe String Daten
bool stringComplete=false;        // String abgeschlossen

void setup() {
  Serial.begin(38400);            // Baud
  inputString.reserve(64);        // 64 Byte Platz für den Seriellen Text
  Serial.println("Bitte Text eingeben und mit Enter bestaetigen:");
}

void loop() {
  if(stringComplete) {
    stringComplete=false;
    Serial.print("String : ");      // String ausgeben
    Serial.println(inputString);  
    Serial.print("Integer: ");      // Integer ausgeben
    Serial.println(inputString.toInt());
    Serial.print("Float  : ");      // Float ausgeben
    Serial.println(inputString.toFloat());
    inputString="";
  }
}

void serialEvent() {
// Wird aufgerufen wenn an RX Daten angekommen sind, ausserhalb von loop().
// Ein delay() in loop() kann die Datenübernahme verzögern.
// Der Arduino RX Buffer ist standardmässig 64 Zeichen groß, kann aber ggf. vergrößert werden.
  while(Serial.available()) {        // bis alle Zeichen im RX Buffer ausgelesen sind
    char inChar=(char)Serial.read(); // ein Zeichen im RX Buffer auslesen
    if(inChar == '\n') {             // String Ende erkennen
      stringComplete=true; 
    }
    else {                            // Zeichen anhängen
      inputString+=inChar; 
    }
  }
}

Verwendet wurden :
Arduino Uno
Arduino Programm Version 1.8.0

von Matthias Busse

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.