본문 바로가기
아두이노

삼촌을 위한 빠른 아두이노 튜토리얼 - 6 (RGB LED 조작, PWM, 반복문)

by 쓰루 2021. 7. 1.

RGB LED란 그냥 빨강 초록 파랑 LED가 합쳐져 있는 것

그냥 단일 색을 켜고 끄는 것은 이전 5번 게시글처럼 코드를 짜면 된다.

 

이 글에서 하려는 것은 여러 색을 다양한 비율로 섞은 빛을 내는 것이다.

 

즉, digitaWrite의 출력 값인 0V 나 5V 말고 중간 전압 값을 주는 방법을 알아보고자 한다.

이때 쓰이는 기술이 PWM이다.

 

 

전압 0V 1.25V 2.5V 3.75V
전압 그래프
한 주기당 5V의 비율 0% 25% 50% 75%

기본적으로 아두이노의 출력 핀은 0V와 5V 밖에 출력하지 못한다.

그래서 고안된 방법이 0V와 5V를 아주 빠르게 번갈아서 출력하는 것

 

5V의 비율이 50%면 2.5V라고 보는 셈

 

모든 디지털 핀이 PWM기능을 사용할 수 있는 것은 아니고 핀 옆에 전압 그래프처럼 지지직 표시( _⨅_⨅_⨅_ )가 있는 핀만 사용할 수 있다.

 

 

 

PWM기능으로 신호를 출력하게 해주는 함수가 analogWrite이다.

입력 값으로는 0~255 범위의 정수를 넣어서 출력 강도를 조절한다.

 

아마도 코딩어레이 가이드 북 출저 pwm 그림

 

 

 

반복문

어떤 코드를 여러 번 반복하고 싶을 때 사용하는 코드 구조

for 반복문의 진행 방식

 

for 반복문 기본 구조


int i = 0 초기값 for문이 시작될 때 한 번 실행된다. 
i 라는 정수형 변수에 0을 할당한다. i 변수는 for문 내에서 선언되었으므로 for문 내에서만 사용된다.
i <= 10 조건 이 조건 값이 참일 때, 중괄호 안에 있는 코드가 실행된다.
거짓이면 for문을 벗어난다.
i += 1 증감문 중괄호 안에 있는 코드가 실행된 뒤 실행된다. 이후에는 조건으로 다시 돌아가서 진행된다.
i += 1은 i = i + 1과 동일한 식으로 i 변수의 값을 1 증가시키는 코드이다.
다른 수와 달리 1 더하는 것은 i++로 더 줄여쓸 수 있다.
위 세가지는 세미콜론(;) 으로 구분한다.
해당 코드는 i가 0일 때 부터 1씩 증가시켜가면서 10일 때까지 반복하므로, 총 11번 중괄호 안 코드를 반복한다.


while 반복문도 있는데 for문에서 조건만 남은 반복문으로 보면 된다.

while 문 기본 구조

 

무한 루프

조건이 없거나 제 역할을 못해서 무한정 반복되는 반복문을 무한 루프라고 한다.
탈출 조건이 없는 진짜 무한 루프에 빠지면 프로그램이 진행이 안되고 결국 원하는 기능을 하지 않는다.


현재 조건 칸이 비어있는데 이러면 계속 참으로 인식하여 계속 반복문이 실행된다.

반복문 내에서 continue 코드를 만나면 아래의 코드는 실행하지 않고 바로 조건으로 다시 돌아간다.

반복문 내에서 break 코드를 만나면 바로 반복문을 벗어난다.
무한 루프를 일부러 설정하였다면 반드시 있어야 한다.




참고로 위 코드는 탈출 조건은 있지만 a를 증가시키는 코드가 없으므로 탈출 조건에 도달할 수 없다. 즉, 잘못된 무한 루프이다.

코드를 정해진 수만큼 반복하는 것이 아닌, 어떤 신호를 감지할 때까지 반복하고 싶다면 무한루프를 조건문 안의 break와 함께 쓴다.

 

 

 

 

아래에서 설명할 RGB LED 조작 코드

 

변수 선언시 앞에 const를 써넣으면 그 변수는 코드 내에서 값 변경이 불가능하게 된다.
값이 바뀔 필요가 없는 변수를 선언할 때 사용한다.

RGB LED의 빨간 LED에 해당하는 단자가 9번, 초록색은 10번, 파란색은 11번 핀에 연결되어 있다고 가정
setup함수에서 핀모드 설정
빨간 LED의 전압이 조금씩 늘어나게, 즉 점점 밝아지게
초록 LED가 처음엔 켜있다가 점점 밝기가 낮아지게
random은 입력 값 두 숫자 사이의 랜덤한 정수를 출력하는 함수
따라서 해당 for문은 LED들을 랜덤한 색상으로 바꾸면서 계속 켜지게 하는 기능을 한다.
100ms 를 딜레이하면서 51번 반복하므로 약 5.1초간 반복된다.

 

댓글