На прошлом уроке мы научились загружать программу blink в Arduino.
Следует заметить, что эта программа очень удобный тест, если возникают
какие-то проблемы с загрузкой скетча - откройте Blink, и загрузите его,
если скетч загрузился и светодиод на плате Ardiono начал мигать, значит
все нормально и проблема в вашем скетче. Если не загрузился - проверьте,
правильно ли выбраны в программе плата Arduino и последовательный порт.
Моделировать схему управления светодиодами м помощью контроллера Arduino
мы будем в среде Tinkercad Circuits, Если у вас есть контроллер
Ардуино и желание работать с "железом", то работа такая работа приветствуется.
Итак, начнем с одного светодиода. Подключить его напрямую к выходу контроллера
нельзя, так как светодиод может сгореть, поэтому последовательно со светодиодом
поставим ограничительный резистор номиналом 270 Ом. Анод светодиода подключим
к 13 выводу (к этому же выводу уже подключен светодиод, который установлен на
плате). Катод, через токоограничительный резистор к общему проводу GND.
В Tinkercad Circuits, в контроллер по умолчанию загружен скетч
Blink, поэтому после нажатия кнопки "Начать моделирование" мы увидим
работу программы Blink - оба светодиода, и тот что на плате, и тот,
который мы подключили - будут мигать:
void setup() { pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { digitalWrite(10, HIGH); // Устанавливаем высокий уровень на выводе 10 delay(1000); // Ждем 200 миллисекунд digitalWrite(10, LOW); // Устанавливаем низкий уровень на выводе 10 delay(1000); // Ждем 200 миллисекунд digitalWrite(11, HIGH); // Устанавливаем высокий уровень на выводе 11 delay(1000); // Ждем 200 миллисекунд digitalWrite(11, LOW); // Устанавливаем низкий уровень на выводе 11 delay(1000); // Ждем 200 миллисекунд digitalWrite(12, HIGH); // Устанавливаем высокий уровень на выводе 12 delay(1000); // Ждем 200 миллисекунд digitalWrite(12, LOW); // Устанавливаем низкий уровень на выводе 12 delay(1000); // Ждем 200 миллисекунд digitalWrite(13, HIGH); // Устанавливаем высокий уровень на выводе 13 delay(1000); // Ждем 200 миллисекунд digitalWrite(13, LOW); // Устанавливаем низкий уровень на выводе 13 delay(1000); // Ждем 200 миллисекунд }
int pin; void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); } void loop() { pin = 10; while(pin < 14) { digitalWrite(pin, 1); delay(200); digitalWrite(pin, 0); delay(200); pin = pin + 1; } }Разберем как это работает. В нашей программе появилась переменная pin. Переменная - это место хранения данных. Она имеет имя, значение и тип. Например, данное объявление (называется декларацией):
int pin;создает переменную с именем pin, и типом int (от англ. integer - целое число), один их наиболее часто используемых типов данных для хранения чисел. int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767 (от -2^15 до 2^15-1).
pin = 10;изменяет значение переменной pin, присваивая ей значение 10.
while(pin < 14)
while - это цикл и в данном случае все что находится после него в фигурных скобках, будет повторяться, пока условие pin < 14 истинно. Как только переменная пин примет значение больше или равное 14 программа выйдет из этого цикла и вернется к первой строке цикла loop(). В нашей программе эта конструкция работает следующим образом. Вначале бесконечного цикла loop() мы присваиваем переменной pin значение 10, и далее переходим к циклу while так как 10 < 14 выполняются команды, которые находятся в фигурных скобках внутри while.
{ digitalWrite(pin, 1); delay(200); digitalWrite(pin, 0); delay(200); pin = pin + 1; }
Так как текущее значение переменной pin = 10, командой digitalWrite(pin, 1); устанавливается высокий уровень на 10 выходе. Светодиод подключенный к выводу 10 загорится. Затем, уже знакомой командой delay(200); в течении 200 миллисекунд ничего не делается, светодиод продолжает светиться, после чего командой digitalWrite(pin, 0); устанавливается низкий уровень на 10 выходе, светодиод гаснет и далее опять ожидание в течении 200 миллисекунд. Затем следует команда
pin = pin + 1;
это операция присвоения, переменной pin присваивается значение больше её самой
на единицу. Таким образом, значение переменной pin изменяется, и теперь
pin = 11. После этого, программа вернется в начало цикла while, и так как
условие 11 < 14 по прежнему выполняется - снова выполнится набор команд по
зажиганию светодиода, теперь уже подключенного на вывод 11, после чего
переменная pin опять увеличится на единицу и примет значение 12 и так будет
повторяться пока значение переменной pin не станет равным 14. Так как
условие 14 < 14 является ложным, произойдет выход из цикла while,
программа вернется в начало цикла loop(), где переменной pin снова
будет присвоено значение 10 и дальше программа опять перейдет к циклу
while.
Загрузив этот скетч, можно убедиться, что светодиоды мигают также, как они
мигали до этого. Программа работает, но её код стал значительно меньше и
эта разница в объеме кода будет еще более существенной, при увеличении
количества светодиодов.