Go Down

Topic: State machine beenden (Read 348 times) previous topic - next topic

Serenifly

#15
Apr 23, 2019, 06:07 pm Last Edit: Apr 23, 2019, 06:09 pm by Serenifly
Hier mal eine sehr grobe Einlese-Routine ohne Zustandsmaschine:

Code: [Select]

void loop()
{
   if (readSerial())
   {
      //Auswertung
   }
}

bool readSerial()
{
    if (Serial.available() > 0)
    {
        //einlesen mit read()

        if(fertig)
          return true;
    }

   return false;
}


Die Lese-Funktion wird ständig aufgerufen und meldet wenn sie fertig ist (z.B. X Bytes eingelesen oder Endzeichen gefunden). Wenn sie noch nicht fertig ist kehrt sie wieder zurück um man kann in loop() noch andere Dinge tun. Wenn true kommt wertet man aus was da ist.

Ich verwende da im fertigen Code zwar eine while-Schleife in readSerial() statt dem if, aber i.d.R. ist da nur ein Byte im Puffer. Wenn mehr drin sind hat loop() länger gebraucht.

Go Up