본문 바로가기
아두이노

삼촌을 위한 빠른 아두이노 튜토리얼 - 4 (LED 조작 및 변수)

by 쓰루 2021. 6. 22.

아두이노 우노 보드

아두이노의 핀 중 디지털 핀은 0V와 5V, 두 가지 상태의 입력과 출력을 담당한다.

 

입력과 출력 중 어느 용도로 쓸 것인지는 pinMode 코드 선언을 통해 결정할 수 있다.

 

입력 모드로 하면 전압을 감지할 수 있고,

출력 모드로 하면 전압을 가해줄 수 있다.

 

출력 모드라고 해도 아두이노가 전달할 수 있는 전류에는 한계가 있기 때문에(대략 100mA?), 무거운 장치는 따로 전원을 연결하거나 드라이버(전원과 신호를 컨트롤하도록 따로 만들어진 모듈)가 필요하다.

 

 

 

 

 

해당 번호의 핀을 입력(INPUT)으로 사용할지,

출력(OUTPUT)으로 사용할지 설정한다.

 

 

해당 핀의 출력 값을 설정한다.

(HIGH: 5V / LOW: 0V)

0~5V 사이의 전압은 digitalWrite으로는 설정이 불가능하다.

 

 

delay(1000)은 1초 기다리는 함수

 

 

 

회로적으로 13번 핀이 LED와 연결되어 있다고 가정하면 위 코드는 LED를 1초 간격으로 키고 끄는 역할을 한다.

 

참고로 13번 핀은 아두이노 우노 보드에서 이미 보드에 내장된 작은 LED 하나와 연결되어 있기에 따로 LED를 연결하지 않았더라도 위 코드를 돌리면 작동을 확인할 수 있다.

 

 

 


 

 

이전 코드를 보면 핀 번호로 "13"이라는 숫자를 반복해서 사용하고 있다.

 

간단한 코드라면 그냥 어느 핀에 LED가 달려있는지 기억해서 핀 번호를 각각 써줄 수 있지만 코드가 복잡해지면 어느 핀에 어떤 장치가 연결되어 있었는지 헷갈리게 된다.

 

만약 숫자 대신에 장치의 별명을 핀 번호 칸에 대신 쓸 수 있다면 더 직관적으로 작동이 어떻게 될지를 이해할 수 있다.

 

이때 사용 가능한 것이 변수이다.

 

 

 

정수(integer) 형의 변수 "redLED"에 13이라는 값을 배정하였다.

 

 

 

 

 

 

이전 코드에서 13을 써넣었던 위치에 redLED라는 변수 이름을 대신 입력하였지만 똑같이 동작한다.

 

 

 

 

 

 

작성해야 할 글자 수는 늘어나서 귀찮을 수는 있지만, 코드의 동작이 더 직관적으로 이해된다.

(13번 핀을 끄고 킨다 vs 빨간 LED를 끄고 킨다)

 

 

 

• 변수 구조



자료형: 변수에 저장할 데이터의 형식을 결정한다. 일반적으로

정수(0, 1, -3, 4) int
실수(0.1, 1.25, -3.14, 4.0) float
문자(‘’, “asdf”, ‘4’, “$@#”) char
불 대수(true, false) boolean
위 표처럼 나누어진다.

불 대수는 참(1, true)과 거짓(0, false)만을 나타내는 두 가지 값만 존재하는 형식이다.


변수 이름: 영어와 숫자, '_'(언더바) 정도만 사용해서 코드 작성자 맘대로 별명을 붙여주면 된다. 대신 첫 번째 글자는 숫자로 하면 안 된다. 공백(스페이스바)도 못 들어가므로 대문자나 언더 바로 띄어쓰기를 대신한다.

맘대로라고 하긴 했지만 보통 한눈에 어떤 역할을 할 변수인지 알도록 이름을 짓는 것이 좋다.
좋은 예 나쁜 예 불가능
redLED, count, is_light_on, userName aa, f1, f2, f3, something, number 2floor, is light on, year!!
프로그램에서 이미 쓰고 있는 일부 단어를 변수 이름으로 사용하면 오류가 날 수 있으나 보통 그럴 일 없다.
(int float = 3 같은 것이 안된다.)

변수이름으로 한글은 거의 쓰지 않는다. 타자 치기가 귀찮아지기도 하고 어떤 프로그램은 인식 못할 수도 있다.


연산자: 등호는 해당 변수에 오른쪽에 쓰인 값을 할당하겠다는 의미이다.

원래 변수는 선언과 할당이 따로 있는데 위 예시는 두 개를 동시에 한 것이다. 나누면 아래처럼 된다.
int redLED; // 선언
redLED = 13; // 할당
선언이란 별명을 새로 만드는 과정, 할당이란 별명을 붙이는 과정이라고 비유할 수 있다.


변숫값: 해당 변수에 저장하고 싶은 값을 쓴다. 앞의 자료형과 일치하여야 한다.

다른 값과 달리 문자(char)를 넣고 싶을 때는, 한 글자의 경우 작은따옴표(''), 여러 글자의 경우 큰 따옴표("") 사이에 문자를 써야 한다.

변숫값에 다른 변수를 써서 이용할 수도 있기에 변수 이름과 문자를 구분하기 위한 규칙이다.
(count_temp = count는 count_temp라는 변수에 count 변수에 해당하는 값을 할당하겠다는 것
count_temp = "count"는 count_temp라는 변수에 count라는 문자 값을 할당하겠다는 것)

 

• 변수 선언의 위치가 함수 바깥, 맨 위에 있던 이유

변수는 자기가 선언된 최소구간에서만 존재한다.

변수를 함수 안쪽(중괄호로 둘러 쌓인 공간)에서 선언하면 해당 변수는 그 함수 안에서만 사용할 수 있다.

만약 이 코드에서 redLED 변수를 setup함수 안에서 선언했다면 setup함수 안에 있는 pinMode 코드는 redLED가 무엇을 뜻하는지 알 수 있지만, loop함수 안에 있는 digitalWrite 코드는 redLED가 무엇인지 모른다. 이로 인해 오류가 발생하게 될 것이다.

이 코드에서는 redLED가 어느 함수의 안쪽이 아닌 제일 바깥에 선언되었으므로 코드 내의 어떤 함수에서도 사용할 수 있다.


또한 변수는 변수를 사용하기 전에 해야 한다.

코드는 기본적으로 위에서 아래로, 즉 순차적으로 진행된다. 선언 코드보다 변수를 사용한 코드가 위에 있으면, 컴퓨터는 위에서부터 코드를 해석하다가 그 변수를 모르겠다고 하면서 오류를 낸다. 

그래서 보통 사용하고자 하는 공간의 맨 위에 선언한다. 코드 내에서 다 쓰고 싶다면 코드 맨 위, 함수 내에서만 쓰고 싶다면 함수 맨 위


 

댓글