페이지

2025년 12월 15일 월요일

2.3.3. 3색 LED로 다양한 색깔 만들기

안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊

지난 시간에는 LED를 서서히 밝게 만들기 위해 코드를 여러 번 복사하고 붙여넣는 수고를 했었죠? 오늘은 그런 단순 반복 작업을 단 몇 줄로 끝내버리는 C언어의 강력한 마법, for 반복문에 대해 배워볼 거예요. for 반복문을 이용해 LED가 마치 숨을 쉬는 것처럼 부드럽게 밝아졌다가 어두워지는 '페이드(Fade)' 효과를 만들어 보겠습니다. 준비되셨나요? 그럼 시작해볼게요!

Slide 1: 04. for 반복문으로 LED 페이드 효과 만들기

LED Fade Effect

오늘 우리가 만들 작품은 바로 'LED 페이드(Fade) 효과'예요. LED 불빛이 서서히 밝아졌다가 스르륵 어두워지는, 아주 근사한 효과죠.

이전 같았으면 밝기를 1, 2, 3... 이렇게 올리기 위해 analogWrite() 함수를 수백 번 복사-붙여넣기 해야 했을 거예요. 생각만 해도 아찔하죠? 😱

하지만 이제 걱정 마세요! C언어의 for 반복문을 사용하면 "0부터 255까지 1씩 증가시키면서 이 작업을 반복해!"라고 컴퓨터에게 딱 한 번만 명령하면 된답니다. 수백 줄의 코드가 어떻게 단 몇 줄로 줄어드는지, 그 마법을 직접 확인해 보세요!

Slide 2: 회로 구성하기

Arduino Circuit Diagram

본격적인 코딩에 앞서, 먼저 하드웨어를 준비해야겠죠?

✅ 준비물

  • 아두이노 우노 보드
  • LED 1개
  • 220Ω 저항 1개
  • 브레드보드

✅ 회로 구성

이번 실습의 회로는 이전에 진행했던 'LED 서서히 밝게 하기'와 완전히 똑같아요. 아주 간단하답니다.

  1. LED의 긴 다리(+)를 저항과 연결하고, 저항의 다른 쪽 끝을 아두이노의 9번 핀(PWM)에 연결해주세요.
  2. LED의 짧은 다리(-)는 아두이노의 GND 핀에 연결합니다.

슬라이드에 보이는 그림처럼 연결하면 끝! 정말 간단하죠?

Slide 3: 마법의 주문, 페이드 효과 소스 코드

Fade Effect Source Code

자, 이제 오늘의 핵심인 소스 코드를 살펴볼 시간이에요. 이 짧은 코드가 어떻게 LED를 숨쉬게 만드는지 자세히 뜯어볼게요.

CODE 4.1 | LED 페이드 효과
01void setup() {
02  // 특별히 설정할 것이 없어요.
03}
04 
05void loop() {
06  // 1. 점점 밝아지는 구간 (0 -> 255)
07  for (int bright = 0; bright <= 255; bright++) {
08    analogWrite(9, bright);
09    delay(10);
10  }
11 
12  // 2. 점점 어두워지는 구간 (255 -> 0)
13  for (int bright = 255; bright >= 0; bright--) {
14    analogWrite(9, bright);
15    delay(10);
16  }
17}

💡 코드 분석

  • 밝아지기 (7~10줄):
    • for 반복문을 사용해서 bright라는 변수의 값을 0부터 255가 될 때까지 1씩 증가(bright++)시켜요.
    • 반복할 때마다 analogWrite(9, bright)를 실행해서 bright 값만큼 LED의 밝기를 조절해요.
    • delay(10)을 통해 0.01초씩 아주 잠깐 멈춰주면서 밝기 변화가 우리 눈에 부드럽게 보이도록 만들어요.
  • 어두워지기 (13~16줄):
    • 이번에는 반대로 bright 변수의 값을 255부터 0이 될 때까지 1씩 감소(bright--)시킵니다.
    • 마찬가지로 analogWrite()를 통해 줄어드는 bright 값만큼 LED를 점점 어둡게 만들죠.

이 두 개의 for 반복문이 loop() 함수 안에서 무한히 반복되면서, LED는 마치 살아 숨 쉬는 것처럼 계속해서 밝아졌다가 어두워지는 동작을 하게 됩니다.

Slide 4: 코드를 줄여주는 작은 거인, 증감 연산자(++, --)

Increment and Decrement Operators

방금 코드에서 bright++bright-- 같은 낯선 기호를 보셨을 거예요. 이게 바로 증감 연산자랍니다. 프로그래머들은 반복되는 작업을 싫어하는 만큼, 코드를 최대한 짧게 쓰는 걸 좋아해요. "변수 값을 1만큼 증가시켜라"는 말조차 길다고 느껴서 만든 게 바로 이 증감 연산자죠.

✅ 형식 및 사용 예시

  • 변수++ (증가 연산자): 변수의 값을 1 증가시킵니다.
    • bright++bright = bright + 1;과 똑같은 의미예요. "현재 밝기에서 1단계 밝게 해줘!" 라는 뜻이죠.
  • 변수-- (감소 연산자): 변수의 값을 1 감소시킵니다.
    • bright--bright = bright - 1;과 똑같은 의미예요. "현재 밝기에서 1단계 어둡게 해줘!" 라는 뜻이구요.

정말 간단하면서도 유용하죠? 앞으로 반복문에서 아주 자주 사용하게 될 친구들이니 꼭 기억해두세요!

Slide 5: 반복문의 설계도, for문의 구조 파헤치기

Structure of for loop

for 반복문은 '정해진 횟수만큼' 무언가를 반복하고 싶을 때 사용하는 대표적인 문법이에요. 마치 운동장을 몇 바퀴 돌지 미리 정해놓고 달리는 것과 같죠. for 반복문은 세 가지 중요한 약속으로 이루어져 있어요.

✅ for 반복문의 기본 형식

for ( ①초기식; ②조건식; ④증감식 ) { ③반복할 내용 }

  1. ① 초기식 (ex: int bright = 0): "시작점은 어디인가?"
    • 반복을 시작할 때 딱 한 번만 실행돼요. 여기서 반복 횟수를 세기 위한 카운터 변수를 만들고 시작 값을 정해줍니다.
  2. ② 조건식 (ex: bright <= 255): "언제까지 반복할 것인가?"
    • 반복할 때마다 이 조건을 검사해요. 조건이 참(True)이면 { } 안의 내용을 실행하고, 거짓(False)이면 반복을 멈추고 for문을 빠져나갑니다.
  3. ③ 반복할 내용 (ex: analogWrite(...)): "무엇을 반복할 것인가?"
    • { } (중괄호) 안에 있는 실제 명령어들이에요. 조건식이 참일 동안 계속해서 실행됩니다.
  4. ④ 증감식 (ex: bright++): "한 바퀴 돌 때마다 카운터를 어떻게 바꿀 것인가?"
    • { } 안의 내용을 한 번 실행한 뒤에 이 증감식이 실행돼요. 카운터 변수의 값을 1씩 늘리거나 줄여서 반복의 흐름을 제어합니다.

※ 중요! 초기식, 조건식, 증감식 사이는 반드시 세미콜론(;)으로 구분해야 한다는 점, 잊지 마세요!

Slide 6: 컴퓨터는 어떻게 for문을 실행할까? (feat. delay의 중요성)

How for loop works

for문의 구조를 알았으니, 이제 컴퓨터가 이 명령을 어떻게 처리하는지 순서대로 따라가 볼게요. 슬라이드의 순서도를 보면 이해가 더 쉬울 거예요.

✅ 처리 과정

  1. 초기화: for문을 처음 만나면 ①초기식을 딱 한 번 실행해요. (int bright = 0; 변수 생성!)
  2. 조건 확인: ②조건식을 검사합니다. (0 <= 255 인가? → 참!)
  3. 내용 실행: 조건이 참이므로 ③반복할 내용을 실행해요. (LED를 켠다!)
  4. 증감: 내용 실행이 끝나면 ④증감식을 실행해요. (bright가 1이 된다!)
  5. 반복: 다시 2번(조건 확인)으로 돌아가요. (1 <= 255 인가? → 참!)
    • 이 과정(2~4번)을 조건식이 거짓이 될 때까지 계속 반복합니다.
  6. 종료: bright가 256이 되는 순간, 256 <= 255 조건은 거짓(False)이 되므로 for문을 완전히 빠져나옵니다.

✅ 잠깐! delay(10)은 왜 필요할까요?

만약 코드에 delay(10);이 없다면 어떻게 될까요? 아두이노의 계산 속도는 엄청나게 빨라서, 0부터 255까지 숫자를 바꾸며 LED 밝기를 조절하는 과정을 0.001초도 안 되는 시간에 끝내버려요. 우리 눈에는 그저 LED가 '탁' 켜진 것처럼 보일 뿐, 밝기가 변하는 과정은 전혀 볼 수 없답니다.

delay(10);은 바로 "우리 눈이 쫓아갈 시간을 좀 줘!"라는 의미로, 각 단계마다 0.01초씩 잠깐 멈춰서 부드러운 밝기 변화를 만들어주는 아주 중요한 역할을 해요.

Slide 7: 응용하기! LED 10번 깜빡이기

Blinking LED 10 times

for 반복문의 원리를 이해했다면 이제 얼마든지 응용할 수 있어요. 예를 들어, LED를 정확히 10번만 깜빡이게 하고 싶다면 어떻게 해야 할까요?

CODE 7.1 | LED 10번 깜빡이기
01for (int i = 1; i <= 10; i++) {
02  digitalWrite(13, HIGH); // LED 켜기
03  delay(500);
04  digitalWrite(13, LOW);  // LED 끄기
05  delay(500);
06}
  • 동작:
    • i라는 변수가 1, 2, 3... 순서대로 10까지 커지는 동안 { } 안의 코드를 반복 실행해요. 즉, LED를 켜고 0.5초 기다리고, 끄고 0.5초 기다리는 동작을 총 10번 반복하게 됩니다.
  • 종료:
    • i가 11이 되는 순간, i <= 10 이라는 조건이 거짓이 되므로 반복을 멈춥니다.

어때요? for 반복문 하나면 정해진 횟수만큼의 동작은 정말 쉽게 만들 수 있겠죠?

오늘은 C언어의 강력한 무기, for 반복문에 대해 배워봤습니다. 지루한 복사-붙여넣기 작업을 단 몇 줄의 코드로 해결하고, LED가 숨 쉬는 듯한 멋진 페이드 효과까지 만들어 봤어요.

반복문의 구조(초기식, 조건식, 증감식)만 잘 이해하면 앞으로 훨씬 더 복잡하고 재미있는 프로젝트들을 만들 수 있을 거예요. 오늘 배운 코드를 직접 입력해보고, delay() 안의 숫자를 바꿔보면서 속도를 조절하는 등 다양하게 실험해보세요. 코딩은 직접 해보는 만큼 실력이 는답니다!

궁금한 점이 있다면 언제든 댓글로 질문해주세요. 그럼 다음 시간에 더 재미있는 주제로 만나요! 👋

이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초]에 수록된 내용입니다.

댓글 없음:

댓글 쓰기