상세 컨텐츠

본문 제목

035. Arduino 아두이노 리셋 시키기 - Arduino software reset

embedded/arduino

by ZelKun 2023. 1. 31. 23:47

본문

반응형

사실 우노(UNO) 보드로 코딩 때는 Setup 한번만하고

단순히 Loop만을 반복하는 전제로 코딩을 하게되는데요

때에 따라서는 물리적으로 리셋을 시켜야 할때가 생기곤 합니다

 

Setup 다시 할거면 Loop 포함시켜서 돌리면 되니까요

 

간혹 리셋을 시켜야 할때가 발생하면 난감하니

리셋을 시킬수 있는 방법을 소개합니다

리셋을 하는 방법은
1. 보드의 리셋 버튼을 누른다
2. 보드의 reset 핀을 이용
3. 리셋함수를 초기화 시켜 다시 시작

1번 방법은 너무나 당연한거라 패스하고..

2번 부터 해보기로 합니다


Reset 핀을 이용한 하드웨어 리셋

아두이노 연결은 다음과 같습니다

출처: Fritzing

예제는 다음과 같습니다

/**
 * Arduino Rest Test
 */
int ledPin = LED_BUILTIN; // BUILTIN = 13
int resetPin = 7;

// the setup routine runs once when you press reset:
void setup() {  
  Serial.begin(9600);
  Serial.println("Arduino Reset Test");

  delay(5000);
  pinMode(ledPin, OUTPUT);    
  pinMode(resetPin, OUTPUT);

  digitalWrite(ledPin, HIGH);
  digitalWrite(resetPin, HIGH);
  delay(1000);

  digitalWrite(ledPin, LOW);
  digitalWrite(resetPin, LOW);
  
  //the setup function happened
  delay(200);
}

// the loop function runs over and over again forever
void loop() {
}

이 방법은 리셋버튼을 눌렀을때 와 동일하다고 보시면 됩니다

리셋 버튼을 누를 때 Reset핀에 VCC가 연결되고, 버튼을 때면 GND가 연결되서 보드가 리셋된다고 해요

그래서 예제에서도 resetPin에 HIGH을 1초정도 주고 LOW로 변경시켜줍니다

LED는 Setup에서만 켜고 끄기때문에 리셋이 되는지 확인용으로 들어있습니다


 

소프트웨어 리셋

소프트웨어 리셋이라 써놓긴했지만 사실 Reset 핀을 이용한것도 프로그램에서 동작하는거라...

차이는 Reset핀을 물리적으로 연결하나 안하나 차이로 보시면 됩니다

 

소스는 다음과 같습니다

void(* resetFunc) (void) = 0; //declare reset function @ address 0

int led_pin = LED_BUILTIN; // LED_BUILTIN = 13

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led_pin, OUTPUT);     
  Serial.begin(9600);//initialize the serial port
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led_pin, HIGH);   // turn the LED on (HIGH is the voltage level)
  Serial.println("on");
  delay(1000);               // wait for a second

  digitalWrite(led_pin, LOW);    // turn the LED off by making the voltage LOW
  Serial.println("off");
  delay(1000);               // wait for a second
  Serial.println("resetting");
  delay(1000);
  resetFunc();  //call reset
  
  delay(100);
  Serial.println("never happens");
}

출처: https://www.instructables.com/two-ways-to-reset-arduino-in-software/

 

이 방법은 생각지도 못한 방법인데요

resetFunc 함수를 만들고 0으로 초기화(?) 해버리네요

근데 이게 안전한(?) 방법인지는 모르겠네요

 

참고

 

1. https://support.arduino.cc/hc/en-us/articles/5779192727068-Reset-your-board

2. https://www.instructables.com/two-ways-to-reset-arduino-in-software/

 

Two Ways to Reset Arduino in Software

Two Ways to Reset Arduino in Software: If you want to RESET Arduino from the beginning without manually pressing the RESET button, there are a few ways. Here are two ways, using minimal wiring / circuitry. 

www.instructables.com

 

반응형

관련글 더보기

댓글 영역