Управление светом с фоторезистором и последовательной связью — Arduino

Я пытаюсь включить свет «Вкл» и «Выкл» с Arduino с помощью реле, фоторезистора и последовательной связи. Проблема возникает, когда я пытаюсь выключить свет, когда фоторезистор получает низкое значение и получает команду через последовательную связь, чтобы предотвратить активацию оператора «IF», ​​он просто не работает как свет включен.

Я использую оператор 4 «IF» для управления освещением: автоматический свет с использованием фоторезистора и серийное значение возобновляется в «ON / OFF», включаю свет с использованием серийного значения «h», выключаю свет с использованием серийного значения «l» и другое последовательное значение для управления оператором автоматического освещения, используя «a» для управления первым оператором.

Как я могу использовать значение для управления светом на основе датчика и последовательного выхода одновременно. Другими словами, как я могу остановить автоматическое включение света? Что я делаю не так или что я оставил?

Вот мой простой код:

char val;

boolean setAuto=true; // Automatic Light Status Value
int ldr;
int relayPin=4;void setup() {

pinMode(relayPin, OUTPUT);
Serial.begin(9600);

}

void loop() {

ldr = analogRead(A0); // Read value from Photoresistor

if ( Serial.available()) {
val = Serial.read(); // Get serial value
}

if ( setAuto == true && ldr < 50 ) { // Here is the main problem
digitalWrite(relayPin, HIGH);
}

else if ( val == 'h' ) {
digitalWrite(relayPin, HIGH); // Work
}

else if ( val == 'l') {
digitalWrite(relayPin, LOW); // Work
}

else if (val == 'a') { // Here is the other part of the problem
setAuto = !setAuto; // Changing value for automatic light
}
}

1

Решение

Первое утверждение if:

 if ( setAuto == true && ldr < 50 ) { // Here is the main problem
digitalWrite(relayPin, HIGH);
} else {

имеет приоритет над следующими двумя операторами if. Поскольку setAuto является ВСЕГДА правда и так когда лдр < 50 свет через реле включен.

Подумайте о том, как вы можете установить для Auto значение false.

Подсказка. Вы можете оценить val сразу после прочтения:

if ( Serial.available()) {
val = Serial.read(); // Get serial value
if (val == ..... logic to affect the course of events.....
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]