2016-07-25 110 views
0

我對Arduino相對較新,這裏是我正在嘗試做的。電源消失後Arduino-uno草圖不​​能正常工作

我想控制一個繼電器電路使用IR(InfarRet)遠程。下面是我用的是什麼代碼:

#include <IRremote.h> 
int RECV_PIN = 6; 
IRrecv irrecv(RECV_PIN); 
decode_results results; 

void setup() { 
    // put your setup code here, to run once: 
    Serial.begin(9600); 
    irrecv.enableIRIn(); 
    pinMode (5 ,OUTPUT); 
} 

void loop() { 
    // put your main code here, to run repeatedly: 
    if (irrecv.decode(&results)){ 
    Serial.println(results.value,DEC); 
    irrecv.resume(); 
    switch (results.value){ 
    case 3150073167: 
     digitalWrite(5,HIGH); 
     break; 
    case 68850955: 
     digitalWrite (5,LOW); 
     break; 
    } 
    } 
} 

電路工作正常,

但斷電重啓後不能正常工作,聽到的是一個單元:

錯誤: enter image description here

如何解決這個錯誤?

+0

這可能不是一個錯誤。很高興在斷電時繼電器進入安全狀態。 – datafiddler

+0

請尊重那些會正確閱讀您的問題和格式的人。 –

+0

謝謝您先生的閱讀和讚揚,在您的幫助下終於解決了這個問題,但它只適用於一個繼電器(只有一個LED),..所以請善待我的代碼,並幫助我爲兩個或更多(LED)...聽到是我的代碼: http://textuploader.com/5ezr9 – Ylet

回答

1

RAM是易失性存儲器,斷電後也會丟失(IO端口復位爲INPUT模式,無需上拉)。

您可以使用EEPROM存儲最後的狀態並將其恢復到setup()函數中。

對於基於AVR arduinos這樣的事情,可以用:

#include <EEPROM.h> 

#include <IRremote.h> 

const int RELAY_PIN = 5; 
const int  RECV_PIN = 6; 
const int  address = 0; 
byte    state = 0; 
decode_results results; 

IRrecv   irrecv(RECV_PIN); 

void setup() { 
    Serial.begin(9600); 
    irrecv.enableIRIn(); 

    state = EEPROM.read(address); 

    pinMode (RELAY_PIN, OUTPUT); 
    digitalWrite(RELAY_PIN, state); 
} 

void loop() { 

    if (irrecv.decode(&results)) { 
     Serial.println(results.value,DEC); 
     irrecv.resume(); 
     switch (results.value){ 
      case 3150073167LU: 
       if (state == LOW) { 
        state = HIGH; 
        EEPROM.write(address, state); 
       } 
       break; 

      case 68850955LU: 
       if (state == HIGH) { 
        state = LOW; 
        EEPROM.write(address, state); 
       } 
       break; 

      default: 
       break; 
     } 
     digitalWrite(RELAY_PIN, state); 
    } 
} 
+0

如何解決它..先生?請上傳代碼 – Ylet

+0

謝謝您的閱讀和讚揚,您的幫助終於解決了它,但它只適用於一個繼電器(只有一個LED),..所以請善待我的代碼,並幫助我做到這一點對於兩個或更多(LED)...聽到是我的代碼: http://textuploader.com/5ezr9 – Ylet

1

通常情況下,一個控制器是爲了永遠運行( 「24/7」)。 在極少數情況下重新啓動時,應將整個系統設置爲已定義的初始安全狀態。 (通常應該和斷電時相同)

在arduino關閉時,你的繼電器是否保持ON狀態?

如果你真的想存儲以前的狀態,EEPROM是一個好地方。 (完全同意KIIV)

+0

如何解決它..先生?請上傳代碼 – Ylet

+0

KIIV已經做了比我更多的勺子餵養。祝他好運,他的建議 – datafiddler

+0

謝謝您的閱讀和讚揚,您的幫助終於解決了它,但它只適用於一個繼電器(只有一個LED),..所以請友好看看我的代碼,並幫助我做它爲兩個和更多(LED)...聽到是我的代碼: http://textuploader.com/5ezr9 – Ylet