Created
April 18, 2019 04:32
-
-
Save idriszmy/11010ee118f2bac8743ec1a5a3d077d7 to your computer and use it in GitHub Desktop.
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_G3 196 | |
#define NOTE_C4 262 | |
#define NOTE_D4 294 | |
#define NOTE_E4 330 | |
#define NOTE_F4 349 | |
#define NOTE_G4 392 | |
#define TOTAL_NOTES 68 | |
// Susunan nada melodi | |
int melody[] = { | |
NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, | |
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, 0, NOTE_D4, NOTE_D4, 0, | |
NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, | |
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_D4, 0, NOTE_C4, NOTE_C4, 0, | |
NOTE_D4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_E4, | |
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_G3, 0, | |
NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_D4, | |
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_D4, 0, NOTE_C4, NOTE_C4, | |
}; | |
// Jenis nota untuk setiap nada melodi | |
// Contoh: 2 = separuh, 4 = suku | |
int noteDurations[] = { | |
4, 4, 4, 4, 4, 4, 4, 4, | |
4, 4, 4, 4, 3, 16, 8, 4, 4, | |
4, 4, 4, 4, 4, 4, 4, 4, | |
4, 4, 4, 4, 3, 16, 8, 4, 4, | |
4, 4, 4, 4, 4, 8, 8, 4, | |
4, 4, 8, 8, 4, 4, 4, 4, 4, 4, | |
4, 4, 4, 4, 4, 4, 4, 4, | |
4, 4, 4, 4, 3, 16, 8, 2 | |
}; | |
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 < TOTAL_NOTES; 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