Skip to content

Instantly share code, notes, and snippets.

@idriszmy
Created April 18, 2019 04:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save idriszmy/6c01585320123f0709fd974e9bcbcf59 to your computer and use it in GitHub Desktop.
Save idriszmy/6c01585320123f0709fd974e9bcbcf59 to your computer and use it in GitHub Desktop.
Menghasilkan nada melodi pada pembaz piezo di papan Maker UNO.
/*
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