Предлагаю 5 вариантов поморгать светодиодом.
НАМ ПОНАДОБИТСЯ
- Плата Arduino Uno
- Один светодиод
- Один резистор сопротивлением 220-270 Ом.
- Провода
- Макетная плата
СХЕМА ПОДКЛЮЧЕНИЯ
СКЕТЧ
1 2 3 4 5 6 7 8 9 | void setup() { pinMode(13, OUTPUT); // Инициализируем цифровой pin 13 как выход } void loop() { // бесконечный цикл digitalWrite(13, HIGH); // Включаем светодиод (HIGH выставляет высокий уровень) delay(1000); // Задержка 1 секунда digitalWrite(13, LOW); // Выключаем светодиод (LOW выставляет низкий уровень) delay(1000); // Задержка 1 секунда } |
Чтобы не переписывать в коде программы номер пина, при смене цифрового выхода, удобно присвоить в начале программы данному пину какое-нибудь имя.
например:
int led = 13;
и тогда в коде нужно заменить «13» на «led».
1 2 3 4 5 6 7 8 9 10 | int led = 13; // Присваиваем имя цифровому выводу 13 void setup() { pinMode(led, OUTPUT); // Инициализируем цифровой pin 13 как выход } void loop() { // бесконечный цикл digitalWrite(led, HIGH); // Включаем светодиод (HIGH выставляет высокий уровень) delay(1000); // Задержка 1 секунда digitalWrite(led, LOW); // Выключаем светодиод (LOW выставляет низкий уровень) delay(1000); // Задержка 1 секунда } |
Также можно моргать светодиодом используя команду инвертирования:
1 2 3 4 5 6 7 8 9 10 11 | int led = 13; // Подключаем светодиод к пину 13, присваиваем имя "led" int state = LOW; // Устанавливаем начальное состояние светодиода LOW void setup() { pinMode(led, OUTPUT); // Инициализируем цифровой порт "led" как выход } void loop() { digitalWrite(led, state = !state); // меняем значение порта "led" на противоположное delay(1000); // Пауза 1 секунда } |
Код с использованием millis() и без задержек delay(), позволяет освободить процессор для выполнения других задач:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | const int ledPin = 13; // Присваиваем имя цифровому выводу 13 int ledState = LOW; // Устанавливаем начальное состояние светодиода LOW unsigned long previousMillis = 0;// Используем переменную типа unsigned long, для хранения предыдущих обновлений светодиода const long interval = 1000; // Не изменяемая константа, задает интервал мигания светодиода в милисекундах void setup() { pinMode(ledPin, OUTPUT); //Инициализируем цифровой pin 13 как выход } void loop() { unsigned long currentMillis = millis(); //переменная текущего времени if(currentMillis - previousMillis >= interval) { // разница между текущим и последним зажиганием светодиода больше заданного интервала previousMillis = currentMillis; // сохраняем последнее время, зажигания светодиода if (ledState == LOW) //если светодиод не горит, то включаем и наоборот ledState = HIGH; else ledState = LOW; digitalWrite(ledPin, ledState); //записываем в порт светодиода состояние ledState (HIGH или LOW) } } |
Еще вариант с использованием millis():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | int led = 13; // Подключаем светодиод к пину 13, присваиваем имя "led" int state = LOW; // Устанавливаем начальное состояние светодиода LOW void setup() { pinMode(led, OUTPUT); // Инициализируем цифровой порт "led" как выход } int ms, ms1 = 0; //назначаем переменные и приравниваем их к 0.(можно использовать uint32_t) boolean stat = true; //Переменные типа boolean могут принимать одно из двух значений: true или false. void loop() { ms = millis(); if( ( ms - ms1 ) > 1000 || ms < ms1 ) // Событие срабатывает каждые 1000 мс { ms1 = ms; digitalWrite(led, stat); stat = !stat; // Инвертируем порт "led" } } |
И последний вариант с использованием функции random(), которая генерирует псевдо-случайные числа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int led = 13; // Подключаем светодиод к пину 13, присваиваем имя "led" int state = LOW; // Устанавливаем начальное состояние светодиода LOW long randTime; // Переменная для хранения сгенерированного значения времени void setup() { pinMode(led, OUTPUT); // Инициализируем порт "led" как выход } void loop() { randTime = random(100, 1000); // генерируем случайное значение времени в диапазоне от 100 до 1000 delay(randTime); // Пауза со случайным временем digitalWrite(led, state = !state); // меняем значение порта "led" на противоположное } |
В данных примерах используется цифровая ножка 13. На ардуино к этой ножке подключен светодиод, расположенный непосредственно на самой плате. Поэтому, для демонстрации данного примера, можно не подключать внешний светодиод с резистором.