电源消失后,Arduino-uno草图无法正常工作

时间:2016-07-25 08:37:04

标签: arduino arduino-uno arduino-ide arduino-yun arduino-due

我对 Arduino 相对较新,这就是我想要做的事情。

我想使用 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

如何解决此错误?

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

通常,控制器应该永远运行(&#34; 24/7&#34;)。 在极少数情况下重启时,应将整个系统设置为定义的初始安全状态。 (通常应与断电期间相同)

当arduino关闭时,你的继电器怎么保持开启状态?

如果你真的想存储以前的状态,那么EEPROM是一个好地方。 (完全同意KIIV)