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