沒想到,雲教授也能製作出一把價值昂貴的電吉他,透過智高積木的拼湊,配上一些感測器,就能打造出一把CPF的電吉他,而且,還可以使用智高積木拼湊出喜歡的電吉他外觀。搖滾電吉他並非使用彈弦的方式,而是當手指靠近某一區域的音階時,便會直接播放出當前的音階,外行人也能快速地學習使用這把搖滾電吉他。
電吉他是一種Rock的象徵,更是許多流行演奏不可或缺的靈魂,但電吉他演奏的建置成本及時間相對的高,聲音須由而外的設備進行擴音,造成鋼琴學習者難能隨時隨地練習,因此本作品不僅要透過CPF快速的改善行動練習不變的問題,更要將其成本減低,透過隨手可得的用具以及紅外線感測器的距離感測控制音階,即可快速地進行簡單的演奏,讓人人都能快速地製作一把心目中的電吉他。
宏碁雲教授 - 1個
Leonardo 開發板 - 1個
Grove 擴充板 - 1個
紅外線距離感測器 - 1個
按鈕開關 - 1個
無源蜂鳴器 - 1個
連接雲教授,開啟CPF Arduino,進入Lesson 8 插槽模式。
先將雲教授與相對應感應器連接至Grove擴充板,紅外線距離感測器連接至A3插槽,蜂鳴器連接上D5插槽,按鈕連接上D6插槽,如圖:
圖
點擊執行按鈕,可對目前感應器進行各別操作與顯示,插槽A3顯示紅外線距離感測器的值,D5可以控制蜂鳴器的開關,D6則顯示按鈕為按下或放開(0 => 放開,1 => 按下)。
在開始撰寫程式碼之前,先來看一下本程式自訂的函式(function)介紹:
buttonSet()
取得按鈕感測器的數值。
sensorSet()
取得紅外線距離感測器的數值。
buzzerControl()
利用紅外線距離感測器的數值來控制蜂鳴器的發音。
現在,要開始撰寫搖滾電吉他的程式碼,點擊修改按鈕進入程式碼編輯介面,將預設的程式碼全部刪除。
首先撰寫buttenSet()
函式來取得按鈕感測器的數值。
var buttenSensor;
function buttenSet(){
buttenSensor = cpf.get("socket d6");
ui.set("socket d6", buttenSensor);
return buttenSensor;
}
程式解析:
buttenSet()
。buttenSet()
函數中,使用buttenSensor變數來接收D6插槽按鈕感測器的數值(0 => 關,1=> 開)。buttenSet()
函數中,執行ui.set()將按鈕感測器的數值顯示在D6區塊上。buttenSet()
函數中,回傳buttenSensor變數。接著撰寫sensorSet()
函式來取得紅外線距離感測器的數值。
var buttenSensor;
var infraredSensor;
function buttenSet(){
buttenSensor = cpf.get("socket d6");
ui.set("socket d6", buttenSensor);
return buttenSensor;
}
function sensorSet(){
infraredSensor = cpf.get("socket a3");
ui.set("socket a3", infraredSensor);
return infraredSensor;
}
程式解析:
sensorSet()
。sensorSet()
函數中,使用infraredSensor變數來接收A3插槽紅外線距離感測器的數值。sensorSet()
函數中,執行ui.set()將紅外線感測器的數值顯示在A3區塊上。sensorSet()
函數中,回傳infraredSensor變數。接著撰寫buzzerControl()
函式來控制蜂鳴器發出不同頻率的音調。
var buttenSensor;
var infraredSensor;
var scale=[523,587,659,698,784,880,988];
function buttenSet(){
buttenSensor = cpf.get("socket d6");
ui.set("socket d6", buttenSensor);
return buttenSensor;
}
function sensorSet(){
infraredSensor = cpf.get("socket a3");
ui.set("socket a3", infraredSensor);
return infraredSensor;
}
function buzzerControl(){
if((sensorSet()>=100)&&(sensorSet()<180)){
cpf.set("socket d5", scale[0], 300);
}else if((sensorSet()>=180)&&(sensorSet()<220)){
cpf.set("socket d5", scale[1], 300);
}else if((sensorSet()>=220)&&(sensorSet()<270)){
cpf.set("socket d5", scale[2], 300);
}else if((sensorSet()>=270)&&(sensorSet()<320)){
cpf.set("socket d5", scale[3], 300);
}else if((sensorSet()>=320)&&(sensorSet()<450)){
cpf.set("socket d5", scale[4], 300);
}else if((sensorSet()>=450)&&(sensorSet()<570)){
cpf.set("socket d5", scale[5], 300);
}else if(sensorSet()>=570){
cpf.set("socket d5", scale[6], 300);
}
}
程式解析:
buzzerControl()
。buzzerControl()
函數中,寫一個判斷式,若呼叫sensorSet()
函式回傳的紅外線感測器數值為100至180時,設定D5插槽蜂鳴器的頻率為scale[0]音階陣列值。sensorSet()
函式回傳的紅外線感測器數值為180至220時,設定D5插槽蜂鳴器的頻率為scale[1]音階陣列值。sensorSet()
函式回傳的紅外線感測器數值為220至270時,設定D5插槽蜂鳴器的頻率為scale[2]音階陣列值。sensorSet()
函式回傳的紅外線感測器數值為270至320時,設定D5插槽蜂鳴器的頻率為scale[3]音階陣列值。sensorSet()
函式回傳的紅外線感測器數值為320至450時,設定D5插槽蜂鳴器的頻率為scale[4]音階陣列值。sensorSet()
函式回傳的紅外線感測器數值為450至570時,設定D5插槽蜂鳴器的頻率為scale[5]音階陣列值。sensorSet()
函式回傳的紅外線感測器數值大於570時,設定D5插槽蜂鳴器的頻率為scale[6]音階陣列值。以上已完成了程式碼的撰寫,最後在最後一行加上 cpf.repeat();
開啟迴圈進行重複執行的動作。
//搖滾電吉他//
var buttenSensor;
var infraredSensor;
var scale=[523,587,659,698,784,880,988];
if(buttenSet()==1){
buzzerControl();
}else{
cpf.set("socket d5",0);
}
function buttenSet(){
buttenSensor = cpf.get("socket d6");
ui.set("socket d6", buttenSensor);
return buttenSensor;
}
function sensorSet(){
infraredSensor = cpf.get("socket a3");
ui.set("socket a3", infraredSensor);
return infraredSensor;
}
function buzzerControl(){
if((sensorSet()>=100)&&(sensorSet()<180)){
cpf.set("socket d5", scale[0], 300);
}else if((sensorSet()>=180)&&(sensorSet()<220)){
cpf.set("socket d5", scale[1], 300);
}else if((sensorSet()>=220)&&(sensorSet()<270)){
cpf.set("socket d5", scale[2], 300);
}else if((sensorSet()>=270)&&(sensorSet()<320)){
cpf.set("socket d5", scale[3], 300);
}else if((sensorSet()>=320)&&(sensorSet()<450)){
cpf.set("socket d5", scale[4], 300);
}else if((sensorSet()>=450)&&(sensorSet()<570)){
cpf.set("socket d5", scale[5], 300);
}else if(sensorSet()>=570){
cpf.set("socket d5", scale[6], 300);
}
}
cpf.repeat();
到這邊為止介紹的搖滾電吉他目前只能彈奏出簡單的Do Re Mi音階功能,若是對吉他有熱忱,你可以將電吉他加入能彈奏和弦的功能,當使用三根手指按住電吉他中的特定區塊時,便能彈出C和弦,或是你能夠依照這個idea,使用積木拼湊出其他樂器,例如鋼琴、爵士鼓等等,喜歡音樂的朋友們不妨試試看吧!