因為之前沒有聽過特雷門這種樂器,還特別Google了一下
還有人用特雷門演奏超級瑪莉
搞清楚了特雷門是 什麼東西以後
再回來看看教學影片的第四課
這一次的輸入多了一個光敏電阻
也就是要利用亮度來改變電阻值,配合電路即可以量測到不同的電壓值
電路還是一樣很簡單
利用+5V的輸出串接電阻和光敏電阻,將中間Vout的電壓值送回Arduino的A0腳位做類比輸入
另外將數位接腳的第8腳接上一個蜂鳴器
接起來的電路如下
程式使用-開啟舊檔,選擇10.StarterKit_BasicKit的p06—LightThermin開啟即可
程式在起始的時候先執行setup()內的程式碼,將LED13點亮後
void setup() {
// Make the LED pin an output and turn it on將13腳位的LED點亮
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
// calibrate for the first five seconds after program runs使用5秒偵測
while (millis() < 5000) {
// record the maximum sensor value記錄亮度的最大值
sensorValue = analogRead(A0);
if (sensorValue > sensorHigh) {
sensorHigh = sensorValue;
}
// record the minimum sensor value記錄亮度的最小值
if (sensorValue < sensorLow) {
sensorLow = sensorValue;
}
}
// turn the LED off, signaling the end of the calibration period偵測結束將13腳位的LED熄減
digitalWrite(ledPin, LOW);
}
接下來進入loop()重覆執行的動作
void loop() {
//read the input from A0 and store it in a variable由A0腳位將感測到的光度電壓值讀回
sensorValue = analogRead(A0);
// map the sensor values to a wide range of pitches將讀回的電壓值轉換為頻率值
int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);
// play the tone for 20 ms on pin 8由第8腳位輸出指定的頻率20ms
tone(8, pitch, 20);
// wait for a moment間隔10ms
delay(10);
在這裡看到二個新的函數,一個是 map()函數
因由A0感測回的電壓值編碼是由0~1023
經過setup()後己將可偵測到的最小值存在sensorLow,最大值存在sensorHigh變數中
要將目前感應到的值對於感測範圍中的位置轉換為50~4000的頻率值中相對應的位置
再將頻率值送回pitch變數
另一個函數則是tone()函數,裡面的二個變數分別給的是腳位、頻率和時間
接好了電路做測試,果然和Massimo Banzi先生講的一樣,不用5分鐘,就會有人叫你把它關掉
根本就是噪音製造機嗎!
沒有留言:
張貼留言