Arduino:Примеры/SerialEvent: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


== Функция SerialEvent <ref>[http://www.arduino.cc/en/Tutorial/SerialEvent Arduino - SerialEvent]</ref>==
= Функция SerialEvent <ref>[http://www.arduino.cc/en/Tutorial/SerialEvent Arduino - SerialEvent]</ref>=


Демонстрирует использование функции '''SerialEvent()'''. Она вызывается после [[Arduino:Справочник языка Arduino/loop()|loop()]] – в том случае, если в буфере последовательного порта есть какие-нибудь данные.  
Демонстрирует использование функции [[Arduino:Справочник языка Arduino/Библиотеки/Serial/serialEvent()|serialEvent()]]. Она вызывается после [[Arduino:Справочник языка Arduino/loop()|loop()]] – в том случае, если в буфере последовательного порта есть какие-нибудь данные.  


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


* Плата Arduino - 1шт.
* [[Arduino:Продукты/Продукты Arduino|Плата Arduino]] - 1шт.


== Цепь ==
== Цепь ==
Строка 77: Строка 77:
</syntaxhighlight>
</syntaxhighlight>


== См.также==
= См.также=


# serialEvent()
# [[Arduino:Справочник языка Arduino/Библиотеки/Serial/serialEvent()|serialEvent()]]


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


<references />
<references />

Версия от 02:25, 22 февраля 2023

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


Функция 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()

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