0

我对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;
    }
  }
}

电路工作正常,

但重新启动后它无法正常工作,听到是一个快照:

错误 : 在此处输入图像描述

如何解决这个错误?

4

2 回答 2

1

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

为什么你的继电器在 arduino 关闭时保持开启?

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

于 2016-07-25T16:09:02.053 回答
1

RAM 是易失性存储器,掉电后也会丢失(IO 端口重置为 INPUT 模式,无需上拉)。

您可以使用 EEPROM 存储上一个状态并在 setup() 函数中恢复它。

对于基于 AVR 的 arduino,可以使用类似这样的东西:

#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-25T09:09:34.203 回答