- •Курс «Основы робототехники». Занятие 3 Управление светодиодами
- •3.1. Подключение внешнего светодиода с использованием токоограничивающего резистора
- •3.2. Макетная плата
- •Практическое занятие 1. Простой светофор
- •Практическое занятие 2. Светофор с миганием
- •3.3. Управление уровнем напряжения. Аналоговый выход – команда analogWrite
- •Практическое занятие 3. Изменение яркости светодиода
- •Практическое занятие 4. Изменение яркости пяти светодиодов
- •3.4. Команда для получения случайных чисел random
- •Практическое занятие 5. Случайная яркость пяти светодиодов
- •Домашнее задание
Практическое занятие 2. Светофор с миганием
Напишем более сложный алгоритм работы и изменим программу таким образом, чтобы поведение светодиодов было похоже на настоящий светофор
включить красный светодиод
подождать три секунды
помигать красным светодиодом 4 раза
включить желтый светодиод
подождать три секунды
выключить желтый светодиод
включить зеленый светодиод
подождать три секунды
помигать зеленым светодиодом 4 раза
В этом случае задачу «помигать красным светодиодом 4 раза» можно решить «в лоб» таким способом:
digitalWrite(led_ red, HIGH); // включить светодиод delay(500); // подождать полсекунды digitalWrite(led_ red, LOW); // выключить светодиод delay(500); // подождать полсекунды digitalWrite(led_ red, HIGH); // включить светодиод delay(500); // подождать полсекунды digitalWrite(led_ red, LOW); // выключить светодиод delay(500); // подождать полсекунды digitalWrite(led_ red, HIGH); // включить светодиод delay(500); // подождать полсекунды digitalWrite(led_ red, LOW); // выключить светодиод delay(500); // подождать полсекунды digitalWrite(led_ red, HIGH); // включить светодиод delay(500); // подождать полсекунды digitalWrite(led_ red, LOW); // выключить светодиод delay(500); // подождать полсекунды |
Но такой вариант трудоемок, приводит к большому объему написанного кода и вследствие этого к трудности чтения программы и последующего изменения. Для многократных повторений одной и той же части кода можно использовать цикл for:
for (начальное значение переменной счетчика, конечное значение переменной счетчика, прибавление счетчика){ код, который нужно повторить несколько раз } |
С использованием цикла for код, выполняющий задачу «помигать красным светодиодом 4 раза» будет выглядеть так:
for(int i = 1 ; i <= 4; i = i + 1) { // начать цикл: от 1 до 4 – т.е. блок между // фигурными скобками { } повторится 4 раза, при i=1, i=2, i=3 и i=4 digitalWrite(led_red, HIGH); // включить красный светодиод delay(500); // подождать полсекунды digitalWrite(led_red, LOW); // погасить красный светодиод delay(500); // подождать полсекунды } |
С использованием цикла for программа, реализующая написанный для светофора алгоритм, будет выглядеть так:
int led_red = 11; // красный светодиод подключен к пину 11 int led_yellow = 7; // желтый светодиод подключен к пину 7 int led_green = 2; // зеленый светодиод подключен к пину 2
void setup() { // прописываем пины, к которым подключены светодиоды, как выходные pinMode(led_red, OUTPUT); pinMode(led_yellow, OUTPUT); pinMode(led_green, OUTPUT); }
void loop() { digitalWrite(led_red, HIGH); // включить красный светодиод delay(3000); // подождать три секунды for(int i = 1 ; i <= 4; i = i + 1) { // повторить 4 раза digitalWrite(led_red, HIGH); // включить красный светодиод delay(500); // подождать полсекунды digitalWrite(led_red, LOW); // погасить красный светодиод delay(500); // подождать полсекунды }
digitalWrite(led_yellow, HIGH); // включить желтый светодиод delay(3000); // подождать три секунды digitalWrite(led_yellow, LOW); // выключить желтый светодиод
digitalWrite(led_green, HIGH); // включить зеленый светодиод delay(3000); // подождать три секунды for(int i = 1 ; i <= 4; i = i + 1) { // повторить 4 раза digitalWrite(led_green, HIGH); // включить зеленый светодиод delay(500); // подождать полсекунды digitalWrite(led_green, LOW); // погасить зеленый светодиод delay(500); // подождать полсекунды } } // начать цикл loop снова |
Напишите в среде Arduino программу, приведенную выше (выделенный полужирным текст, комментарии писать не обязательно). Для ускорения работы можно скопировать текст программы из файла занятия в электронном виде
Загрузите написанную программу в контроллер и убедитесь, что светодиоды зажигаются в соответствии с написанным алгоритмом
Сохраните программу в папку Learning / Ваша фамилия под именем Svetofor_Blink