功能说明
按下开关蜂鸣器演奏音乐,并在数码管显示音符。
线路
需要的元件:
- 蜂鸣器
- LED数码管
- 开关
- 电阻8个
- 面包板
- 导线若干
按下图连接
其中,数码管中间的两引脚连接到5V电源,其它引脚连接到2到9号针口。蜂鸣器连到11号针口,开关连到12号针口。
程序
// 开关的针口
#define SWITCH_PIN 12
// 蜂鸣器的针口
#define BEEP_PIN 11
void setup() {
for (byte pin = 2; pin <= 9; pin++) {
pinMode(pin, OUTPUT);
}
pinMode(SWITCH_PIN, INPUT);
digitalWrite(SWITCH_PIN, HIGH);
}
void loop() {
// 音调,1-7号元素对应音符 1 2 3 4 5 6 7 的音调,0元素不使用
int tones[] = {0, 2093, 2349, 2637, 2794, 3136, 3520, 3951};
// 小星星前两句的音符,0表示停顿
byte music[] = {1, 1, 5, 5, 6, 6, 5, 0, 4, 4, 3, 3, 2, 2, 1, 0};
if (digitalRead(SWITCH_PIN) == LOW) {
byte len = (sizeof(music) / sizeof(byte));
for (byte i = 0; i < len; i++) {
byte theNote = music[i];
int theTone = tones[theNote];
displayN(theNote);
if (theNote != 0 ) {
tone(BEEP_PIN, theTone);
}
delay(400);
noTone(BEEP_PIN);
}
}
}
// 用数码显示数字
void displayN(int n) {
// 数字0到9,8个数码管亮灭情况,`0`表示亮,`1`不亮
byte num[10][8] = {0, 0, 0, 1, 0, 0, 0, 1, //0
0, 1, 1, 1, 1, 1, 0, 1, //1
0, 0, 1, 0, 0, 0, 1, 1, //2
0, 0, 1, 0, 1, 0, 0, 1, //3
0, 1, 0, 0, 1, 1, 0, 1, //4
1, 0, 0, 0, 1, 0, 0, 1, //5
1, 0, 0, 0, 0, 0, 0, 1, //6
0, 0, 1, 1, 1, 1, 0, 1, //7
0, 0, 0, 0, 0, 0, 0, 1, //8
0, 0, 0, 0, 1, 0, 0, 1 //9
};
// 清空字符,否者两个相同的字符显示看不到切换效果
for (byte i = 0; i < 8; i++) {
digitalWrite(i + 2, 1);
}
delay(50);
// 显示数字
for (byte i = 0; i < 8; i++) {
// 因为要对应到2到9号口,需要把索引值加2
digitalWrite(i + 2, num[n][i]);
}
}