عمل بيانو بسيط باستخدام اردوينو

مبتدئ

الكود البرمجى

// 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);
	}

استخدم مفاتيح أخرى لإصدار نغمات مختلفة .


العودة للصفحة الأولى