코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2018-05-10 09:55:49
일반적으로 오렌지보드(아두이노)를 사용하다가 재시작 할 때 주로 보드에 붙어 있는 리셋 버튼을 주로 이용하실 겁니다.
오렌지보드로 프로젝트를 만들어 돌릴 때 계속 데이터가 쌓이거나
millis 함수를 사용할 때 최대 49일 정도까지 데이터를 저장할 수 있습니다.(millis는 unsigned long 타입) 아두이노를 정기적으로 리셋 하게 되면 millis() 값도 초기화가 되니 문제가 없지만, 리셋 없이 계속 쓰게 될 경우 49일 후 millis() 함수는 오버플로가 되어 그 때부터 문제가 발생하게 됩니다.
이번 컨텐츠에서는 오렌지보드를 리셋 버튼이 아닌 다른 방법으로 보드를 리셋 해보겠습니다.
오렌지보드에 있는 Reset Pin은 LOW 신호가 들어오면 보드를 리셋합니다. 우선 D12번 핀을 3V3 핀 위에 있는 RESET핀에 연결해 줍니다,
// 오렌지보드 Reset핀을 이용하여 오렌지보드 리셋하기
void setup() {
digitalWrite(12, HIGH);
Serial.begin(9600);
Serial.println("OrangeBoard Reset");
pinMode(12, OUTPUT);
}
void loop() {
Serial.println("Loop In");
delay(1000);
digitalWrite(12, LOW); // 오렌지보드를 리셋합니다.
Serial.println("Never happens"); // 리셋이 됬으면 이 코드는 동작하지 않습니다.
}
위 코드를 업로드 후 시리얼 모니터를 보시면 원래는 1번만 출력되어야 할 setup()함수 안에 있는 "OrangeBoard Reset" 문자가 반복해서 보이게 됩니다.
(반복해서 리셋이 되기 때문에 setup() 함수가 계속 호출이 됩니다.)
또한 loop() 함수 중간에 리셋을 하기 때문에 코드 마지막 줄 "Never happens"메세지가 보이지 않습니다.
ㅁ
리셋이 되지 않을 경우 setup 함수에 있는 "OrangeBoard Reset" 메세지가 1번만 출력이 되고, 마지막 줄 코드가 실행이 되서 "Never haapens" 메세지가 출력이 됩니다.
오렌지보드(아두이노)는 일반적으로 보드가 시작할 때 디지털 핀에서 LOW 신호를 내보냅니다. 그렇기 때문에 추가 작업없이 선을 연결을 할 경우 Reset Pin에 LOW 신호가 들어가서 계속 보드가 리셋이 됩니다.
이러한 문제를 해결하기 위해 setup()함수 안에 먼저 digitalWrite를 이용하여 HIGH신호를 주면 LOW 신호대신 HIGH로 신호를 주게 됩니다.
(pinMode를 먼저 쓰게 될 경우 디지털 핀에서 LOW신호가 먼저 나오게 되므로 pinMode를 사용하기 전에 digitalWrite를 사용하셔야 합니다.)
오렌지보드에 따로 연결 없이 소스 코드에서 reset 함수를 정의 한 후 이 함수를 이용하여 보드를 리셋하는 방법입니다.
// 소스코드를 이용하여 오렌지보드 리셋하기
void setup() {
Serial.begin(9600);
Serial.println("OrangeBoard Reset");
}
// 오렌지보드를 리셋하는 함수 선언
void(* resetFunc) (void) = 0;
void loop() {
Serial.println("Loop In");
delay(1000);
resetFunc(); // 오렌지보드 리셋하기
Serial.println("Never happens");
}
첫번째 방법의 결과와 마찬가지로 setup()함수 안에 있는 "OrangeBoard Reset" 문자가 반복해서 보이게 됩니다.
마찬가지로 loop() 함수 중간에 리셋을 하기 때문에 코드 마지막 줄 "Never happens"메세지가 보이지 않습니다.
ㅁ
// 오렌지보드를 리셋하는 함수 선언
void(* resetFunc) (void) = 0;
이 함수는 오렌지보드를 리셋하는 함수 입니다. resetFunc() 은 리셋 기능을 담당하는 아두이노 함수 인데. 이 함수를 주소 0번에 선언하게 되면 오렌지보드가 자동으로 리셋이 되게 됩니다.
resetFunc 함수를 호출 할 때 마다 오렌지보드가 리셋되게 됩니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!