이전 게시글에서 기본적인 3개의 함수에 대해 설명했었다. 이를 활용하여 어떤 식으로 설계를 해나가는 것인지 알아보자.
기본적으로 아두이노 스케치를 열면 아래와 같은 그림이 나올것이다.
C언어나 C++을 공부한 사람이라면 main문은 존재하지도 않고 두개의 함수만 있기 때문에 다소 생소한 모습일 것이다. 아두이노 스케치의 경우 사용자의 편의를 위해 저렇게 함수가 나오는데 C언어나 C++형태로 바꾸면 아래와 같이 표현된다. 아두이노 스케치에서 코딩을 한 후 컴파일을 할 경우 아래와 같이 자동으로 변환하여 실행된다.
#include <xxxx.h>
int main(){
void setup();
void loop();
setup();
while(1){
loop();
}
}
setup함수의 경우 마이크로컨트롤러가 실행될 때 단 한 번만 실행이 된다. 말 그대로 보드가 실행되기 전에 setup을 하는 부분이다. 그리고 loop문에 들어가는 구문들은 계속해서 그 동작들을 반복한다. 간단한 예제로 1번 핀에 연결된 LED를 껐다 켰다 동작도록 설계를 해보자. 그럼 필요한 하드웨어는 아두이노와 LED면 충분하다. 회로 구성은 아주 간단한데 LED의 경우 기다란 쪽이 +단자에 연결해야 하므로 그 부분에만 유의하면 된다. 대부분의 LED가 5V 이내에서 동작하기 때문에 문제가 없지만 110옴 정도의 저항 정도를 달면 안정적으로 동작할 것이다. 그리고 -단자 부분을 아두이노의 GND포트에 연결하면 된다. 지금은 간단한 회로이기 때문에 문제가 없지만 회로가 복잡해지면 GND연결에 유의해야 한다.
위와같이 하드웨어를 구성하였다면 절반은 완성한 셈이다. 이제 보드가 동작하게 할 코드만 설계하면 된다. 우선 1번 핀이 LED가 출력하도록 설정을 해야 한다. 이러한 동작을 설정하는 함수가 pinMode이다. 대소문자가 구별되는 함수기 때문에 대소문자에 유의하자. pinMode함수는 마이크로컨트롤러가 시작되면서 단 한 번만 실행되면 되기 때문에 setup구문에서 써서 1번을 OUTPUT이라 쓴다고 선언 후, loop에서 digitalWrite를 써서 출력을 낼지 말지 결정하면 간단하게 코딩은 끝난다. 추가적으로 깜박이는 것을 구현하려면 중간에 시간을 지연시키는 함수가 필요한데, 그 동작을 수행하는 함수가 바로 delay이다. delay함수의 경우 괄호 안에 숫자를 넣으면 그 숫자만큼 아두이노는 잠깐 아무런 동작을 하지 않는다. 아무런 동작을 하지 않는다 해서 꺼진다는 의미가 아니라 다음 함수나 명령을 읽는 것을 쉰다는 의미이다. 괄호 안에 들어가는 숫자는 밀리초 단위이며, delay(500)이라고 쓰면 500ms 즉 0.5초를 쉰다는 의미이다. pinMode / digitalWrite / delay 이렇게 세 함수를 사용하면 몇 초 간격으로 깜빡이는 LED를 설계할 수 있다. 코드는 아래와 같다.
void setup() {
// put your setup code here, to run once:
pinMode(1, OUTPUT); // Pin 1번을 출력 핀으로 선언
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(1, HIGH); // 1번핀에서 Logic 1(5V) 출력
delay(500); // 0.5초 지연
digitalWrite(1, LOW); // 1번핀에서 Logic 0(0V) 출력
delay(500); // 0.5초 지연
}
깜빡이는 주기를 조절하고 싶다면 delay함수의 값을 조절해주면 원하는 만큼 주기를 조절할 수 있다. 위와 같이 컴파일을 하여 아두이노에 업로드를 하게 되면 마이크로컨트롤러의 동작은 아래의 순서와 같이 실행된다.
1. 1번 핀을 출력으로 설정
---------------- 반복구문 ----------------
2. 1번핀에 5V를 출력 (LED 점등)
3. 0.5초 동작 지연
4. 1번핀에 0V를 출력 (LED 소등)
5. 0.5초 동작 지연
---------------- 무한반복 ----------------
% 아래 사진과 같이 포트와 보드 버전을 맞게 설정했는지 확인하고 업로드 및 컴파일을 실행하시길 바랍니다
'임베디드 일지 > 아두이노 기초' 카테고리의 다른 글
[아두이노 기초] Serial 통신 (0) | 2023.03.30 |
---|---|
[아두이노 기초] ADC (0) | 2022.09.14 |
[아두이노 기초] Interrupt (0) | 2022.04.22 |
[아두이노 기초] GPIO Input (0) | 2022.04.09 |
[아두이노 기초] Arduino Mega 2560 - 1 (0) | 2021.12.16 |