我对 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;
}
}
}
电路工作正常,
但是重新启动电源后它无法正常工作,听到的声音很快:
如何解决此错误?
答案 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)