Светодиодная программа с ограничением по времени

Я пытаюсь запрограммировать скетч таким образом, чтобы светодиод горел до тех пор, пока нажата кнопка. Я уже тестировал компоненты и конфигурацию электроники с помощью более простой программы, и все работает, но, похоже, в коде есть проблема. Я хотел узнать, как можно изменить мой скетч, чтобы код заработал:

const int ledPin = 12;
const int switchPin = 2;
const int Time = 100;
int buttonState = 0;
int count = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT); 
}

void loop() {
buttonState = digitalRead(switchPin);
while (buttonState == HIGH) {
    count++;
    delay(100);
  }
  count=count*10;

  if (count>1) {
    digitalWrite(ledPin, HIGH);
    delay((count*10));
    digitalWrite(ledPin, LOW);
  }

}

, 👍-1

Обсуждение

И как именно это не работает?, @gre_gor

@gre_gor светодиод вообще не реагирует, независимо от того, как долго или сильно я нажимаю кнопку. Когда я использую более простой скетч с подсветкой кнопки, он работает отлично, но не с этим кодом, @Dhruv Upadhyay

Зачем вы увеличиваете значение счетчика? Должен ли светодиод гореть дольше при каждом нажатии кнопки. Если да, то добавьте это в свой вопрос. Подсказка: ничто не останавливает while., @Jot

Вы также пытаетесь узнать, как долго кнопка была нажата?, @VE7JRO


2 ответа


Лучший ответ:

3
while (buttonState == HIGH) {
    count++;
    delay(100);
}

это никогда не выйдет, когда кнопка будет всегда высоко. Вам также следует сбросить счетчик после if.

Вместо этого вам нужно либо сделать buttonState = digitalRead(switchPin); внутри цикла, либо переделать функцию в конечный автомат, использующий временные метки, например, мигание без задержки.

,

-1

Попробуйте установить резистор 1-10k на землю, подключенную к входному контакту switchPin, предполагая, что кнопка подключает 5 В к switchPin. Это заставит установить истинный логический 0, когда кнопка не нажата.

,