Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
断电后,Arduino uno草图无法正常工作_Arduino_Arduino Uno_Arduino Ide_Arduino Yun_Arduino Due - Fatal编程技术网

断电后,Arduino uno草图无法正常工作

断电后,Arduino uno草图无法正常工作,arduino,arduino-uno,arduino-ide,arduino-yun,arduino-due,Arduino,Arduino Uno,Arduino Ide,Arduino Yun,Arduino Due,我对Arduino比较陌生,以下是我想做的 我想使用IR(InfarRet)remote控制继电器电路。下面是我正在使用的代码: #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

我对Arduino比较陌生,以下是我想做的

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

#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;
    }
  }
}
#包括
int RECV_引脚=6;
IRrecv IRrecv(RECV_引脚);
解码_结果;
无效设置(){
//将安装代码放在此处,以便运行一次:
Serial.begin(9600);
依那普利();
pinMode(5,输出);
}
void循环(){
//将主代码放在此处,以便重复运行:
if(解码和结果)){
序列打印项次(结果值,DEC);
简历();
开关(结果值){
判例3150073167:
数字写入(5,高);
打破
判例68850955:
数字写入(5,低);
打破
}
}
}
电路工作正常

但重新启动电源后,它无法正常工作,这是一个简单的问题:

错误:


如何修复此错误?

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);
    }
}
#包括
#包括
常数int继电器_引脚=5;
const int RECV_PIN=6;
常量int地址=0;
字节状态=0;
解码_结果;
IRrecv IRrecv(RECV_引脚);
无效设置(){
Serial.begin(9600);
依那普利();
状态=EEPROM读取(地址);
引脚模式(继电器引脚,输出);
数字写入(继电器引脚,状态);
}
void循环(){
if(解码和结果)){
序列打印项次(结果值,DEC);
简历();
开关(结果值){
案例3150073167LU:
如果(状态==低){
状态=高;
EEPROM写入(地址、状态);
}
打破
案例68850955LU:
如果(状态==高){
状态=低;
EEPROM写入(地址、状态);
}
打破
违约:
打破
}
数字写入(继电器引脚,状态);
}
}

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);
    }
}
#包括
#包括
常数int继电器_引脚=5;
const int RECV_PIN=6;
常量int地址=0;
字节状态=0;
解码_结果;
IRrecv IRrecv(RECV_引脚);
无效设置(){
Serial.begin(9600);
依那普利();
状态=EEPROM读取(地址);
引脚模式(继电器引脚,输出);
数字写入(继电器引脚,状态);
}
void循环(){
if(解码和结果)){
序列打印项次(结果值,DEC);
简历();
开关(结果值){
案例3150073167LU:
如果(状态==低){
状态=高;
EEPROM写入(地址、状态);
}
打破
案例68850955LU:
如果(状态==高){
状态=低;
EEPROM写入(地址、状态);
}
打破
违约:
打破
}
数字写入(继电器引脚,状态);
}
}

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

为什么在arduino关闭时,你的继电器仍保持开启状态

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

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

为什么在arduino关闭时,你的继电器仍保持开启状态

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

基辅已经比我做了更多的填鸭式喂食。祝他的建议好运谢谢您的阅读和推荐,在您的帮助下终于解决了问题,但它只适用于一个继电器(只有一个LED)。。所以,请看一下我的代码,帮我制作两个或更多的(LED)…听说是我的代码:基辅已经做了比我更多的填鸭式喂食。祝他的建议好运谢谢您的阅读和推荐,在您的帮助下终于解决了问题,但它只适用于一个继电器(只有一个LED)。。所以,请看一下我的代码,帮助我制作两个或更多的(LED)…Hear是我的代码:这可能不是一个错误。很高兴继电器在电源关闭时进入安全状态。请尊重将正确阅读您的问题和格式的人。感谢您的阅读和推荐,在您的帮助下最终解决了问题,但它仅适用于一个继电器(仅一个LED)。。所以,请看一下我的代码,帮助我制作两个或更多的(LED)…Hear是我的代码:这可能不是一个错误。很高兴继电器在电源关闭时进入安全状态。请尊重将正确阅读您的问题和格式的人。感谢您的阅读和推荐,在您的帮助下最终解决了问题,但它仅适用于一个继电器(仅一个LED)。。所以,请看一下我的代码,帮我把它做成两个或更多的(LED)…听是我的代码:谢谢您阅读和推荐,在您的帮助下,终于解决了它,但它只适用于一个继电器(只有一个LED)。。因此,请看一下我的代码,并帮助我制作两人及以上(LED)…听到的是我的代码:感谢您阅读和推荐,在您的帮助下,最终解决了它,但它只