들어가며
아두이노를 IDE를 켜면 가장 기본으로 보이는 함수가 두 개 있습니다. 바로 Setup()과 loop()인데요. 이 함수들이 무엇이길래 초기화면을 차지하고 있는 것 일까요? 이 함수들은 아두이노 프로그래밍을 하려면 항상 사용하게 되는 함수입니다. 그리고 이번 글에서는 이들의 역할에 대해 알아 보려고 합니다. 이름에서 어느 정도 감이 오지 않으시나요? 아래 글을 통해 한번 알아 볼게요.
아두이노 기본 함수, setup() loop() 함수 알아보기
이름에서 알 수 있듯 setup()은 아두이노를 세팅하는 영역입니다. 보드가 실행되고 최초 1회만 실행하죠. 그리고 loop()는 셋업이 완료된 후 반복적으로 실행되는 함수입니다. 반복 작업, 실제 아두이노가 작업 해야 하는 핵심 로직이 여기에 작성되죠.
setup() 함수
setup() 함수는 Arduino 보드가 전원을 공급 받거나 리셋 버튼을 누를 때 등, 아두이노가 실행되고 최초 한 번만 실행됩니다. 이 함수는 주로 초기 설정 작업을 수행하는 데 사용됩니다. 예를 들어, 핀 모드를 설정하거나, 시리얼 통신을 시작하는 등의 작업이 여기에 포함됩니다.
setup() 함수의 특징:
- 프로그램이 시작될 때 한 번만 실행됩니다.
- 초기화 작업을 수행하는 데 사용됩니다.
예제:
void setup() {
// 시리얼 통신을 9600 보드레이트로 시작
Serial.begin(9600);
// 핀 13을 출력 모드로 설정
pinMode(13, OUTPUT);
}
위 예제에서 Serial.begin(9600)은 시리얼 통신을 시작하는 명령어로, 보드레이트를 9600으로 설정하고, pinMode(13, OUTPUT)은 핀 13을 출력 모드로 설정합니다. 이 두 가지 작업은 보드가 처음 시작될 때 한 번만 수행되면 되기 때문에 setup() 함수에 포함하여 작성하게 됩니다.
loop() 함수
loop() 함수는 setup() 함수가 실행된 후에 반복적으로 실행되는 함수입니다. Arduino 프로그램의 핵심 로직은 이 함수 내에 작성되며, 보드가 켜져 있는 동안 지속적으로 실행됩니다. 이 함수는 주로 센서 데이터를 읽거나, 출력을 제어하거나, 상태를 변경하는 등의 작업등을 수행하게 됩니다.
loop() 함수의 특징:
- 프로그램이 종료될 때까지 반복해서 실행됩니다.
- 주 프로그램 로직을 포함합니다.
예제:
void loop() {
// 핀 13의 출력을 HIGH로 설정하여 LED 켜기
digitalWrite(13, HIGH);
// 1초 동안 대기
delay(1000);
// 핀 13의 출력을 LOW로 설정하여 LED 끄기
digitalWrite(13, LOW);
// 1초 동안 대기
delay(1000);
}
위 예제에서 digitalWrite(13, HIGH)는 핀 13에 연결된 LED를 켭니다. delay(1000)은 1초 동안 대기하는 명령어입니다. 이후 digitalWrite(13, LOW)는 핀 13에 연결된 LED를 끄고, 다시 delay(1000)으로 1초 동안 대기합니다. 이 과정이 반복되면서 LED가 1초 간격으로 깜빡이게 됩니다.
응용 해보기
위에서 배운 내용을 토대로 간단한 프로그램을 만들어 보겠습니다.
void setup() {
// 시리얼 통신 시작
Serial.begin(9600);
// 핀 13을 출력 모드로 설정
pinMode(13, OUTPUT);
}
void loop() {
// LED 켜기
digitalWrite(13, HIGH);
Serial.println("LED ON");
// 1초 대기
delay(1000);
// LED 끄기
digitalWrite(13, LOW);
Serial.println("LED OFF");
// 1초 대기
delay(1000);
}
이 프로그램은 setup() 함수에서 시리얼 통신을 시작하고 핀 13을 출력 모드로 설정한 후, loop() 함수에서 LED를 켜고 끄는 작업을 반복합니다. LED의 상태는 시리얼 모니터에 출력됩니다. 아두이노 우노보드는 13번 핀이 내장 LED를 제어하는 핀으로 되어 있습니다.
하지만, 컨트롤러 모델에 따라 내장 LED를 제어할 수 있는 핀이 다를 수 있는데요, 보드 핀 배열을 참고하거나 아래 방법을 사용해 보는 것도 좋습니다. 제가 가지고 있는 보드는 아두이노 레오나르도 보드로 아래 코드를 통해 LED 점멸을 구현 해 보았습니다.
void setup() {
// 시리얼 통신 시작
Serial.begin(9600);
// 내장 LED 핀을 출력 모드로 설정
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// 내장 LED 켜기
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED ON");
// 1초 대기
delay(1000);
// 내장 LED 끄기
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED OFF");
// 1초 대기
delay(1000);
}
아두이노 플랫폼에서는 보통 LED_BUILTIN을 사용하여 내장 LED를 제어하는 것이 좋습니다. 동작은 동일합니다. loop() 함수에서 LED를 켜고 끄는 작업을 반복하며, LED의 상태는 시리얼 모니터에 출력됩니다.

마무리
setup() 함수와 loop() 함수는 Arduino 프로그램의 기본 구조를 이루는 필수 요소입니다. setup() 함수는 초기 설정 작업을, loop() 함수는 지속적으로 반복되는 주 프로그램 로직을 포함하게 작성하면 됩니다. 이 두 함수를 올바르게 이해하고 활용하면 아두이노를 통한 프로그래밍을 쉽게 해 나갈수 있을것입니다.