Auswertung von einkommenden BT-Signalen

Hallo,

strings kann man nicht wie Zahlen vergleichen. Dafür gibts die Funktion strncmp und du brauchst ein ausreichend großen Einlesepuffer.

Bsp. Einlesepuffer:

const byte SERIAL_BUFFER_SIZE = 30;
char serialBuffer[SERIAL_BUFFER_SIZE];

Bsp. Einlese Funktion:

bool read_Serial()
{
  static byte index = 0;

  if (Serial.available() > 0)  {
    byte c = Serial.read();
    if (c >= 32 && c != '\n' && (index < SERIAL_BUFFER_SIZE - 1))
    {
      serialBuffer[index++] = c;        // in Buffer schreiben
    }
    else if ( c == '\n') {                // Übertragungsende
      serialBuffer[index] = '\0';        // Null Terminator setzen
      index = 0;
      return true;
    }
  }
  return false;
}

Bsp. Auswertefunktion:

void ist_serial_was_da ()
{
  if ( read_Serial() == true)  {
      
    if (strncmp(serialBuffer, "STOP", 4) == 0)  {            // string vergleichen
      // ...
      // mach was sinnvolles
    }
    else if (strncmp(serialBuffer, "VOR", 3) == 0)  {        // string vergleichen
      // ...
      // mach was sinnvolles
    }
    memset(serialBuffer, '\0', sizeof(serialBuffer));          // seriellen Buffer löschen
  }
}

Das wäre für Strings das Grundgerüst. Das Endeerkennungszeichen \n und \r wird mit Serialprintln() automatisch erzeugt.
In Terminals wie hterm sieht man das.

Wenn du aber Datentypen mit strings mischen möchtest verkompliziert das alles. Du müsstest dann aus dem Strings einzelne Elemente rausfischen. Das geht auch, dafür gibts auch Funktionen, ich rate davon ab, wenn es nicht unbedingt notwendig ist.
Kannst du nicht Zahlencodes für bestimmte Befehle definieren? Du überträgst immer einen Datentyp unsigned int. Alle Werte die meinetwegen größer 1000 sind, sind irgendwleche Steuercodes. Alles was 0 bis 255 ist, sind deine PWM Werte.