В предыдущем эксперименте мы использовали 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.