경찰차 지분위에 달린 경관등을 만든다. 스위치를 추가하여 스위치로 경광등을 켜고 끌 수 있게 동작 시킨다.


<준비물>
- 브레드보드 : 1개
- LED 파랑 : 1개
- LED 빨강 : 1개
- 220옴(빨빨갈) 저항 : 2개
- 스위치 : 1개
- 암/수 점퍼케이블 : 5개
- 수/수 점퍼케이블 : 1개


<회로도>



<코드>
from gpiozero import Button
from gpiozero import LED
from time import sleep

ledRed = LED(23)
ledBlue = LED(24)
swPin = Button(21)

swState = 0

try:
    while 1:
        swValue = swPin.is_pressed
        if swValue == True:
            if swState == 0:
                swState = 1
            else:
                swState = 0
            sleep(0.5)
            
        if swState == 1:
            ledRed.on()
            ledBlue.off()
            sleep(0.1)
            ledRed.off()
            ledBlue.on()
            sleep(0.1)
        else:
            ledRed.off()
            ledBlue.off()
    
except KeyboardInterrupt:
    pass

ledRed.off()
ledBlue.off()


<코드설명>
이 코드는 스위치(버튼)를 사용하여 LED 두 개(빨간색과 파란색)를 제어하는 프로그램이다. 스위치가 눌리면 두 개의 LED가 교대로 깜빡이고, 스위치가 눌리지 않으면 LED가 꺼진다. 아래는 코드에 대한 자세한 설명이다.

1. 모듈 임포트
from gpiozero import Button
from gpiozero import LED
from time import sleep

gpiozero 라이브러리에서 Button(스위치 핀 제어)과 LED(LED 제어)를 임포트한다.
time.sleep() 함수를 사용하여 특정 시간 동안 기다릴 수 있도록 time 모듈의 sleep 함수를 불러온다.

2. LED 및 버튼 핀 설정
ledRed = LED(23)
ledBlue = LED(24)
swPin = Button(21)

23번 핀에 빨간색 LED, 24번 핀에 파란색 LED, 21번 핀에 스위치(Button)를 설정한다.

3. 스위치 상태 변수 초기화
swState = 0

swState는 스위치 상태를 나타내는 변수이다. 처음에는 0으로 설정되어 LED가 꺼진 상태로 시작한다.

4. 메인 루프
try:
    while 1:
        swValue = swPin.is_pressed
        if swValue == True:
            if swState == 0:
                swState = 1
            else:
                swState = 0
            sleep(0.5)

이 부분에서는 무한 루프를 사용하여 계속해서 버튼 입력과 LED 상태를 제어한다.
swPin.is_pressed를 통해 버튼이 눌렸는지 확인하고, 눌렸다면 swState가 0일 때는 1로 바꾸고, 1일 때는 0으로 바꿔준다. 이 과정에서 버튼이 눌릴 때마다 상태가 토글된다.
sleep(0.5)는 버튼이 눌렸을 때 잠깐 기다리게 해서, 버튼이 너무 빨리 연속으로 눌리는 것을 방지합니다(디바운싱 효과).

5. LED 깜빡임 및 상태 제어
if swState == 1:
            ledRed.on()
            ledBlue.off()
            sleep(0.1)
            ledRed.off()
            ledBlue.on()
            sleep(0.1)
        else:
            ledRed.off()
            ledBlue.off()

swState가 1일 경우, 빨간색 LED를 켜고, 파란색 LED를 끈다. 그런 다음, 잠깐 대기(sleep(0.1)) 후에 빨간색 LED를 끄고 파란색 LED를 켜는 과정을 반복한다.
이로 인해 두 LED가 교대로 깜빡이는 효과를 준다.
swState가 0일 경우, 두 LED 모두 꺼집니다.

6. 종료 시 LED 끄기
except KeyboardInterrupt:
    pass

ledRed.off()
ledBlue.off()

KeyboardInterrupt 예외 처리는 Ctrl + C로 프로그램을 종료할 때 사용된다.
프로그램이 종료되기 전에 LED가 켜져 있을 수 있으므로, 두 LED 모두 꺼지게 처리한다.


<요약>
이 프로그램은 스위치를 눌렀을 때 두 개의 LED가 교대로 깜빡이는 동작을 수행하며, 스위치를 다시 누르면 LED가 꺼진다.


<시연영상>

+ Recent posts