Пример скетча, читающего строку из UART. Скетч сравнивает её с образцовыми строками "on" или "off", соответственно включая или выключая светодиод L.
#define LED_PIN 13 #define BUFFER0_MAX_SIZE 80 // максимальная длина строки char buffer0[BUFFER0_MAX_SIZE]; // строка unsigned int buffer0_size = 0; //текущий размер строки boolean buffer0_complete = false; //строка в буфере получена полностью void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(9600); } void loop() { if (buffer0_complete) { //Serial.println(buffer0); //обрабатываем команду: if (strcmp(buffer0, "off") == 0) {//команда выключить светодиод digitalWrite(LED_PIN, LOW); Serial.println("led is off"); } else if (strcmp(buffer0, "on") == 0) {//команда - включить! digitalWrite(LED_PIN, HIGH); Serial.println("led is on"); } else { Serial.print("Error: unknown command: "); Serial.print(buffer0); Serial.println(" (available commands: \"off\", \"on\")"); } clean_buffer0();//очищаем строку с командой, т.к. она уже обработана } } void serialEvent() { while (Serial.available()) {//пока в порту есть символы char ch = Serial.read(); // читаем один из порта switch (ch){ case '\n'://перевод строки игнорируем break; case '\r'://возврат каретки - окончание строки buffer0[buffer0_size] = 0; // добавляем ноль в конец строки (признак её окончания) buffer0_complete = true; // признак получения полной строки для гл. цикла break; default: buffer0[buffer0_size] = ch; // если символ - не конец строки - добавляем символ в буфер buffer0_size++; break; } if (buffer0_size == BUFFER0_MAX_SIZE) {//если строки размер - максимальный buffer0[buffer0_size] = 0; // добавляем ноль в конец строки (признак её окончания) buffer0_complete = true; // признак получения полной строки для гл. цикла } } } void clean_buffer0 () { buffer0[0] = 0; buffer0_size = 0; buffer0_complete = false; // очистка буфера }