我是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;
}
}
}电路正常工作,
但是,在电力重启后,它不能正常工作,听起来很简单:
错误:

如何修复此错误?
发布于 2016-07-25 09:09:34
RAM是易失性内存,并且在失去电源后也会丢失(IO端口被重置为输入模式,而不需要拔起)。
您可以使用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);
}
}发布于 2016-07-25 16:09:02
通常,控制器意味着永远运行("24/7")。在重新启动的罕见情况下,整个系统应该被设置为定义的初始安全状态。(这通常应与断电期间相同)
为什么你的继电器在阿迪诺号关机的时候还在继续?
如果您真的想存储以前的状态,EEPROM是一个很好的地方。(完全同意KIIV)
https://stackoverflow.com/questions/38563067
复制相似问题