參加過演唱會或是舞台表演的觀眾們,為了與台上的表演者互動,是否還在使用手機的手電筒或是單純的螢光棒來跟著節奏揮舞呢?這些方式都快要落伍了,不妨利用舞動螢光棒,跟著揮動的節奏變換色彩及亮度,更能襯托出與表演者的共鳴以及節奏感,一起讓舞動螢光棒跟著音樂揮舞吧。
演唱會不可或缺的就是螢光棒的氣氛,在現今演唱會舉辦次數頻繁的趨勢下,該如何依照不同情境揮舞各式顏色的螢光棒,將成為演唱會中最亮眼的焦點。因此,本作品將透過人類的體感(揮動),搭配上Maker的手作,快速製作一舞動的體感螢光棒,讓每一次揮舞的顏色繽紛,更讓螢光棒增添了人機互動的模式。
宏碁雲教授 - 1個
Leonardo 開發板 - 1個
傾斜開關 - 1個
RGB LED燈 - 1個
連接雲教授,開啟CPF Arduino,進入Lesson 8 插槽模式。
先將雲教授與相對應感應器連接至Grove擴充板,傾斜開關連接至D6插槽,RGB LED燈連接至D7插槽,如圖:
圖
點擊執行按鈕,可對目前感應器進行各別操作與顯示,插槽D6顯示傾斜開關的值,D7欄位可以控制RGB LED燈的三顏色。
在開始撰寫程式碼之前,先來看一下本程式自訂的函式(function)介紹:
sensorSet()
取得傾斜感測器的數值。
colorControl()
取得三個R、G、B亂數至LEDstringLight_R、LEDstringLight_G、LEDstringLight_B三顏色變數。
現在,要開始撰寫舞動螢光棒的程式碼,點擊修改按鈕進入程式碼編輯介面,將預設的程式碼全部刪除。
接著先宣告幾個LED string light的顏色控制變數。
var LEDstringLight_R ;
var LEDstringLight_G ;
var LEDstringLight_B ;
var maxNum = 255;
var minNum = 0;
程式解析:
新建一個函式sensorSet()
來取得傾斜感測器的數值,以提供判斷螢光棒的開與關。
var LEDstringLight_R ;
var LEDstringLight_G ;
var LEDstringLight_B ;
var maxNum = 255;
var minNum = 0;
function sensorSet(){
var TiltSensor = cpf.get("socket d6");
ui.set("socket d6", TiltSensor);
return TiltSensor;
}
程式解析:
sensorSet()
。sensorSet()
函數中,宣告TiltSensor變數來接收D6插槽傾斜感測器的數值。sensorSet()
函數中,執行ui.set()將傾斜感測器的數值顯示在D6區塊上。sensorSet()
函數中,回傳TiltSensor變數。接著寫一個判斷式,利用傾斜感測器的開與關來控制LED string light的明暗與顏色變化。
...
if(sensorSet() == 0){
}else{
}
function sensorSet(){
var TiltSensor = cpf.get("socket d6");
ui.set("socket d6", TiltSensor);
return TiltSensor;
}
程式解析:
sensorSet()
函數時取得的傾斜感測器數值若為0則做關閉螢光棒的動作。新建一個函式sensorSet()
來取得傾斜感測器的數值,以提供判斷螢光棒的開與關。
...
function sensorSet(){
var TiltSensor = cpf.get("socket d6");
ui.set("socket d6", TiltSensor);
return TiltSensor;
}
function colorControl(){
LEDstringLight_R = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
LEDstringLight_G = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
LEDstringLight_B = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
}
程式解析:
colorControl()
。colorControl()
函數中,使用LEDstringLight_R變數來取得0至256之亂數。colorControl()
函數中,使用LEDstringLight_G變數來取得0至256之亂數。。colorControl()
函數中,使用LEDstringLight_B變數來取得0至256之亂數。新建完colorControl()
函式後,判斷若傾斜感測器的數值為0,設定螢光棒為暗;若傾斜感測器的數值為1,則開啟螢光棒,並呼叫colorControl()
函式並使用LEDstringLight_R、LEDstringLight_G、LEDstringLight_B三個變數來控制LED string light的R、G、B三顏色。
...
if(sensorSet() == 0){
cpf.set("socket d7", 0, 0, 0);
}else{
colorControl();
cpf.set("socket d7", LEDstringLight_R, LEDstringLight_G, LEDstringLight_B);
}
function sensorSet(){
var TiltSensor = cpf.get("socket d6");
ui.set("socket d6", TiltSensor);
return TiltSensor;
}
...
程式解析:
sensorSet()
函數時取得的傾斜感測器數值,若數值為0,則設定D7插槽LED string light之RGB數值皆為0。sensorSet()
函數時取得的傾斜感測器數值,若數值不為0,則呼叫colorControl()
控制LED string light之LEDstringLight_R、LEDstringLight_G、LEDstringLight_B三顏色變數之數值。以上已完成了程式碼的撰寫,最後在最後一行加上 cpf.repeat();
開啟迴圈進行重複執行的動作。
//舞動螢光棒//
var LEDstringLight_R ;
var LEDstringLight_G ;
var LEDstringLight_B ;
var maxNum = 255;
var minNum = 0;
if(sensorSet() == 0){
cpf.set("socket d7", 0, 0, 0);
}else{
colorControl();
cpf.set("socket d7", LEDstringLight_R, LEDstringLight_G, LEDstringLight_B);
}
function sensorSet(){
TiltSensor = cpf.get("socket d6");
ui.set("socket d6", TiltSensor);
return TiltSensor;
}
function colorControl(){
LEDstringLight_R = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
LEDstringLight_G = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
LEDstringLight_B = Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum;
}
cpf.repeat();
完成舞動螢光棒後,心情是不是也跟著五彩繽紛起來了呢?在這個應用中我們了解了亂數函式的概念,在每次揮動螢光棒時呈現不同的顏色,除了利用揮動來控制螢光棒的顏色外,我們也可以結合聲音感測器利用聲音大小或頻率來控制特定顏色或是亮度,像是在演唱會或音樂會時,所有人的螢光棒就會跟著臺上演奏的歌曲頻率和音量一起變換顏色及亮度,讓音樂與燈光融合一體,形成一場視覺與聽覺的極致饗宴!