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);
     }
  }

, 👍0


1 ответ


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

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( )

,

спасибо за вашу помощь, я очень ценю, @tripleT