الكود البرمجى
// butt_c --> pin 2
#define BUTT_C 2
// butt_d --> pin 3
#define BUTT_D 3
// butt_e --> pin 4
#define BUTT_E 4
// butt_f --> pin 5
#define BUTT_F 5
// butt_g --> pin 6
#define BUTT_G 6
// butt_a --> pin 7
#define BUTT_A 7
// butt_b --> pin 8
#define BUTT_B 8
// butt_h --> pin 9
#define BUTT_H 9
// speaker --> pin 13
#define SPEAKER 13
// variables to store the state of the buttons
int C = 0, D = 0, E = 0, F = 0, G = 0, A = 0, B = 0, H = 0;
//NOTES 'c' , 'd', 'e', 'f', 'g', 'a', 'b', 'h'
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; //freq
int Cur_tone = 0;
void setup()
{
pinMode(BUTT_C, INPUT);
pinMode(BUTT_D, INPUT);
pinMode(BUTT_E, INPUT);
pinMode(BUTT_F, INPUT);
pinMode(BUTT_G, INPUT);
pinMode(BUTT_A, INPUT);
pinMode(BUTT_B, INPUT);
pinMode(BUTT_H, INPUT);
pinMode(SPEAKER, OUTPUT);
}
void loop()
{
C = digitalRead(BUTT_C);
D = digitalRead(BUTT_D);
E = digitalRead(BUTT_E);
F = digitalRead(BUTT_F);
G = digitalRead(BUTT_G);
A = digitalRead(BUTT_A);
B = digitalRead(BUTT_B);
H = digitalRead(BUTT_H);
// check if any button is being pressed
if((C == HIGH) || (E == HIGH) || (G == HIGH) || (D == HIGH) ||
(F == HIGH) || (A == HIGH) || (B == HIGH) || (H == HIGH) )
{
// if a button is being pressed, check which one
if (C == HIGH){
Cur_tone = tones[0];
}
if (E == HIGH){
Cur_tone = tones[1];
}
if (G == HIGH){
Cur_tone = tones[2];
}
if (D == HIGH){
Cur_tone = tones[3];
}
if (F == HIGH){
Cur_tone = tones[4];
}
if (A == HIGH){
Cur_tone = tones[5];
}
if (B == HIGH){
Cur_tone = tones[6];
}
if (H == HIGH){
Cur_tone = tones[7];
}
digitalWrite(SPEAKER, HIGH);
delayMicroseconds(Cur_tone);
digitalWrite(SPEAKER, LOW);
delayMicroseconds(Cur_tone);
}
else{ //switch off the speaker if no button is being pressed
digitalWrite(SPEAKER, LOW);
}
}
شرح الكود:
في البداية نقوم بتعريف متغيرات لإستخدامها في تسجيل حالة الـ Push Buttons . ونقوم بالاعلان عن مصفوفة tones[] ، والتي سيتم تسجيل قيم الترددات عليها لإستخدامها في توليد النغمات المختلفة عن طريق الـ Buzzer .
في الدالة setup() قمنا بتفعيل المنافذ الموصله مع المفاتيح كمدخل، والمنفذ الموصل مع الـ Buzzer كمخرج.
// variables to store the state of the buttons
int C = 0, D = 0, E = 0, F = 0, G = 0, A = 0, B = 0, H = 0;
//NOTES 'c' , 'd', 'e', 'f', 'g', 'a', 'b', 'h'
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; //freq
int Cur_tone = 0;
void setup()
{
pinMode(BUTT_C, INPUT);
pinMode(BUTT_D, INPUT);
pinMode(BUTT_E, INPUT);
pinMode(BUTT_F, INPUT);
pinMode(BUTT_G, INPUT);
pinMode(BUTT_A, INPUT);
pinMode(BUTT_B, INPUT);
pinMode(BUTT_H, INPUT);
pinMode(SPEAKER, OUTPUT);
}
ثم نقوم بقراءة حالة الـ Push Buttons وتخزينها، وتخزينها في المتغيرات التي تم الاعلان عنها سابقا :
void loop()
{
C = digitalRead(BUTT_C);
D = digitalRead(BUTT_D);
E = digitalRead(BUTT_E);
F = digitalRead(BUTT_F);
G = digitalRead(BUTT_G);
A = digitalRead(BUTT_A);
B = digitalRead(BUTT_B);
H = digitalRead(BUTT_H);
نقوم بعملية التحقق من المفتاح الذي تم الضغط عليه. بعد ذلك يتم تسجيل قيمة معينة في متغير Cur_tone حسب المفتاح المضغوط عليه. ثم نقوم بتشغيل الـ Buzzer بتأخير زمني يعتمد على قيمة المتغير Cur_tone :
// check if any button is being pressed
if((C == HIGH) || (E == HIGH) || (G == HIGH) || (D == HIGH) ||
(F == HIGH) || (A == HIGH) || (B == HIGH) || (H == HIGH) )
{
// if a button is being pressed, check which one
if (C == HIGH){
Cur_tone = tones[0];
}
if (E == HIGH){
Cur_tone = tones[1];
}
if (G == HIGH){
Cur_tone = tones[2];
}
if (D == HIGH){
Cur_tone = tones[3];
}
if (F == HIGH){
Cur_tone = tones[4];
}
if (A == HIGH){
Cur_tone = tones[5];
}
if (B == HIGH){
Cur_tone = tones[6];
}
if (H == HIGH){
Cur_tone = tones[7];
}
digitalWrite(SPEAKER, HIGH);
delayMicroseconds(Cur_tone);
digitalWrite(SPEAKER, LOW);
delayMicroseconds(Cur_tone);
}
else{ //switch off the speaker if no button is being pressed
digitalWrite(SPEAKER, LOW);
}
استخدم مفاتيح أخرى لإصدار نغمات مختلفة .

