logo
+7 (495) 997-37-74
Москва, ул.Международная, 15






12.05.2019

Прием данных от компьютера через Serial порт

Прием данных от компьютера через Serial порт

В предыдущем эксперименте мы использовали Serial порт для отправки данных из контроллера в компьютер. Сейчас же мы, наоборот, будем принимать данные с компьютера.

Комплектующие

Такие же как в предыдущем уроке.

Схема

Такая же как в предыдущем уроке.

Тип char

char — это тип для представления символьных данных. Переменная типа char занимает 1 байт и может хранить один алфавитно-цифровой символ (литеру). При объявлении литеры используются одиночные кавычки: 'A' (двойные кавычки используется при объявлении строки: "ABC").

Символ хранится в памяти как число, соответствующее коду символа в таблице кодировки ASCII. Так как символ хранится как число, то над ним можно производить арифметические действия (например, 'A' + 1 будет 66, так как ASCII код 'A' ровняется 65).

Скетч

Теперь напишем программу для получения символов от платы Arduino в окно монитора последовательного порта и отправки их обратно.

char inChar;
 
void setup() { 
  Serial.begin(115200);
  Serial.println("UNO is ready!");
} 
 
void loop() { 
  if (Serial.available()) {
    inChar = Serial.read();
    Serial.print("UNO received: ");
    Serial.println(inChar);
  } 
}

В функции setup() мы инициализируем последовательный порт и отправляем в него сообщение «UNO is ready!"». Далее, в функции loop(), мы ожидаем пока в последовательный порт придут какие- либо данные. Как только они приходят, мы отправляем их обратно.

Класс Serial

Функция Serial.available() возвращает значение true, когда в буфере находятся пришедшие данные, доступные для чтения.

Функция Serial.read() возвращают байт данных из буфера последовательного порта.

Скомпилируйте и загрузите скетч в контроллер. Запустите монитор последовательного порта. Введите какой-либо символ в поле отправки сообщений и нажмите «Отправить» (Send).

Ещё немного теории: прерывания

Прерывания генерируются контроллером в ответ на некоторые события. Когда происходит прерывание, процессор переходит к выполнению заранее определённой функции, а затем возвращается к тому месту, где была прервана его работа и продолжает дальше исполнение основной программы. Преимущество прерываний в том, что программе микроконтроллера не нужно постоянно проверять произошло ли какое-то событие или нет.

Скетч

Прием данных последовательным портом может восприниматься как прерывание. В этот момент запускается функция обработки «прерывания». Сделаем так, чтобы плата Uno воспринимала прием информации из последовательного порта как прерывание и отправляла информацию обратно в последовательный порт.

Для этого напишем функцию serialEvent(). Теперь, как только мы напишем какой-либо символ в мониторе последовательного порта и отправим его на плату, произойдет увеличение счетчика counter и его значение будет отправлено обратно в порт.

char inChar;
int counter = 0;
 
void setup() { 
  Serial.begin(115200);
  Serial.println("UNO is ready!");
} 
 
void loop() {
  serialEvent();
  Serial.print("counter: ");
  Serial.println(counter);
  delay(1000);
  counter++;
} 
 
void serialEvent() { 
  if (Serial.available()) {
    inChar = Serial.read();
    Serial.print("UNO received:");
    Serial.println(inChar);
  } 
}

Скомпилируйте и загрузите скетч в контроллер. Откройте монитор последовательного порта (не забудьте проверить параметры соединения). Теперь вы можете отправить в последовательный порт какой-либо символ и увидите как будет изменяться значение счетчика counter.

Предыдущий урок | В начало | Следующий урок