Почему светодиод зависает, когда я добавляю задержку?
Я новичок в arduino и подобных вещах. Поэтому я игрался с подтягивающим резистором. Он работал нормально, но проблема возникла, когда я использовал задержку, чтобы включить светодиод на несколько секунд, прежде чем он вернется в низкое состояние. Он перестал работать, когда я нажал на переключатель несколько раз. Иногда он может работать, но в максимальное время он не работает
вот код
const int buttonPin = 4;
const int ledPin = 12;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW)
{
digitalWrite(ledPin, HIGH);
delay(5000);
} else
{
digitalWrite(ledPin, LOW);
delay(5000);
}
}
@Peouse Dutta, 👍1
Обсуждение1 ответ
Лучший ответ:
Ваш Arduino ничего не делает во время задержки (5000). Поэтому нажатие кнопки в течение 5000 мс, когда светодиод выключен, ничего не сделает. Или вам должно очень повезти, чтобы нажать кнопку в очень короткое время между одним циклом и следующим.
Я много узнал о синхронизации и задержках с помощью этого руководства: Мигание без задержки
На самом деле Arduino что-то делает, просто не то, что думает оператор., @PhillyNJ
Да, он ждет, пока задержка закончится..., @ON5MF Jurgen
он никогда не ждет. Вы должны увидеть, что на самом деле делает задержка., @PhillyNJ
в случае этого кода он ждет... в противном случае вот что он делает: "Однако, некоторые вещи происходят, пока функция delay() управляет чипом Atmega, поскольку функция delay не отключает прерывания. Последовательная связь, которая появляется на выводе RX, записывается, значения PWM (analogWrite) и состояния выводов сохраняются, и прерывания будут работать так, как и должны". (Из справочника по Arduino), @ON5MF Jurgen
Вам стоит увидеть, что он делает. Тогда вы поймете, о чем я говорю., @PhillyNJ
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Управление цифровой адресной светодиодной лентой RGB 12 В с помощью Arduino
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Мигните светодиодом 5 раз с помощью цикла for
Что происходит, когда это не работает? Пожалуйста, объясните подробнее, @chrisl
состояние светодиода не меняется., @Peouse Dutta
вы не считываете показания переключателя во время задержки (5000).... вам нужно удерживать кнопку нажатой в течение 5 секунд, @jsotola
Измените вторую задержку на меньшее значение, например, 100 мс., @Gerben
одна из вещей, которую вам нужно усвоить при программировании, - это определение области сбоя... ваша программа не реагирует на нажатие кнопки, это не
зависание светодиода
, @jsotola