網頁

2008年10月8日

Arduino 小鋼琴

Arduino 小鋼琴
這次將Arduino結合了音樂,利用簡單的開關或是光敏電阻來達到很不錯的效果。
演奏的歌曲是倫敦鐵橋,因為開關不夠所以只能到la音階。
不然原本想要彈奏更多音階的歌曲的!而且覺得挑歌比實作還困難啊!XD



程式碼部分:(對不起我寫的結構不太好= =)
#define  c     3830    // 261 Hz
#define  d     3400    // 294 Hz
#define  e     3038    // 329 Hz
#define  f     2864    // 349 Hz
#define  g     2550    // 392 Hz
#define  a     2272    // 440 Hz
#define  b     2028    // 493 Hz
#define  C     1912    // 523 Hz
#define  R     0

int speakerOut = 10;
int tone;


int inPin1 = 5;   
int inPin2 = 6;
int inPin3 = 7;   
int inPin4 = 8;
int inPin5 = 9;
int inPin6 = 11;
int val1 = 0;     
int val2 = 0;
int val3 = 0;     
int val4 = 0;
int val5 = 0;
int val6 = 0;

void setup() {
pinMode(speakerOut, OUTPUT);

pinMode(inPin1, INPUT);    
pinMode(inPin2, INPUT);
pinMode(inPin3, INPUT);    
pinMode(inPin4, INPUT);
pinMode(inPin5, INPUT);
pinMode(inPin6, INPUT);
Serial.begin(9600);       // 設定序列埠的速度為9600bps
}

void loop() {
val1 = digitalRead(inPin1); 
val2 = digitalRead(inPin2);
val3 = digitalRead(inPin3); 
val4 = digitalRead(inPin4);
val5 = digitalRead(inPin5);a
val6 = digitalRead(inPin6);
// Serial.println(val);
// delay(100);
//tone = 2028;

if(val1==HIGH){
digitalWrite(speakerOut,HIGH);
delayMicroseconds(3830 / 2);
digitalWrite(speakerOut, LOW);
delayMicroseconds(3830 / 2);
}
if(val2==HIGH){
digitalWrite(speakerOut,HIGH);
delayMicroseconds(3400 / 2);
digitalWrite(speakerOut, LOW);
delayMicroseconds(3400 / 2);
}
if(val3==HIGH){
digitalWrite(speakerOut,HIGH);
delayMicroseconds(3038 / 2);
digitalWrite(speakerOut, LOW);
delayMicroseconds(3038 / 2);
}
if(val4==HIGH){
digitalWrite(speakerOut,HIGH);
delayMicroseconds(2864 / 2);
digitalWrite(speakerOut, LOW);
delayMicroseconds(2864 / 2);
}
if(val5==HIGH){
digitalWrite(speakerOut,HIGH);
delayMicroseconds(2550 / 2);
digitalWrite(speakerOut, LOW);
delayMicroseconds(2550 / 2);
}
if(val6==HIGH){
digitalWrite(speakerOut,HIGH);
delayMicroseconds(2272 / 2);
digitalWrite(speakerOut, LOW);
delayMicroseconds(2272 / 2);
}
}

0 回應:

張貼留言