Как управлять устройством?
В этом уроке мы научимся давать указания нашим устройствам. Сразу к делу.
Что нам нужно
- Светодиод
- Резистор 220 Ом
- Потенциометр
- Соединительные провода «Папа – Папа»
Serial monitor
Для начала попробуем управлять режимами работы светодиода с помощью Serial monitor.
Соберем простенькую схему:
Код к схеме
#define LED 13 void setup() { Serial.begin(9600); //Установим соединение с компьютером. //Выведем в Serial два сообщения //Кстати, на русском сообщение будет отображаться некорректно. Serial.println("Write: on - for turn led on, off - for turn led off, blink - for blink"); Serial.println("Wait for commands"); pinMode(LED, OUTPUT); } void loop() { if(Serial.available() > 0) //Проверяем, пришла ли команда. { char cmd = Serial.read(); //Объявим переменную, в которую будем запоминать команду. //Команду можно ввести и капсом. //Для этого опишем возможные варианты пришедших команд. if (cmd == 'o' || cmd == 'O') //Если пришла команда ON { digitalWrite(LED, HIGH); //Включаем светодиод } if (cmd == 'f' || cmd == 'F') //Если пришла команда OFF { digitalWrite(LED, LOW); //Выключаем светодиод } if( cmd == 'b' || cmd == 'B') //Если пришла команда Blink { for( int i = 0; i < 10; i++) //Мигаем светодиодом { digitalWrite(LED, HIGH); delay(600); digitalWrite(LED, LOW); delay(600); } } } }
Пояснения
Serial.print С помощью этой команды мы можем выводить сообщения или какие-либо значения в Serial monitor.Еще есть команда Serial.println. Она так же выводит сообщение, но с новой строки.
Сообщение должно выводиться в виде: Serial.println(“Текст сообщения”);
На русском так просто текст не вывести. Если написать текст на русском, в Serial monitor вы увидите странные символы. Как это исправить сегодня мы рассматривать не будем.
Serial.available() > 0 В этом куске кода мы проверяем, есть ли какие-то команды, а если есть, приступаем к определению, что за команда пришла и выполняем эту команду.
Char Переменная типа char может хранить один алфавитно-цифровой символ (литеру). При объявление литеры используются одиночные кавычки: ‘O’
Serial.read Эта команда считывает команды, вводимые в Serial monitor.
Потенциометр и Serial monitor
Потенциометр или переменный резистор – это делитель из двух резисторов в одном корпусе. Сопротивление меняется поворотом ручки.
Мы соберем схему, которая будет в зависимости от поворота потенциометра отправлять в Serial monitor тестовые сообщения. Можно на основе скетча, вместо тестовых сообщений, выполнять нужные нам действия.
Код
#define POT A0 void setup() { pinMode(POT, INPUT); Serial.begin(9600); //Установим связь с компьютером. Serial.println("Enter command V."); //Это сообщение просит ввести команду. } void loop() { int pot = analogRead(POT); int val = analogRead(POT); val = map(val, 0, 1023, 0, 3); // 250 градусов возможного поворота потенциометра разобьем на 4 части. // По запросу, будем выводить на экран значение, считываемое с потенциометра. if(Serial.available() > 0) { char cmd = Serial.read(); if( cmd == 'v' || cmd == 'V') { Serial.println(" Potentiometr's value: "); Serial.println(pot); delay(1000); } //Здесь, вместо выведения сообщений в сериал может быть любой код. //Получается, что поворачивая потенциометр мы меняем исполняемую в данный //момент команду. if(val == 0) { Serial.println("Command 0"); } else if(val == 1) { Serial.println("Command 1"); } else if(val == 2) { Serial.println("Command 2"); } else if(val == 3) { Serial.println("Command 3"); } } }
Пояснения
Map — пропорционально переносит значение из текущего диапазона значений в новый диапазон, заданный параметрами.
В общем виде map можно записать так : map(значение, изМеньш, изБольш, вМеньш, вБольш);
Значение — это значение, которое мы переносим.
изМеньш ,изБольш – это крайние значения текущего диапазона значений
вМеньш, вБольш – это крайние значения нового диапазона значений.
Вывод
На этом наш урок заканчивается. Можно переходить к следующему. Теперь ты можешь давать указания своему устройству через Serial monitor и потенциометр. Опираясь на знания, полученные в этом уроке можно придумать и другие способы отправки команд на контроллер. Чем мы и займемся, но немного позже.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Плата Arduino | Arduino Uno | 1 | ||||
Светодиод | АЛ102Б | 1 | ||||
Резистор | 220 Ом | 1 | ||||
Переменный резистор | 10 кОм | 1 | ||||
Соединительные провода | "Папа-Папа" | 1 | ||||
Макетная плата | Breadboard-half | 1 | ||||