Arduino:Примеры/SerialEvent

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция SerialEvent [1]

Демонстрирует использование функции serialEvent(). Она вызывается после loop() – в том случае, если в буфере последовательного порта есть какие-нибудь данные.

Необходимое оборудование

Цепь

Рис. 1. Для этого примера необходима только плата Arduino.
Рис. 1. Для этого примера необходима только плата Arduino.

Никакой, но Arduino должна быть подключена к компьютеру.

Код

/*
  Пример использования Serial Event 
 
  По прибытии новых данных скетч добавляет их к строке. Если получен символ новой строки, программа покажет строку, а потом очистит ее. 
 Этот пример можно попробовать вместе с GPS-ресивером, 
отсылающим данные типа NMEA 0183.
 
 Создан 9 мая 2011 Томом Иго (Tom Igoe).
 
 Этот код не защищен авторским правом. 
 
 http://www.arduino.cc/en/Tutorial/SerialEvent
 
 */

String inputString = "";         // строка, в которую будут записываться входящие данные 
boolean stringComplete = false;  // заполнилась ли строка или нет 

void setup() {
  // инициализируем последовательную передачу данных:
  Serial.begin(9600);
  // «бронируем» 200 байт для inputString:
  inputString.reserve(200);
}

void loop() {
  // если прибыл символ новой строки, показываем строку:
  if (stringComplete) {
    Serial.println(inputString); 
    // очищаем строку:
    inputString = "";
    stringComplete = false;
  }
}

/*
  Функция SerialEvent используется всякий раз при получении
новых данных через последовательный порт. Она запускается
при каждом запуске нового цикла, поэтому использование задержки 
может затормозить ответ. Позволяет передавать сразу несколько байтов.

 */
void serialEvent() {
  while (Serial.available()) {
    // получаем новый байт:
    char inChar = (char)Serial.read(); 
    // добавляем его к inputString:
    inputString += inChar;
    // если получили символ новой строки, оповещаем программу об этом,
    // чтобы она могла принять дальнейшие действия.
    if (inChar == '\n') {
      stringComplete = true;
    } 
  }
}

См.также

  1. serialEvent()

Внешние ссылки