Menghasilkan nada melodi pada pembaz piezo di papan Maker UNO.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Fungsi kod: Menghasilkan nada melodi pada pembaz piezo di | |
papan Maker UNO. | |
Penulis: Idris Zainal Abidin | |
Blog: https://idrisz.my | |
Kemaskini: 18 April 2019 | |
*/ | |
#define BUTTON 2 // Butang tekan bersambung dengan pin 2 | |
#define BUZZER 8 // Pembaz bersambung dengan pin 8 | |
#define NOTE_C5 523 | |
#define NOTE_G4 392 | |
#define NOTE_A4 440 | |
#define NOTE_B4 494 | |
// Susunan nada melodi | |
int melody[] = { | |
NOTE_C5, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, 0, NOTE_B4, NOTE_C5 | |
}; | |
// Jenis nota untuk setiap nada melodi | |
// Contoh: 2 = separuh, 4 = suku | |
int noteDurations[] = { | |
4, 8, 8, 4, 4, 4, 4, 4 | |
}; | |
void setup() | |
{ | |
pinMode(BUTTON, INPUT_PULLUP); // Tetapkan butang sebagai masukan pullup | |
pinMode(BUZZER, OUTPUT); // Tetapkan pembaz sebagai keluaran | |
} | |
void loop() | |
{ | |
// Tunggu sehingga butang di Maker UNO ditekan | |
while (digitalRead(BUTTON) == HIGH); | |
// Mula memainkan melodi | |
for (int thisNote = 0; thisNote < 8; thisNote++) { | |
// Untuk kira tempoh nada, bahagikan 1 saat dengan jenis nota | |
// Contoh: nota suku = 1000 / 4 | |
int noteDuration = 1000 / noteDurations[thisNote]; | |
tone(BUZZER, melody[thisNote], noteDuration); // Hasilkan nada | |
// Untuk membezakan nada, tetapkan masa minimum antara nada | |
// Setakat ini tempoh nada + 30% menghasilkan melodi yang baik | |
int pauseBetweenNotes = noteDuration * 1.30; | |
delay(pauseBetweenNotes); | |
noTone(BUZZER); // Hentikan penghasilan nada | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment