首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Arduino-uno在停电后没有正常工作

Arduino-uno在停电后没有正常工作
EN

Stack Overflow用户
提问于 2016-07-25 08:37:04
回答 2查看 972关注 0票数 0

我是Arduino的新手,下面是我想做的事情。

我想用IR(InfarRet)遥控器控制继电器电路。下面是我使用的代码:

代码语言:javascript
运行
复制
#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;
    }
  }
}

电路正常工作,

但是,在电力重启后,它不能正常工作,听起来很简单:

错误:

如何修复此错误?

EN

回答 2

Stack Overflow用户

发布于 2016-07-25 09:09:34

RAM是易失性内存,并且在失去电源后也会丢失(IO端口被重置为输入模式,而不需要拔起)。

您可以使用EEPROM存储最后的状态,并在setup()函数中还原它。

对于基于AVR的arduinos,可以使用这样的方法:

代码语言:javascript
运行
复制
#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
EN

Stack Overflow用户

发布于 2016-07-25 16:09:02

通常,控制器意味着永远运行("24/7")。在重新启动的罕见情况下,整个系统应该被设置为定义的初始安全状态。(这通常应与断电期间相同)

为什么你的继电器在阿迪诺号关机的时候还在继续?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38563067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档