Makeblock 有提供 Me 音量感應器,可以感測聲音強度,很簡單的一個電路模組:
音量感應器,一般常見的應用是聲控開關,像是拍兩下手來打開電視開關之類,如果有個 LED 陣列,也可以依強度來製作音量顯示器,這邊的話,就來作個特效燈,當音量高於設定值時,會 讓 Me RGB LED 模組隨機顯示顏色,然後亮度逐漸衰退,你可以在 LED 模組上放上個半透明壓克力,或者是將它放到鼓裏頭,就可以隨著音聲播放或打擊,展現些視覺效果。
實作特效燈
特效燈的實作會用到七段顯示器、RGB LED 模組與音量感應器,RGB LED 模組接至連接埠 3,七段顯示器模組接至連接埠 4,音量感應器接至連接埠 6,七段顯示器是用來顯示目前音量大小。
我首先處理的是亮度逐漸衰退的 LED 特效,問題在於亮度逐漸衰退的過程中,如果又收到的音量又高於設定值,LED 必須再度根據新的 RGB 隨機值亮起,在 mBlock 中,可以使用廣播事件,這會讓程式比較容易處理一些:
每次收到指定的廣播訊息時,就會進入迴圈,衰退的速度我選擇每次亮度減 5,迴圈會持續至 RGB 值都為 0為止。
RGB 值的產生則是在另一個迴圈中進行:
這樣程式就完成了,你可以試著執行程式,然後試著製造些聲音,來看看 LED 的效果如何!
修改、上傳至 Arduino
如果想要能將程式上傳至 Arduino,由於廣播事件是 mBlock 中提供的功能,因此執行「Arduino mode」時,它會告訴你不支援廣播元件:
之前的文章使用到廣播元件時,其實也都無法直接轉換為可上傳至 Arduino 的程式,當廣播訊息到來時,其底下指定的流程就會被執行,這就好比你可以指定多個同時執行的流程,然而Arduino 本身無法同時執行多個指定的程式流程,你必須適當地根據條件來自行切換流程。
就我們這個簡單的程式來說,可以如下修改:
processLED
只是個自定義積木程式,也就是說,它是主程式流程的一部份:
因為 processLED
就是在迴圈中呼叫,所以,processLED
自定義方塊中就不用迴圈了,只要判斷何時要執行 LED 特效就可以了,這麼一來,你就可以順利地將程式進行轉換了:
由於上傳至 Arduino 執行速度較快,實際上效果會比透過 mBlock 執行來得好!