Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

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

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

3.3. Управление уровнем напряжения. Аналоговый выход – команда analogWrite

Команда analogWrite (номер пина, уровень) позволяет подать на определенный пин Arduino (поддерживающих данную функцию – 3, 5, 6, 9, 10, 11 – на Arduino Uno отмечены штрихом) значение от 0 до 255, что соответствует напряжению от 0 В до +5 В на контакте. Примеры:

analogWrite (6, 200); – напряжение на пине 6 станет равным 5·200/255= 3,9 В

analogWrite (11, 50); – напряжение на пине 11 станет равным 5·50/255= 1 В

 

Таким образом, постепенно увеличивая/уменьшая переданное в analogWrite значение можно добиться плавного роста/падения напряжения на выходе.
Теперь, подключив к одному из PWM-портов Arduino (3, 5, 6, 9, 10, 11) светодиод будет плавно загораться и затухать (fading).

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




Поделиться с друзьями:


Дата добавления: 2015-04-29; Просмотров: 315; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.