2016-07-25 18 views
0

저는 비교적 최근에 Arduino을 새로 입수했으며, 여기에 제가하려고 한 것이 있습니다.전원이 꺼진 후 Arduino-uno 스케치가 제대로 작동하지 않습니다.

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

회로가 제대로 작동,

하지만

전원이 다시 시작 후 듣고, 제대로 작동하지 않는 간단합니다 :

오류는 여기에 내가 사용하고 무엇 코드는 다음과 같습니다 enter image description here

이 오류를 해결하는 방법은 무엇입니까?

+0

아마도 오류가 아닙니다. 전원이 꺼지면 계전기는 안전한 상태가됩니다. – datafiddler

+0

질문과 형식을 올바르게 읽는 사람들을 존중하십시오. –

+0

당신의 도움을 받아 마침내 해결했지만, 한 중계 (단 하나의 LED)에서만 작동합니다 .. 제 코드를보고 둘 이상을 위해 충분히 도와주세요. (LED) ... 내 코드를 들으십시오 : http://textuploader.com/5ezr9 – Ylet

답변

1

RAM은 휘발성 메모리이며 전원 손실 후에도 손실됩니다 (IO 포트는 풀업없이 INPUT 모드로 재설정됩니다).

EEPROM을 사용하여 마지막 상태를 저장하고 setup() 기능에서 복원 할 수 있습니다. 이 같은 AVR 기반의 아두 이노 뭔가를 들어

사용할 수 있습니다 :

#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); 
    } 
} 
+0

고칠 방법 .. 선생님? 코드를 업로드하십시오 – Ylet

+0

당신의 도움을 받아 마침내 그것을 해결했지만, 오직 하나의 릴레이 (단 하나의 LED)에 대해서만 작동합니다. .. 제발 제 코드를보고 제게 도와 주시면 친절 하구요. 두 개 이상 (LED) ... 내 코드는 다음과 같습니다. http://textuploader.com/5ezr9 – Ylet

1

일반적으로 컨트롤러가 영원히 실행하기위한 것입니다 ("24"). 드문 경우로 시스템을 다시 시작해야하는 경우 전체 시스템을 정의 된 초기 안전 상태로 설정해야합니다. (보통 전원을 끄는 것과 같아야합니다)

arduino가 꺼져있는 동안 어떻게 릴레이가 켜져 있습니까?

이전 상태를 저장하려면 EEPROM을 사용하는 것이 좋습니다. (KIIV와 완전히 일치 함)

+0

고칠 방법 .. 선생님? 코드를 업로드하십시오 – Ylet

+0

KIIV는 이미 내가하는 것보다 더 많은 스푼을 먹였습니다. 그의 제안과 함께 행운을 빌어 요 – datafiddler

+0

당신의 도움을 받아 마침내 해결했지만, 한 중계 (단 하나의 LED)에서만 작동합니다 .. 제발 제 코드를보고 제게 도와 줘요. 2 개 이상 (LED) ... 내 코드가 있습니다. http://textuploader.com/5ezr9 – Ylet