2013-09-17 3 views
1

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

Я использую инструкцию 4 «IF» для управления светом: автоматический свет с использованием фоторезистора и последовательного значения, возобновленного в «ВКЛ/ВЫКЛ», включите свет, используя серийное значение «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 (setAuto == true && ldr < 50) { // Here is the main problem 
    digitalWrite(relayPin, HIGH); 
} else { 

имеет преимущество в течение следующих двух, если заявления. Так как setAuto равен ALWAYS true, и поэтому, когда ldr < 50, свет через релеPin включен.

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

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

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

Ну я пытался что-то подобное раньше, но мне кажется, что есть проблема с последним «еще, если» заявление. Я добавил «Serial.print (« Привет »); в последнем утверждении и отправить «a», но тот, который запускается, является вторым оператором else else. Любая идея об этом конкретном поведении, это сумасшествие, которое вы знаете, это не имеет смысла! – DarkXDroid

+0

Спасибо, мне все равно удалось что-то обойти. Я переместил второе и третье заявление «else if», и это сработало довольно хорошо. Я не знаю, что произошло, поскольку ошибок во время компиляции не было. – DarkXDroid

+0

@DarkXDroid, отладка !! – JackCColeman

 Смежные вопросы

  • Нет связанных вопросов^_^