from machine import I2C, Pin, PWM
from time import sleep
import i2c_lcd
#Inisialisasi LCD I2C
i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=400000)
addr = i2c.scan()[0] if i2c.scan() else 0x27
lcd = i2c_lcd.I2cLcd(i2c, addr, 2, 16)
#Inisialisasi Buzzer
buzzer = PWM(Pin(18))
buzzer.duty(512)
# Nada (Hz)
notes = {
'C': 261,
'D': 294,
'E': 329,
'F': 349,
'G': 392,
'A': 440,
'B': 494,
'c': 523, # C tinggi
' ': 0
}
# Lirik per baris
lines = [
"Twinkle twinkle little star",
"How I wonder what you are",
"Up above the world so high",
"Like a diamond in the sky",
"Twinkle twinkle little star",
"How I wonder what you are"
]
# Nada per baris
melody_lines = [
['C','C','G','G','A','A','G'],
['F','F','E','E','D','D','C'],
['G','G','F','F','E','E','D'],
['G','G','F','F','E','E','D'],
['C','C','G','G','A','A','G'],
['F','F','E','E','D','D','C']
]
# Beats per baris
beats_lines = [
[4,4,4,4,4,4,2],
[4,4,4,4,4,4,2],
[4,4,4,4,4,4,2],
[4,4,4,4,4,4,2],
[4,4,4,4,4,4,2],
[4,4,4,4,4,4,2]
]
def play_bar(line, melody, beats):
lcd.clear()
lcd.putstr(line) # tampilkan baris penuh lirik
for i, note in enumerate(melody):
freq = notes.get(note, 0)
dur = beats[i]
if freq > 0:
buzzer.freq(freq)
buzzer.duty(512)
else:
buzzer.duty(0)
sleep(0.4 * (4/dur))
buzzer.duty(0)
sleep(0.05) # jeda antar nada
sleep(1) # jeda antar baris lirik
# Main program
while True:
for i in range(len(lines)):
play_bar(lines[i], melody_lines[i], beats_lines[i])
lcd.clear()
lcd.putstr("Selesai :)")
sleep(3)