관리 메뉴

Kim's Programming

아두이노 프로그래밍 기초(알아두면 좋은것!) 본문

Arduino/예제 이야기

아두이노 프로그래밍 기초(알아두면 좋은것!)

Programmer. 2015. 7. 9. 13:57

이번포스팅에서는 아두이노의 기본 구조와 흔히쓰는 몇몇 함수들에 대해서 써보도록 하겠습니다. C언어 정도만 배워도 활용할 수 있게 간단하게 만들어진 아두이노는 몇몇만 알고 있어도 쉽게 이용 할 수 있습니다.

 

아두이노의 기본 구조를 구성하는 것들

 

1. #include<헤더>

 

헤더를 인클루드 할떄 쓰는 문구입니다. 헤더란? 어떤 기능을 사용하기편하도록 미리 작성해놓은 파일을 말을 합니다. 그리고 아두이노에서는 일반 C 언어 프로그래밍과는 달리 라이브러리라는 개념을 이용 헤더를 인클루드 하되 라이브러리 단위로 불러들여서 사용을 하게 됩니다. 보통 아두이노 컴파일러를 설치 한 후 설치 경로에 있는 libraries경로에 들어가면 현재 설치 되어있는 라이브러리들을 볼 수 있습니다.

 

하지만, 내가 이용할 라이브러리가 없다면? 물론 아두이노는 라이브러리를 따로 추가 할 수 있습니다. 배포된 라이브러리 파일을 아두이노 컴파일러를 이용해서 등록을 시키거나, 또는 압축파일 형태의 파일을 풀어서 직접 붙여넣어서 이용 할 수 있습니다.

 

2. void setup()

 

setup이란 단어는(기계 등의) 구성, 장치, 설치, 설정; (실험 등의) 장비  란뜻을 가진 단어입니다. 물론 아두이노에서도 같은 의미로 들어갑니다. setup부분에 들어간 함수, 문구들은 모두 전처리 기능으로 설정이 됩니다. 무슨말인지 어렵다구요? 간단히 말을 하면 아두이노에 이건 어떻게 할 것이고 저건 어떻게 할 것이다. 하고 미리 말을 해두는 역할을 한다고 말할 수 있겠습니다.

 

3. void loop()

 

loop이란 단어는 (올가미나 동그라미 모양의) 고리 라는 뜻을 가진 단어로 프로그래밍 적으로 봤을때는 반복을 뜻합니다.(마치 고리안에서 빙글빙글 도는 의미를 뜻합니다) 하지만, 위에서 C언어 정도만 배우면 된다고 했는데 왜 C언어 마냥 main 함수가 아니라 loop로 되어 있냐구요? 만약 C언어처럼 main 함수를 두었으면 아두이노는 제일 위에서 아래로만 한번 읽고 끝낼 것입니다. 이는 로봇처럼 반복적인 행동을 하는데에는 매우 좋지 않습니다.  물론 C언어처럼 while함수같은것을 이용하여 반복 구현도 가능하지만 사용자입장에서는 그냥 loop함수안에 넣어버리고 끝내버리는것이 더 간단하기 때문에 이렇게 만든것 입니다. 물론 loop문에서 읽는 순서는 위에서 아래 입니다.

 

4. 디지털 포트와 아날로그 포트

 

아두이노에서 디지털 포트와 아날로그 포트의 명칭은 정해져있습니다. 디지털의 경우 0 , 1, 2, 3, 등 포트번호만 숫자로 이루어 져있고 아날로그의 경우 A0. A1등 앞에 대문자 A를 붙여서 표기를 합니다.

 

 

아두이노의 흔히쓰는 함수들!

 

1. 아날로그/디지털 입출력

analogWrite(포트,값)

analogRead(포트)

digitalWrite(포트,값)

digitalRead(포트)

 

가장 기본적으로 아두이노에서는 아날로그와 디지털 포트를 가지고 있고 또 이 포트를 이용하여 신호를 줘서 연결된 기타 부수기재(모터 등)을 조정을 합니다. 디지털의 경우는 입력값으로 HiGH, LOW를 이용하여 값을 입력하며 아날로그의 경우는 ADC값을 이용하여 값을 입력 시킬 수 있습니다.

 

2. Serial.print("내용" 또는 변수);

 

시리얼 프린트 함수는 컴퓨터와 연결된 시리얼 포트를 이용 문자를 출력하는 역할을 합니다. 입력받은 값을 제대로 받았는지 확인 할 수 있는 수단입니다. 또는 특정 센서를 이용할 때 이 센서가 어떤값을 받고 있는지 확인 할 수 있습니다. 간단히 말해서 CPU가 어떻게 읽고 있는지를 눈으로 볼 수 있는 것입니다. 자매품으로 Serial.printl(변수)라는 함수도 있는데 이는 줄바꿈 서식 \n 이 들어가있는 점에서 Serial.print()와 다르다고 할 수 있습니다.

 

3. while(조건)

 

while문은 괄호안 조건이 부정이 될 때 까지 반복하는 함수입니다. 일단 while문을 거치게 되면 while안에서 반복을 진행하기 때문에 while반복을 깨뜨릴려는 조건의 조정은 while문안에서 하는 것이 바람직 합니다.

 

4. if(조건)

 

if문은 괄호안 조건에 대해서 실행 하는 함수 입니다. while문과는 다른점이라면 if문은 조건에 맞으면 한번 실행하고 지나칩니다. 조건을 본다는 것은 같으나 반복을 하냐 안하냐 따라서 달라집니다.

 

5. for( 시작변수 ; 끝 변수 ; 증감)

 

for문은 위 두개와는 또 다르게 시작 값과 끝값 증감을 나타냅니다. 예시를 들어 for(int i=0 ; i<5 ; i++) 이라고 표기를 하는데 이는 i변수를 0이라고 지정을 하고 for문 안의 함수들을 반복을 한번 할때마다 i++(i값을 하나씩 증가) 시키면서 i<5(i가 5보다 작은 값이 되면) 반복을 멈추게 되는 함수 입니다. for 문은 반복을 하되 횟수를 편히 지정 할 수 있습니다. 물론 while문으로도 구성할 수 있지만 while문으로 하는것 보다 반복을 눈으로 보기 쉽고 또 구성하기가 더 간단하여 반복 횟수 지정에는 for문이 많이 쓰입니다.

 

6. 부호들(연산자 등)

 

아두이노에서는 우리가 보통 이용하는 사칙 연산 부터 여러 부호들이 있습니다.

 

계산 연산자

 연산자

예시

뜻 

 =

 a=3;

 대입을 하는 부호입니다.

 +

 c=a+b

 사칙연산 더하기입니다.

 -

 c=b-a

 사칙연산 빼기입니다.

 *

 c=a*b

 사칙연산 곱하기입니다.

 /

 c=a/b

 사칙연산 나누기입니다.(분모는 0이 되어서는 되지 않습니다)

 !=

 if(a!=b)

 같지 않음을 판단하는 부호입니다(Not Equal)

 

판단 연산자

 연산자

예시 

뜻 

 ||

if(a==3||b==3)

 ||는 or을 뜻합니다 두 조건중 하나만 만족해도 옳다고 판단합니다

 &&

if(a==3&&b==3

 &&는 and를 뜻합니다 두 조건중 둘다 만족해야 옳다고 판단합니다

 ==

 if(a==3)

 ==은 =(equal)과는 다르게 같은지 판단하는 연산자입니다. 두 값을 비교하여 같으면 옳다고 판단합니다.

 !=

 if(a!=3)

 !=은 다른지 같은지 판단하는 연산자 입니다. 두값을 비교하여 다르면 옮다고 판단합니다.

 

 

비트 연산자

 연산자

연산자 기능 

결합방향 

 &

 비트단위로 AND 연산을 합니다.

 ->

 |

 비트단위로 OR 연산을 합니다.

 ->

 ^

 비트단위로 XOR 연산을 합니다.

 ->

 ~

 단향 연산자로서 피연산자의 모든 비트를 반전 시킵니다.

 <-

 <<

 피 연산자의 비트열을 왼쪽으로 이동시킵니다.

 ->

 >>

 피 연산자의 비트열을 오른쪽으로 이동시킵니다.

 ->