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

В предыдущем эксперименте мы использовали Serial порт для отправки данных из контроллера в компьютер. Сейчас же мы, наоборот, будем принимать данные с компьютера.
Такие же как в предыдущем уроке.
Такая же как в предыдущем уроке.
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.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.
