Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие 3 Управление светодиодами.doc
Скачиваний:
135
Добавлен:
11.03.2016
Размер:
1.26 Mб
Скачать

Практическое занятие 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 снова

  1. Напишите в среде Arduino программу, приведенную выше (выделенный полужирным текст, комментарии писать не обязательно). Для ускорения работы можно скопировать текст программы из файла занятия в электронном виде

  2. Загрузите написанную программу в контроллер и убедитесь, что светодиоды зажигаются в соответствии с написанным алгоритмом

  3. Сохраните программу в папку Learning / Ваша фамилия под именем Svetofor_Blink