1-й светодиод загорается при нажатии 1-й кнопки, а остальные светодиоды остаются выключенными.
У меня есть 2 светодиода и 2 кнопки. Я хочу закодировать следующее: при нажатии первой кнопки 1-й светодиод включается (остается включенным в течение 5 секунд), а 2-й светодиод остается выключенным, и то же самое, если нажимается 2-я кнопка, включается 2-й светодиод, а 1-й светодиод остается выключенным. Я хочу, чтобы обработка сбрасывалась через 5 секунд. Вот моя работа: теперь 1-й светодиод включается, когда я нажимаю 1-ю кнопку, но 2-я кнопка и 2-й светодиод по-прежнему могут нажиматься и загораться сразу после этого. Я хочу, чтобы вторая кнопка деактивировалась, когда первая кнопка нажималась в течение 5 секунд. Пожалуйста, дайте мне базовую программу, потому что я новичок в этом.
int pinButton_1 = 8; //пин, к которому подключаем кнопку
int pinButton_2 = 9;
int LED_1 = 1; //пин, к которому подключаем светодиод
int LED_2 = 2;
void setup() {
pinMode(pinButton_1, INPUT); //устанавливаем вывод кнопки как INPUT
pinMode(pinButton_2, INPUT);
pinMode(LED_1, OUTPUT); //устанавливаем вывод светодиода как ВЫХОД
pinMode(LED_2, OUTPUT);
}
void loop() {
int stateButton_1 = digitalRead(pinButton_1); //читаем состояние кнопки
int stateButton_2 = digitalRead(pinButton_2); //читаем состояние кнопки
if(stateButton_1 == 1) { //если нажата
digitalWrite(LED_1, HIGH); //LED_1 включен
digitalWrite(LED_2, LOW); //LED_2 выключен
delay(50);
}
if (stateButton_2 == 1) {
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, HIGH);
delay(50);
}
}
@tripleT, 👍0
1 ответ
Лучший ответ:
Прежде всего, вы не реализовали время задержки 5 секунд delay(5000);
, а только 50 мс delay(50);
.
Во-вторых, вы на самом деле не переключаете светодиоды, если больше не нажимается кнопка.
Измените свой loop()
на следующий, я думаю, это поможет вам начать следующие шаги по ознакомлению с вашим кодом:
void loop() {
int stateButton_1 = digitalRead(pinButton_1); //читаем состояние Button_1
if(stateButton_1 == 1) { //если Button_1 нажата
digitalWrite(LED_1, HIGH); //LED_1 включен
digitalWrite(LED_2, LOW); //LED_2 выключен
delay(5000);
}
digitalWrite(LED_1, LOW); //Выключаем LED_1
int stateButton_2 = digitalRead(pinButton_2); //читаем состояние кнопки 2
if (stateButton_2 == 1) {
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, HIGH);
delay(5000);
}
digitalWrite(LED_2, LOW); //Выключаем LED_2
}
Подсказка: Использование delay()
часто не является хорошей конструкцией, лучше делать это с помощью millis()
, но это означает некоторые больше изменений. Для начала в вашем случае подойдет delay()
, но посмотрите, что здесь в разных Вопросах/ответах уже написано о delay()
и millis( )
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Прерывание при нажатии кнопки + устранение дребезга
- Светодиод с кнопочным управлением Arduino со сборкой AVR
- Как повторить другое действие внутри цикла?
- Изменение состояния светодиода с помощью кнопки приводит к нестабильному результату
спасибо за вашу помощь, я очень ценю, @tripleT