초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

오렌지보드를 리셋 해 봅시다.

2018-05-10 09:55:49

 

 

 

 

일반적으로 오렌지보드(아두이노)를 사용하다가 재시작 할 때 주로 보드에 붙어 있는 리셋 버튼을 주로 이용하실 겁니다.

 

 

 

 

오렌지보드로 프로젝트를 만들어 돌릴 때 계속 데이터가 쌓이거나  

 

millis 함수를 사용할 때 최대 49일 정도까지 데이터를 저장할 수 있습니다.(millis는 unsigned long 타입) 아두이노를 정기적으로 리셋 하게 되면 millis() 값도 초기화가 되니 문제가 없지만, 리셋 없이 계속 쓰게 될 경우 49일 후 millis() 함수는 오버플로가 되어 그 때부터 문제가 발생하게 됩니다.

 

이번 컨텐츠에서는 오렌지보드를 리셋 버튼이 아닌 다른 방법으로 보드를 리셋 해보겠습니다.

 

 

첫번째 방법으로는 오렌지보드 Reset Pin에 선을 연결하는 방법입니다.

오렌지보드에 있는 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

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!