Перейти к основному содержимому

Монитор последовательного интерфейса

Не всю информацию можно отобразить с помощью светодиодов, иногда нужно выводить какой-то текст или, наоборот, считывать текстовые команды. Т.е. взаимодействовать с программой во время ее выполнения. И в этом нам поможет монитор последовательного интерфейса или как его еще называют монитор порта. Это специальная область, с помощью которой можно взаимодействовать с программой: выводить туда какую-либо информацию(состояние кнопки, показания датчиков, текст) или считывать с нее введенные команды. Последовательное соединение на английском будет Serial.

Поэтому все функции, связанные с монитором последовательного интерфейса, начинаются словом Serial:

  • Serial.begin(9600) - команда для начала работы с монитором последовательного интерфейса. 9600 - скорость передачи данных в монитор последовательного интерфейса. Эта команда пишется в процедуре void setup();

  • Serial.println() - вывод данных с переносом строки. Как будто после вывода данных нажимается клавиша Enter;

  • Serial.available() - проверка введены ли команды в окно ввода команд в мониторе последовательного интерфейса;

  • Serial.read() - считывает введенные в монитор последовательного интерфейса команды.

Для отображения монитора последовательного интерфейса нажмите на соответствующую кнопку в правом нижнем углу, и он откроется.

Монитор последовательного интерфейса

Рисунок 1. Монитор последовательного интерфейса

Считываем состояние кнопки

Сборка схемы

Схема для считывания состояния кнопки

Рисунок 2. Схема для считывания состояния кнопки

Выводим в монитор последовательного интерфейса данные о состоянии кнопки. Кнопка соединена по схеме PULL DOWN.

  • Будет выведено 1 - если кнопка нажата;
  • Будет выведено 0 - если кнопка отпущена.

Программа вывода состояния кнопки в монитор последовательного интерфейса

//создаем переменную для кнопки
#define button 7

void setup(){
//настраиваем пин, к которому подключена кнопка, как вход
pinMode(button, INPUT);
//настраиваем работу с монитором порта
Serial.begin(9600);
}

void loop(){
Serial.println(digitalRead(button)); //выводим в монитор порта состояние кнопки
delay(500); //ждем полсекунды
}

Программа вывода состояния кнопки и дополнительной информации

//создаем переменную для кнопки
#define button 7

void setup(){
//настраиваем пин, к которому подключена кнопка, как вход
pinMode(button, INPUT);
//настраиваем работу с монитором порта
Serial.begin(9600);
}

void loop(){
Serial.print("Button state: "); //выводим в монитор порта фразу "Button state: "
Serial.println(digitalRead(button)); //выводим состояние кнопки
delay(500); //ждем полсекунды
}

Считывание данных из монитора последовательного интерфейса и управление светодиодом

Сборка схемы

Схема для считывания данных из монитора последовательного интерфейса и управление светодиодом

Рисунок 3. Схема для считывания данных из монитора последовательного интерфейса и управление светодиодом

Считываем данные с монитора порта. Для их сохранения используем переменную data символьного типа char. Так как введенные команды не сохраняются автоматически в мониторе порта, будем их выводить самостоятельно, использую команду Serial.print().

  • Если data == 1 , то включаем светодиод;
  • Если data == 0 , то выключаем.

Программа считывания данных и управления светодиодом

int led = 5;   //создаем переменную для светодиода
char data = 0; //создаем переменную для хранения введенных в монитор последовательного интерфейса команд

void setup(){
Serial.begin(9600); //настраиваем работу с монитором порта
pinMode(led, OUTPUT); //настраиваем пин со светодиодом как выход
}

void loop(){
if (Serial.available() > 0){ //проверяем поступили ли команды в монитор порта
data = Serial.read(); //считываем полученные команды
Serial.print(data); //выводим в монитор порта полученную команду
if (data == 'R'){ //если переменная data == 'R' - включаем светодиод,
digitalWrite(led, HIGH);
}
else if (data == 'r'){ //а если 'r' - выключаем светодиод
digitalWrite(led, LOW);
}
}
}
подсказка

Подробнее о Serial.begin() можно прочитать здесь.

Подробнее о Serial.print() можно прочитать здесь.

Подробнее о Serial.read() можно прочитать здесь.

Задания

  1. Соберите схему с Arduino и двумя кнопками, подключенными к пинам 5 и 6 с помощью резисторов номиналом 10 кОм. Запрограммируйте Arduino чтобы при нажатии первой кнопки в монитор порта выводилась фраза «Button 1», а при нажатии второй кнопки «Button 2».

  2. Соберите схему с Arduino и двумя светодиодами, подключенными к пинам 8 и 12 с помощью резисторов 390 Ом. Запрограммируйте Arduino чтобы при считывании из монитора порта значения «1» включался первый светодиод, а при считывании значения «2» он выключался. И, аналогично, при считывании из порта значения «3» должен включаться второй светодиод, а при считывании значения «4» он должен выключаться.