Нужна помощь в индивидуальном управлении 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);
}
}
Проблема в том, что этот код вызывает одновременное включение и выключение всех трех светодиодов при нажатии любого из трех тумблеров. Может кто-нибудь объяснить, почему это происходит? И что мне нужно изменить, чтобы каждым светодиодом можно было управлять индивидуально?
Спасибо!
@mileguy72, 👍2
Обсуждение1 ответ
Как у вас сделана проводка?
Это рабочий пример того, как это можно сделать:
#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, чтобы убедиться, что вы используете цифровые контакты.
Если вы хотите увидеть работающий пример в действии, взгляните на этоtinkercad . Имейте в виду, что я использую здесь Arduino Uno, поэтому убедитесь, что вы используете правильные контакты, используя предыдущее расположение контактов, при адаптации его к вашему Arduino nano. Вы можете смоделировать эту схему, нажав кнопку «Имитировать», и протестировать этот рабочий пример, нажимая кнопки на схеме.
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Питание светодиодной ленты - Сколько ампер?
- Arduino nano как клавиатура HID
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
Используете ли вы внешний повышающий или понижающий резистор для каждой кнопки?, @chrisl