الكود البرمجى
// 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); }
استخدم مفاتيح أخرى لإصدار نغمات مختلفة .