Я пытаюсь включить свет «Вкл» и «Выкл» с 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
}
}
Первое утверждение 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.....
}
Других решений пока нет …