Мигание светодиодом без задержки

Arduino
Автор темы, Сержант
Сержант
Аватара
Arduino
Автор темы, Сержант
Сержант
Сообщения: 64
Зарегистрирован: 19 апреля 2017
С нами: 6 лет 11 месяцев

#1 Arduino » 11 октября 2017, 19:17

Иногда вам нужно сделать две вещи одновременно. Например, вы можете мигать светодиодом, когда нажмете на кнопку или другим воздействием. В этом случае, вы не можете использовать delay (), нужно остановить все остальные программы, а индикатор начнет мигать. Программа может пропустить нажатие кнопки во время delay (). Этот пример показывает, как мигать светодиодом без использования команды delay (). Программа отслеживает время когда светодиод с помощью Arduino был включен или выключен. Затем каждый раз через команду loop (), он проверяет, сколько прошло время. Если достаточно, то контроллер включает индикатор или выключает.

Требования к аппаратному обеспечению:
плата Arduino
светодиод

Схема



Мигание светодиодом без задержки.png
Мигание светодиодом без задержки
Мигание светодиодом без задержки.png (21.53 КБ) 1545 просмотров


Для построения схемы, подсоединяют резистор с сопротивлением 220 Ом к контакту 13. Затем подсоедините длинный вывод светодиода (анод) к резистору. Замкните короткий вывод (катод) на землю. Затем подключите вашу плату Arduino к вашему компьютеру, запустите программу Arduino, и введите программный код, который описан ниже.

Мигание светодиодом без задержки2.png
Мигание светодиодом без задержки
Мигание светодиодом без задержки2.png (24.91 КБ) 1545 просмотров


Программа


Приведенный ниже код использует функцию millis (), команда, которая возвращает количество миллисекунд, прошедших с момента как плата Arduino начала выполнять программу.


Код: Выделить всё

/ * Мигает без задержки
Включение и отключение светодиодов
, подключенных к цифровым
выводам
, без использования delay (). Это означает, что другая программа
может работать
, не отвлекаясь на подпрограмму мигания индикатор.
*/

//константы не будут изменятся. Используются для инициализации выводов:
const int ledPin = 13; // номер контакта к которому подключен светодиод

// Переменные будут изменятся:
int ledState = LOW; // ledState для того чтоб установить уровень напряжения
long previousMillis = 0; // для подсчета времени когда индикатор ыл включен

// переменные записываются с помощью типа данных long потому что время измеряется в миллисекундах, число больше чем может быть в типе int.
long interval = 1000; // интервал в течении которого горит светодиод (миллисекунд)

void setup () {
// установить порт на вывод:
pinMode (ledPin, OUTPUT);
}

void loop ()
{
// основная программа
unsigned long currentMillis = millis ();

if (currentMillis — previousMillis > interval) {
// сохранить последнее время мигания светодиода
previousMillis = currentMillis;

// если светодиод выключен, включите его, и наоборот:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;

// установить ledState:
digitalWrite (ledPin, ledState);
}
}


Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 2 гостя