音调有7个音调,分别是哆来咪发索莱西;如果用蜂鸣器来发出这七个音调就要分别设置这七个音调对应频率。
电子琴实现需要物品有,arduino开发板一个,按键7个,蜂鸣器1个,杜邦线若干
重点讲一下按键原理
按键开关:也称为轻触开关,是一种电子开关,常用于接通和断开电路。 原理:按键开关一般有4个脚(如左图),其中1和4,内部是连通的,2和3也是连通的,而1、4与2、3之间平时是断开的,只有当按钮按下时才接通。由于其内部金属弹片作用力的影响,在没有外力按压时,1、4与2、3平时处于断开状态。
使用arduino uno r3开发板实现电子琴功能具体代码如下
// 定义一组volatile布尔型变量,用于存储各输入端口的状态
volatile bool anjian1; // 来自Pin 2的信号
volatile bool anjian2; // 来自Pin 3的信号
volatile bool anjian3; // 来自Pin 4的信号
volatile bool anjian4; // 来自Pin 5的信号
volatile bool anjian5; // 来自Pin 6的信号
volatile bool anjian6; // 来自Pin 7的信号
volatile bool anjian7; // 来自Pin 8的信号
// Arduino程序的初始化函数setup(),设置环境并初始化IO口
void setup() {
// 将所有音阶开关初始置为低电平(未按下)
anjian1 = LOW;
anjian2 = LOW;
anjian3 = LOW;
anjian4 = LOW;
anjian5 = LOW;
anjian6 = LOW;
anjian7 = LOW;
// 设置相应的数字输入端口为读取模式
pinMode(2, INPUT); // Pin 2作为输入
pinMode(3, INPUT); // Pin 3作为输入
pinMode(4, INPUT); // Pin 4作为输入
pinMode(5, INPUT); // Pin 5作为输入
pinMode(6, INPUT); // Pin 6作为输入
pinMode(7, INPUT); // Pin 7作为输入
pinMode(8, INPUT); // Pin 8作为输入
// 设置数字输出端口9用于播放音调
pinMode(9, OUTPUT); // Pin 9作为音频输出
}
// 主循环函数loop(),持续监听输入并根据信号发送对应音调
void loop() {
// 更新各个输入状态
anjian1 = digitalRead(2); // 读取Pin 2的状态
anjian2 = digitalRead(3); // 读取Pin 3的状态
anjian3 = digitalRead(4); // 读取Pin 4的状态
anjian4 = digitalRead(5); // 读取Pin 5的状态
anjian5 = digitalRead(6); // 读取Pin 6的状态
anjian6 = digitalRead(7); // 读取Pin 7的状态
anjian7 = digitalRead(8); // 读取Pin 8的状态
// 根据输入判断并播放对应的音调
if (anjian1 == HIGH) { // 如果Pin 2按下,发出C4音调
tone(9, 262);
} else if (anjian2 == HIGH) { // 如果Pin 3按下,发出D4音调
tone(9, 294);
} else if (anjian3 == HIGH) { // 如果Pin 4按下,发出E4音调
tone(9, 330);
} else if (anjian4 == HIGH) { // Pin 5按下对应F4音调
tone(9, 350);
} else if (anjian5 == HIGH) { // Pin 6按下对应G4音调
tone(9, 393);
} else if (anjian6 == HIGH) { // Pin 7按下对应A4音调
tone(9, 441);
} else if (anjian7 == HIGH) { // Pin 8按下对应B4音调
tone(9, 495);
} else { // 所有按键未按下,停止播放音调
noTone(9);
}
}