这次我们将结合之前的几个课程,利用Arduino做一个简单的综合项目:按键电子小琴。
需要的材料:
- Arduino 编程软件
- Arduino UNO卡
- 面包板 和 一个Mini面包版
- 10 x 不同颜色的连接线
- 3 x LED灯
- 3 x 220 - 1000欧的电阻
- 1 x 蜂鸣器
模拟电路
电路原理
我们将利用三个按钮来实现对6个不同的音调的控制:do,re,mi,fa,sol,la。下面这个表格展现了不同按键的组合所发出的声音,1表示按键按下的状态,0表示按键松开的状态。
\ | 按键3 | 按键2 | 按键1 |
---|---|---|---|
do | 1 | 0 | 0 |
re | 0 | 1 | 0 |
mi | 1 | 1 | 0 |
fa | 0 | 0 | 1 |
sol | 1 | 0 | 1 |
la | 0 | 1 | 1 |
完整代码
#include "pitches.h"
// notes in the melody:
int melody[] = {
0, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5};
int duration = 500; // 500 miliseconds
int pin8 = 8;
int pin11 = 11;
int pin12 = 12;
int pin13 = 13;
void setup() {
Serial.begin(9600);
pinMode(pin8, OUTPUT);
pinMode(pin11, INPUT);
pinMode(pin12, INPUT);
pinMode(pin13, INPUT);
}
int noteNum = 0;
void loop() {
int valPin13 = getDigitalValue(pin13);
int valPin12 = getDigitalValue(pin12);
int valPin11 = getDigitalValue(pin11);
noteNum = getNoteNum(valPin13, valPin12, valPin11);
Serial.println("音符号码 :");
Serial.println(noteNum);
if(noteNum != 0 && noteNum < 7) {
int note = melody[noteNum];
tone(pin8, note);
}
else {
noTone(pin8);
}
// restart after 100 ms
delay(100);
}
int getDigitalValue(int pinNum) {
return (digitalRead(pinNum) == HIGH) ? 1 : 0;
}
int getNoteNum(int valPin1, int valPin2, int valPin3){
return valPin3*4 + valPin2*2 + valPin1;
}