目录
一、 实验目的
通过Arduino实现电子琴
二、频率与音符对应关系
三、蜂鸣器测试
四、测试代码(图形化编程)
五、用代码(文本)编程实现1,2,3,4,5,6,7
// C++ code
//
void setup()
{
pinMode(2, OUTPUT);
}
void loop()
{
tone(2, 262, 1000); // play tone 262 (A#21 = 61101017 Hz)
delay(1000); // Wait for 1000 millisecond(s)
noTone(2);
delay(1000); // Wait for 1000 millisecond(s)
tone(2, 293, 1000); // play tone 294 (F#24 = 387967272 Hz)
delay(1000); // Wait for 1000 millisecond(s)
noTone(2);
delay(1000); // Wait for 1000 millisecond(s)
tone(2, 330, 1000); // play tone 262 (A#21 = 61101017 Hz)
delay(1000); // Wait for 1000 millisecond(s)
noTone(2);
delay(1000); // Wait for 1000 millisecond(s)
tone(2, 340, 1000); // play tone 294 (F#24 = 387967272 Hz)
delay(1000); // Wait for 1000 millisecond(s)
noTone(2);
delay(1000); // Wait for 1000 millisecond(s)
tone(2, 440, 1000); // play tone 262 (A#21 = 61101017 Hz)
delay(1000); // Wait for 1000 millisecond(s)
noTone(2);
delay(1000); // Wait for 1000 millisecond(s)
tone(2, 490, 1000); // play tone 294 (F#24 = 387967272 Hz)
delay(1000); // Wait for 1000 millisecond(s)
noTone(2);
delay(1000); // Wait for 1000 millisecond(s)
}
六、 测试演示
123456
七、采用键盘演奏电子琴
八、代码
// C++ code
//
int key;
int yindiao[17] ={0,220,247,262,294,330,349,392,440,494,523,587,659,698,784,880,988};
void setup()
{
pinMode(10, OUTPUT); //蜂鸣器连接至1脚
for(int i=2;i<=5;i++)
{
pinMode(i, INPUT_PULLUP);
}
for(int i=8;i<=9;i++)
{
pinMode(i, OUTPUT);
}
Serial.begin(9600);
}
void loop()
{
key=0; //什么都没有按下
for(int i=6;i<=9;i++)
{
for(int j=6;j<=9;j++)
{
digitalWrite(j,HIGH);
}
digitalWrite(i,LOW);
if(i==9)
{
if(!digitalRead(2))
{
key=4;
}else if(!digitalRead(3))
{
key=3;
}
else if(!digitalRead(4))
{
key=2;
}
else if(!digitalRead(5))
{
key=1;
}
}
if(i==8)
{
if(!digitalRead(2))
{
key=8;
}else if(!digitalRead(3))
{
key=7;
}
else if(!digitalRead(4))
{
key=6;
}
else if(!digitalRead(5))
{
key=5;
}
}
if(i==7)
{
if(!digitalRead(2))
{
key=12;
}else if(!digitalRead(3))
{
key=11;
}
else if(!digitalRead(4))
{
key=10;
}
else if(!digitalRead(5))
{
key=9;
}
}
if(i==6)
{
if(!digitalRead(2))
{
key=16;
}else if(!digitalRead(3))
{
key=15;
}
else if(!digitalRead(4))
{
key=14;
}
else if(!digitalRead(5))
{
key=13;
}
}
}
Serial.println(key);
if(key==0)
{
noTone(10); //如何key=0,则关闭声音
}else
{
tone(10,yindiao[key]);
}
/* switch(key)
{
case 1: tone(10,262,1000);
// delay(1000);
noTone(1);
delay(1000);
break;
case 2: tone(10,293,1000);
// delay(1000);
noTone(1);
delay(1000);
break;
case 3: tone(10,330,1000);
// delay(1000);
noTone(1);
delay(1000);
break;
case 4: tone(10,340,1000);
// delay(1000);
noTone(1);
delay(1000);
break;
case 5: tone(10,342,1000);
// delay(1000);
noTone(1);
delay(1000);
break;
case 6: tone(10,440,1000);
// delay(1000);
noTone(1);
delay(1000);
break;
case 7: tone(10,494,1000);
// delay(1000);
noTone(1);
delay(1000);
break;
}*/
}
九、实验测试
电子琴