Уйти от задержки
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 2 |
Об этом проекте
Это видео было вдохновлено вопросами, которые я сею в сети. о том, как мигают 2 светодиода с разной скоростью.
Если бы мы хотели мигать светодиодом каждые 1000 миллисек, а второй - каждые 500 миллисекунд, мы все равно могли бы использовать задержку, как это, как вы можете видеть, я разделил задержку в 1000 миллисекунд первого светодиода на 500 миллисекундов мигания второго светодиода.
байт LED2 =12; void setup () {pinMode (LED_BUILTIN, OUTPUT); pinMode (LED2, ВЫХОД);} void loop () {digitalWrite (LED_BUILTIN, HIGH); digitalWrite (LED2, ВЫСОКИЙ); задержка (500); digitalWrite (LED2, LOW); задержка (500); digitalWrite (LED_BUILTIN, LOW); digitalWrite (LED2, ВЫСОКИЙ); задержка (500); digitalWrite (LED2, LOW); задержка (500); }
Но что произойдет, если мы захотим моргнуть более быстрым за 300 миллисекунд вместо 500 миллисекунд. Вот где использование задержки делает это очень сложным или невозможным.
Так что делать? Прекратите использовать задержку!
У нас даже есть пример в среде Arduino IDE, который называется blinkwithoutdelay.
Я дублирую логику первого светодиода на второй и устанавливаю желаемую задержку.
Так что попробуйте и его и избегайте задержек. Я скажу одну заключительную вещь:код, которым я поделился, далек от совершенства, и я подумал о его изменении, но, поскольку это видео предназначено для людей, которые плохо знакомы с Arduino, Я голосовал против.
Код
- Пример кода
Пример кода Arduino
const int ledPin =LED_BUILTIN; int ledState =LOW; беззнаковый длинный предыдущийМиллис =0; const long interval =1000; const int ledPin2 =12; int ledState2 =LOW; беззнаковый длинный предыдущийMillis2 =0; const long interval2 =300; void setup () {pinMode (ledPin, ВЫХОД); pinMode (ledPin2, OUTPUT);} void loop () {беззнаковый длинный currentMillis =millis (); если (текущийМиллис - предыдущийМиллис> =интервал) {предыдущийМиллис =текущийМиллис; если (ledState ==LOW) {ledState =HIGH; } еще {ledState =LOW; } digitalWrite (ledPin, ledState); } // завершаем if if (currentMillis - previousMillis2> =interval2) {previousMillis2 =currentMillis; если (ledState2 ==LOW) {ledState2 =HIGH; } еще {ledState2 =LOW; } digitalWrite (ledPin2, ledState2); } // конец, если}
Схема

Производственный процесс
- Как защитить алюминий от коррозии
- Изучите облачные вычисления с нуля
- 3 причины для перехода с C на C ++
- Получить влажность / температуру из Интернета
- Проект IoT 101:потоковая температура с вашего Raspberry Pi
- Потоковая передача данных датчика с пластины PPDAQC Pi с использованием InitialState
- РОБОТ МАЛИНЫ PI WIFI, УПРАВЛЯЕМЫЙ С СМАРТ-ТЕЛЕФОНА ANDROID
- Контроль задержки Verilog
- Откуда возникла концепция пиления?
- Чего ожидать от сериала «Серый каст»?