2012年12月4日 星期二

hw11,week13


1.將Arduino做出的鋼琴錄影上傳到youtube,再貼回部落格

















2.發揮你的創意做出最特別的音樂


















我們有成功做出鋼琴的五個按鈕,每個按鍵代表每個音階,
然後我們就異想天開的加入了旋鈕想要改變音階的變化,
因為我們認為按鍵數量不夠,不知道能不能利用程式的撰寫,
利用旋鈕來改變按鈕的音階,讓五個按鈕可以各代表兩個音階,
這樣音域就會變廣,我們就朝這個方向邁進,但是最後試出來的結果,
真的讓我們覺得有些小失望,因為改變旋鈕後,它只是改變發聲的頻率,
並不如預期的改變其音階,還有很可惜沒有拍成影片,其實這次失敗的計畫中,
我們有學到旋鈕的配合真正的用處在哪邊,並且了解這樣的方式並不可行。



3.貼上程式碼



*/
#include "pitches.h"

const int buttonPin1 = 3; // the number of the pushbutton pin
const int buttonPin2 = 4; 
const int buttonPin3 = 5; 
const int buttonPin4 = 6; 
const int buttonPin5 = 7; 

const int ledPin = 8; // the number of the LED pin

// variables will change:
int buttonState1 = 0; 
int buttonState2 = 0; 
int buttonState3 = 0; 
int buttonState4 = 0; 
int buttonState5 = 0; 

// notes in the melody:
int melody[] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
4, 8, 8, 4,4,4,4,4 };

void setup() {
// iterate over the notes of the melody:
// initialize the LED pin as an output:
pinMode(8, OUTPUT); 
// initialize the pushbutton pin as an input:
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);

for (int thisNote = 0; thisNote < 8; thisNote++) {

// to calculate the note duration, take one second 
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];


// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(8);
}
}

void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
buttonState5 = digitalRead(buttonPin5);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState1 == HIGH) { 
// turn LED on: 
tone(8,NOTE_C3,4);
digitalWrite(8, HIGH); 
} 


else if (buttonState2 == HIGH) { 
// turn LED on: 
tone(8,NOTE_D3,4);
digitalWrite(8, HIGH); 
} 


else if (buttonState3 == HIGH) { 
// turn LED on: 
tone(8,NOTE_E3,4);
digitalWrite(8, HIGH); 
} 


else if (buttonState4 == HIGH) { 
// turn LED on: 
tone(8,NOTE_F3,4);
digitalWrite(8, HIGH); 
} 

else if (buttonState5 == HIGH) { 
// turn LED on: 
tone(8,NOTE_G3,4);
digitalWrite(8, HIGH); 
} 
else {
// turn LED off:
digitalWrite(8, LOW); 
}

}

4.本周上課心得

今天利用到五個按鈕,做出鋼琴的樣子,其實一開始還是有卡關,
在於程式部分和案件硬體的理解稍微慢了一些些,
硬體的輸出腳以及程式的搭配,要需要小心一點,
因為很容易就被卡住,所以我們這次學到了必須先建立好程式邏輯才開始動手
我們之後練習的步驟就打算利用這樣的做法來試試看,
已有最有效率的方法達到最好的學習成效,
很開心我這周又學到了一點東西。




沒有留言:

張貼留言