
Video
Skema rangkaian

Kode sumber
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Mengatur Frekuensi Buzzer
4// ─────────────────────────────────────────
5// Empat tombol mengendalikan buzzer: Nyala, Mati, Frekuensi + dan
6// Frekuensi -. Menekan Nyala membuat buzzer berbunyi pada frekuensi
7// sekarang. Tombol + dan - mengubahnya 50 Hz per tekanan (mulai dari 300
8// Hz); frekuensi tetap dalam 50-5000 Hz.
9//
10// Pin:
11// D8 -> Buzzer + (kaki lainnya ke GND)
12// D7 -> Tombol nyala
13// D6 -> Tombol mati
14// D5 -> Tombol frekuensi +
15// D4 -> Tombol frekuensi -
16// Kaki lainnya ke 5V, pin ke GND lewat 220 ohm
17
18int buzzerPin = 8; // Pin output buzzer
19int btnOn = 7; // Tombol nyala
20int btnOff = 6; // Tombol mati
21int btnIncrease = 5; // Tombol frekuensi +
22int btnDecrease = 4; // Tombol frekuensi -
23int frequency = 300; // Frekuensi awal (Hz)
24int state = 0; // 1 = 1 = suara nyala, 0 = mati
25
26void setup() {
27 // Tombol sebagai input, dengan pull-down eksternal
28 pinMode(btnOn, INPUT);
29 pinMode(btnOff, INPUT);
30 pinMode(btnIncrease, INPUT);
31 pinMode(btnDecrease, INPUT);
32}
33
34void loop() {
35 if (digitalRead(btnOn)) { // Nyala: mulai suara
36 state = 1;
37 }
38
39 if (digitalRead(btnOff)) { // Mati: hentikan suara
40 state = 0;
41 }
42
43 if (digitalRead(btnIncrease)) { // Naikkan frekuensi 50 Hz
44 frequency = frequency + 50;
45 delay(100); // Naik pelan selama ditahan
46 }
47
48 if (digitalRead(btnDecrease)) { // Turunkan frekuensi 50 Hz
49 frequency = frequency - 50;
50 delay(100);
51 }
52
53 frequency = constrain(frequency, 50, 5000); // Jaga dalam 50-5000 Hz
54
55 // Bunyikan atau diamkan buzzer sesuai status
56 if (state == 1) {
57 tone(buzzerPin, frequency);
58 } else {
59 noTone(buzzerPin);
60 }
61}
62
FAQ
Kenapa resistor 220 Ω dipakai untuk tombol?
Kode ini membaca tombol dalam mode INPUT dengan resistor pull-down eksternal. Setiap resistor menyambungkan input yang bersangkutan ke GND agar terbaca LOW ketika tombol dilepas. Jika resistor 220 Ω yang tercantum dipakai untuk tujuan ini di rangkaian bertegangan 5 V, sekitar 23 mA mengalir melewatinya ketika tombol ditekan; memakai 10 kΩ menurunkan arus ini menjadi sekitar 0,5 mA. Jika nilai resistornya diubah, daftar komponen juga harus diperbarui.
Di rentang berapa frekuensi sebaiknya diatur?
Telinga manusia bisa mendengar frekuensi dari sekitar 20 Hz sampai 20 kHz, tetapi buzzer kecil menghasilkan suara terbaik di rentang 500–5.000 Hz. Mengatur langkah naik/turun 50–100 Hz membuat perubahannya terdengar.
Ketika aku menahan tombol, frekuensinya berubah cepat sekali, bagaimana memperlambatnya?
Jika frekuensi diubah di setiap siklus, menahan tombol akan membuat frekuensi naik dengan sangat cepat. Ubah sekali per tekanan (deteksi tepi) atau tambahkan jeda singkat setelah setiap perubahan.
Bagaimana mencegah frekuensi keluar dari batas?
Kodenya sudah melakukannya: baris `frequency = constrain(frequency, 50, 5000);` menjaga nilainya di antara 50 dan 5000 Hz. Untuk mengubah rentangnya, ubah kedua angka ini; misalnya, mengatur batas bawah ke 100 menjauhkannya dari suara yang sangat rendah dan berdengung.
