Нужна помощь в индивидуальном управлении 3 светодиодами с помощью 3 тумблеров.

Я пытаюсь индивидуально управлять 3 светодиодами с помощью 3 тумблеров. Это код, который я использую

#define LED_PIN1 2  
#define BUTTON_PIN1 14

#define LED_PIN2 3
#define BUTTON_PIN2 15

#define LED_PIN3 4
#define BUTTON_PIN3 16

void setup() {
  pinMode(LED_PIN1, OUTPUT);
  pinMode(BUTTON_PIN1, INPUT);

   pinMode(LED_PIN2, OUTPUT);
  pinMode(BUTTON_PIN2, INPUT);

   pinMode(LED_PIN3, OUTPUT);
  pinMode(BUTTON_PIN3, INPUT);

}
void loop() {
  if (digitalRead(BUTTON_PIN1) == HIGH) {
    digitalWrite(LED_PIN1, HIGH);
  }
  if (digitalRead(BUTTON_PIN1) == LOW)   {
    digitalWrite(LED_PIN1, LOW);
  }
  if (digitalRead(BUTTON_PIN2) == HIGH) {
    digitalWrite(LED_PIN2, HIGH);
  }
  if (digitalRead(BUTTON_PIN2) == LOW) {
    digitalWrite(LED_PIN2, LOW);
  }
  if (digitalRead(BUTTON_PIN3) == HIGH) {
    digitalWrite(LED_PIN3, HIGH);
  }
  if (digitalRead(BUTTON_PIN3) == LOW) {
    digitalWrite(LED_PIN3, LOW);
  }
}

Проблема в том, что этот код вызывает одновременное включение и выключение всех трех светодиодов при нажатии любого из трех тумблеров. Может кто-нибудь объяснить, почему это происходит? И что мне нужно изменить, чтобы каждым светодиодом можно было управлять индивидуально?

Спасибо!

, 👍2

Обсуждение

Используете ли вы внешний повышающий или понижающий резистор для каждой кнопки?, @chrisl


1 ответ


3

Как у вас сделана проводка?

Это рабочий пример того, как это можно сделать:

#define LED_PIN1 5  
#define BUTTON_PIN1 14

#define LED_PIN2 6
#define BUTTON_PIN2 15

#define LED_PIN3 7
#define BUTTON_PIN3 16

void setup() {
  // настраиваем все светодиоды как ВЫХОД
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
  pinMode(LED_PIN3, OUTPUT);
  
  // настраиваем все кнопки как INPUT
  pinMode(BUTTON_PIN1, INPUT);
  pinMode(BUTTON_PIN2, INPUT);
  pinMode(BUTTON_PIN3, INPUT);
}

void loop() {
  // включаем светодиод при нажатии кнопки
  digitalWrite(LED_PIN1, digitalRead(BUTTON_PIN1));
  digitalWrite(LED_PIN2, digitalRead(BUTTON_PIN2));
  digitalWrite(LED_PIN3, digitalRead(BUTTON_PIN3)); 
}

Если вы просто хотите, чтобы светодиод включался при нажатии кнопки и выключался, когда кнопка не нажата, вы можете упростить код, напрямую записывая состояние кнопки в светодиод, например: digitalWrite(LED_PIN, digitalRead( BUTTON_PIN)). Поскольку чтение кнопки вернет либо HIGH, либо LOW, вы можете напрямую управлять светодиодом с помощью этого.

Также обязательно проверьте PIN-код, который вы используете на своем устройстве. Контакт 3 — это контакт сброса. Поэтому я изменил контакты на 5, 6, 7, чтобы убедиться, что вы используете цифровые контакты. Распиновка Arduino Nano

Если вы хотите увидеть работающий пример в действии, взгляните на этоtinkercad . Имейте в виду, что я использую здесь Arduino Uno, поэтому убедитесь, что вы используете правильные контакты, используя предыдущее расположение контактов, при адаптации его к вашему Arduino nano. Вы можете смоделировать эту схему, нажав кнопку «Имитировать», и протестировать этот рабочий пример, нажимая кнопки на схеме.

,