Светодиод мигает с помощью кнопки
Каждый раз, когда я загружаю следующую программу, я получаю сообщение об ошибке показывает "ожидаемый инициализатор перед интервалом".
Пожалуйста, помогите мне решить эту проблему.
const byte button=2;
const byte LED=10;
bool blinking =false;//определяет, когда должно происходить мерцание
unsigned long blink Interval=250;// количество миллисекунд для мигания
unsigned long currentMillis;// переменные для отслеживания millis()
unsigned long previousMillis;
void setup()
{
pinMode(button,INPUT);
pinMode(LED,OUTPUT);
}
void loop()
{
// этот код мигает светодиодом
if(blinking) {
currentMillis =millis();// лучше хранить в переменной для меньшего джиттера
if((unsignedlong)(currentMillis-previousMillis) >=blinkInterval) { // уже прошло достаточно времени?
digitalWrite(LED,!digitalRead(LED)); // ярлык для переключения светодиода
previousMillis =currentMillis;// устанавливаем время ожидания "от"
}
} else {
digitalWrite(LED,LOW); // заставить светодиод выключаться, если он не мигает
}
int reading=digitalRead(button);
delay(50); // грубое устранение дребезга
if(reading==LOW) // кнопки с подтяжкой нажимаются при LOW
{ blinking =true; }// начинаем мигать
else
{ blinking =false; }// прекращаем мигать
}
@Josephazim, 👍0
2 ответа
▲ 3
Это blinkInterval
, а не blinkInterval
. У вас есть пробел в имени в объявлении:
unsigned long blinkInterval=250; // количество миллисекунд для мерцания
// ....
if((unsigned long)(currentMillis-previousMillis) >= blinkInterval) {
,
@
▲ 0
Полностью рабочий скетч
const byte button=2;
const byte LED=10;
bool blinking =false;
unsigned long blinkInterval=250;
unsigned long currentMillis;
unsigned long previousMillis;
void setup()
{
pinMode(button,INPUT);
pinMode(LED,OUTPUT);
}
void loop()
{
if(blinking) {
currentMillis =millis();
unsigned long blinkInterval=100;
if((unsigned long)(currentMillis-previousMillis) >= blinkInterval) {
digitalWrite(LED,!digitalRead(LED)); LED
previousMillis =currentMillis;
}
} else {
digitalWrite(LED,LOW);
}
int reading=digitalRead(button);
delay(100);
if(reading==LOW)
{ blinking =true; }
else
{ blinking =false; }
}
,
@etimo
Смотрите также:
- Как я могу прервать задержку() при нажатии кнопки?
- Объявление переменной внутри основного цикла
- hx711 и датчик нагрузки показывают 0 для калибровки
- в то время как (1) внутри, если условно
- HTML-страница переменной ESP8266 Webserver ESP8266WebServer (не как один постоянный символ)
- ESP8266 Webserver ESP8266WebS сервер перемещает функцию обработчика в отдельный файл .h .c
- Понимание кода Debounce
- Как использовать передатчик и приемник для условной отправки строковых сообщений получателю?
Спасибо! Это сработало, как вы предлагаете, но теперь моя проблема в том, что когда я продолжаю удерживать кнопку, светодиод мигает, а когда я отпускаю кнопку, он останавливается. Я хочу, чтобы это было, когда я удерживаю кнопку в течение 5 секунд, затем светодиод должен начать мигает в течение 10 минут или в определенное время. Пожалуйста, помогите мне решить эту проблему., @Josephazim
@Josephazim Посмотрите мой ответ. Это будет полезно для вас., @Hasan
@NickGammon Я думаю, вам нужно проверить этот раздел комментариев. Я ответил в соответствии с этой проблемой., @Hasan