Werte aus dem Seriellen Monitor auswerten

Stelle den Serial Monitor so ein dass ein LF oder CR am Ende gesendet wird

Das Programm reagiert auf zwei Kommandos: "ledan" und "ledaus". Groß-/Kleinschreibung ist egal:

const int SERIAL_BUFFER_SIZE = 20;
char serialBuffer[SERIAL_BUFFER_SIZE];

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (readSerial(Serial) == true)
    parseSerial();
}

void parseSerial()
{
  if (strcasecmp(serialBuffer, "ledan") == 0)
    Serial.println("an");
  else if (strcasecmp(serialBuffer, "ledaus") == 0)
    Serial.println("aus");
}

bool readSerial(Stream& stream)
{
  static byte index;

  while (stream.available())
  {
    char c = stream.read();

    if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
    {
      serialBuffer[index++] = c;
    }
    else if ((c == '\n' || c == '\r') && index > 0)
    {
      serialBuffer[index] = '\0';
      index = 0;
      return true;
    }
  }
  return false;
}

Oder wenn du die Eingabe in einen Integer konvertieren willst:

void parseSerial()
{
  int value = atoi(serialBuffer);
  Serial.println(value);
}

Das kann man auch kombinieren. Dann kann man Kommandos wie "5,aus" oder "6,an" eingeben:

void parseSerial()
{
  char* ptr = strtok(serialBuffer, ",");
  int value = atoi(ptr);
  Serial.println(value);

  ptr = strtok(NULL, ",");
  if (strcasecmp(ptr, "an") == 0)
    Serial.println("LED an");
  else if (strcasecmp(ptr, "aus") == 0)
    Serial.println("LED aus");

  Serial.println();
}

Die Einlese-Funktion ist immer gleich. Man hat einen C String als Ergebnis. Je nachdem was man dann machen will muss man nur die Auswertungs-Funktion ändern