Как исправить этот код, чтобы вместо того, чтобы удерживать кнопку для смены светодиода, вы могли нажать?
const int buttonPin = 1; // номер контакта входного контакта кнопки
const int ledPins[] = {2, 3, 4, 5, 10, 11, 12, 13}; // переменные изменятся:
int buttonState = 0; // переменная для чтения статуса кнопки
int buttonPressCount = 0;
int numberOfLED = 8;
void setup() { // инициализируем вывод светодиода как выход:
for (int i = 0; i < numberOfLED; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(buttonPin, INPUT);
}
void loop() { // считываем состояние значения кнопки:
buttonState = digitalRead(buttonPin); // проверяем, нажата ли кнопка. // если да, то состояние кнопки ВЫСОКОЕ:
if (buttonState == HIGH) {
for (int i = 0; i < numberOfLED; i++) {
if (buttonPressCount % numberOfLED == i)
digitalWrite(ledPins[i], HIGH); // включаем светодиод
else
digitalWrite(ledPins[i], LOW); // выключаем светодиод
}
}
buttonPressCount++;
delay(300);
}
@Diego Camacho, 👍0
1 ответ
Лучший ответ:
▲ 2
вместо того, чтобы каждый раз менять buttonState == HIGH, измените его, когда состояние кнопки было LOW
в предыдущий раз, а сейчас HIGH
:
buttonState = digitalRead(buttonPin);
if (oldButtonState != buttonState && buttonState == HIGH) {
//...
}
oldButtonState = buttonState;
Однако имейте в виду отскок контактов. Это может привести к обнаружению нескольких переходов. Большинство решений для этого устанавливают минимальную задержку между обработкой переходов, удаляя все остальные обнаруженные.
,
@ratchet freak
Смотрите также:
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Прерывание при нажатии кнопки + устранение дребезга
- Светодиод с кнопочным управлением Arduino со сборкой AVR
- Как повторить другое действие внутри цикла?
- Изменение состояния светодиода с помощью кнопки приводит к нестабильному результату