◆ 작은별 연주
--->>> little_star.py <<<-------------------------------
#-*- coding:utf-8 -*-
import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
buzzer = 17
sw = 1
scale = [ 261, 294, 329, 349, 392, 440, 493, 523 ]
#도 레 미 파 솔 라 시 도
GPIO.setup(buzzer, GPIO.OUT) # 출력 설정
#GPIO.setup(sw, GPIO.IN) # 입력 설정
p = GPIO.PWM(buzzer, 100)
list = [0,0,4,4,5,5,4,3,3,2,2,1,1,0] #작은별 노래
try:
while 1: # 무한 반복
# if GPIO.input(sw) == 1: #스위치가 눌리면
p.start(100) # pwm 시작 100
p.ChangeDutyCycle(10) # dutycycle 변경 90
for i in range(len(list)): #len() => 길이 추출
p.ChangeFrequency(scale[list[i]]) #주파수 변경
if (i+1)%7 == 0: # 7번째 음 박자 변경
time.sleep(1)
else :
time.sleep(0.5)
p.stop() #pwm 종료
except KeyboardInterrupt: #ctrl+c->종료
GPIO.cleanup()
◆ 반짝 반짝 작은별 연주하기
--->>> twinkle_little-star.py <<<------------------------------------------
import RPi.GPIO as GPIO
import time
buzzer = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer, GPIO.OUT)
pwm = GPIO.PWM(buzzer, 1.0) # 초기 주파수를 1Hz로 설정
pwm.start(90.0) # 듀티비를 90%로 높여 설정함(음 구분이 더 잘되고 조금 더 부드럽게 들림)
# == 동요 : 반짝 반짝 작은별 계이름 ==
#도도솔솔라라솔파파미미레레도 솔솔파파미미레 솔솔파파미미레 도도솔솔라라솔파파미미레레도
# 4옥타브:도(1)/ 레(2)/ 미(3)/ 파(4)/ 솔(5)/ 라(6) / 시(7)
scale = [ 262 , 294 , 330 , 349 , 392 , 440 , 494 ]
twinkle = [ 1, 1, 5, 5, 6, 6, 5, 4, 4, 3, 3, 2, 2, 1, \
5, 5, 4, 4, 3, 3, 2, 5, 5, 4, 4, 3, 3, 2, \
1, 1, 5, 5, 6, 6, 5, 4, 4, 3, 3, 2, 2, 1 ]
try :
for i in range(0,42):
pwm.ChangeFrequency(scale[twinkle[i]])
if i==6 or i==13 or i==20 or i==27 or i==34 or i==41:
time.sleep(1.0) # 2분음표 부분을 모두 1초로 출력
else :
time.sleep(0.5) # 기타 4분음표는 모두 0.5초로 출력함
pwm.stop()
finally :
GPIO.cleanup()
◆ 학교종 연주하기
--->>> school-bell.py <<<------------------------------------------------
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
hz={ # 각 음을 딕셔너리형태로 저장
"C":261.6256,
"D":293.6648,
"E":329.6276,
"F":349.2282,
"G":391.9954,
"A":440.0000,
"B":493.8833,
"C_1":523.2511
} # 학교종 멜로디를 멜로디로 표현
school_song=("G","G","A","A","G","G","E","G","G",
"E","E","D","G","G","A","A","G","G",
"E","G","E","D","E","C")
piezo_buzzer = 13 # piezo 핀 번호
GPIO.setup(piezo_buzzer, GPIO.OUT) # piezo 출력으로 설정
p = GPIO.PWM(piezo_buzzer,1.1) # PWM객체 생성 및 1.1Hz 설정
p.start(50) # dutycycle 50%
# piezo는 frequency를 수정함
for freq in school_song: # 각음계에 해당하는 문자를 freq에 담아 반복
p.ChangeFrequency(hz[freq]) # hz딕셔너리에 키값으로 사용하여 주파수반환받아서 해당값으로 변
time.sleep(0.3)
p.stop
GPIO.cleanup()