import machine
import time
# Konfigurasi Pin Buzzer
# (Ganti angka 15 sesuai dengan pin GPIO yang kamu gunakan)
buzzer_pin = machine.Pin(15)
buzzer = machine.PWM(buzzer_pin)
# Kamus Frekuensi Nada (Tangga nada C Major)
NOTES = {
'C4': 262, 'D4': 294, 'E4': 330, 'F4': 349,
'G4': 392, 'A4': 440, 'B4': 494, 'C5': 523,
'REST': 0
}
# Pengaturan Tempo: Andante (100 BPM)
BPM = 100
BEAT_DURATION = 60 / BPM
# Melodi Balonku beserta liriknya
# Format: (Nada, Jumlah Ketukan, "Suku Kata Lirik")
melody = [
# Pickup
('E4', 0.5, "Ba"), ('F4', 0.5, "-lon"),
# Bar 1
('G4', 1.5, "-ku "), ('C5', 0.5, "a"), ('G4', 1.0, "-da "), ('E4', 1.0, "li"),
# Bar 2
('G4', 2.0, "-ma\n"), ('REST', 1.0, ""), ('D4', 0.5, "ru"), ('E4', 0.5, "-pa "),
# Bar 3
('F4', 1.0, "ru"), ('D4', 1.0, "-pa "), ('G4', 1.0, "war"), ('F4', 1.0, "-na"),
# Bar 4
('E4', 2.0, "-nya\n"), ('REST', 1.0, ""), ('C4', 0.5, "hi"), ('C4', 0.5, "-jau "),
# Bar 5
('A4', 1.0, "ku"), ('A4', 1.0, "-ning "), ('B4', 1.0, "ke"), ('C5', 1.0, "-la"),
# Bar 6
('G4', 2.0, "-bu\n"), ('REST', 1.0, ""), ('E4', 0.5, "me"), ('F4', 0.5, "-rah "),
# Bar 7
('G4', 1.0, "mu"), ('F4', 1.0, "-da "), ('E4', 1.0, "dan "), ('D4', 1.0, "bi"),
# Bar 8
('C4', 2.0, "-ru\n"), ('REST', 1.0, ""), ('E4', 0.5, "me"), ('F4', 0.5, "-le"),
# Bar 9
('G4', 1.5, "-tus "), ('C5', 0.5, "ba"), ('G4', 1.0, "-lon "), ('E4', 1.0, "hi"),
# Bar 10
('G4', 2.0, "-jau "), ('REST', 1.0, "(DOR!)\n"), ('D4', 0.5, "ha"), ('E4', 0.5, "-ti"),
# Bar 11
('F4', 1.0, "-ku "), ('D4', 1.0, "sang"), ('G4', 1.0, "-at "), ('F4', 1.0, "ka"),
# Bar 12
('C4', 2.0, "-cau\n")
]
def play_tone(note, duration_beats):
"""Fungsi untuk membunyikan satu nada dengan durasi tertentu."""
duration_sec = duration_beats * BEAT_DURATION
if note == 'REST' or NOTES[note] == 0:
buzzer.duty_u16(0)
time.sleep(duration_sec)
else:
buzzer.freq(NOTES[note])
buzzer.duty_u16(32768)
time.sleep(duration_sec * 0.9)
buzzer.duty_u16(0)
time.sleep(duration_sec * 0.1)
# Eksekusi Lagu dan Lirik
try:
print("=== Balonku Ada Lima ===")
for note, duration, lyric in melody:
# Cetak lirik tanpa pindah baris (kecuali jika ada \n di liriknya)
if lyric:
print(lyric, end='')
play_tone(note, duration)
print("\nSelesai!")
except KeyboardInterrupt:
print("\nDihentikan oleh pengguna.")
finally:
buzzer.duty_u16(0)Loading
pi-pico-w
pi-pico-w