[4]Arduino制作二进制按键小琴

这次我们将结合之前的几个课程,利用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;
}

实图展示

你可能感兴趣的:([4]Arduino制作二进制按键小琴)