Micro:bit發送訊號給SU-03T
在上一篇中已介紹SU-03T被語音觸發後傳命令給Micro:bit,這一篇就做比較複雜一點點的,主要是Micro:bit和SU-03T之間傳來傳去的…而整個知識層面也比較完整
在上一篇中已介紹SU-03T被語音觸發後傳命令給Micro:bit,這一篇就做比較複雜一點點的,主要是Micro:bit和SU-03T之間傳來傳去的…而整個知識層面也比較完整
來回傳送訊息的範例
來回傳送訊息的範例
透過這個影片的範例,可以讓大家了解Micro:bit和SU-03T之間的資料互傳,一開始利用之前的「前進」語音觸發SU-03T回應,它會傳送「A」字元給Micro:bit,當Micro:bit收到A時又觸發函式取得超音波的障礙物距離並傳給SU-03T,SU-03T會判斷這個數值的大小做出不同的回答,且在距離短時再傳一個「B」回來給Micro:bit
透過這個影片的範例,可以讓大家了解Micro:bit和SU-03T之間的資料互傳,一開始利用之前的「前進」語音觸發SU-03T回應,它會傳送「A」字元給Micro:bit,當Micro:bit收到A時又觸發函式取得超音波的障礙物距離並傳給SU-03T,SU-03T會判斷這個數值的大小做出不同的回答,且在距離短時再傳一個「B」回來給Micro:bit
另一個命令寫在Micro:bit的A鍵,同時送出二個數值(DHT11取得的溫溼度)給SU-03T而它會依溫度來判斷要不要建議開冷氣,而且一定回傳一個「C」給Micro:bit
另一個命令寫在Micro:bit的A鍵,同時送出二個數值(DHT11取得的溫溼度)給SU-03T而它會依溫度來判斷要不要建議開冷氣,而且一定回傳一個「C」給Micro:bit
先看看韌體的部份:從上一個簡單練習的韌體按查看可以藉此修改成下一版本(也就是你定義一個產品後可以不斷地修改繼承成為下一個Update的子版本)
先看看韌體的部份:從上一個簡單練習的韌體按查看可以藉此修改成下一版本(也就是你定義一個產品後可以不斷地修改繼承成為下一個Update的子版本)
因為要接收Micro:bit端傳來的命令,所以我們自己再新增二條行為(comm2和comm3),觸發方式則選「串口輸入」,有個地方我提醒一下,因為對象是Micro:bit所以BAUD最好設定115200比較好,否則有時會怪怪的
因為要接收Micro:bit端傳來的命令,所以我們自己再新增二條行為(comm2和comm3),觸發方式則選「串口輸入」,有個地方我提醒一下,因為對象是Micro:bit所以BAUD最好設定115200比較好,否則有時會怪怪的
接下來先翻到「變量定義」頁籤,添加變量如下圖,類型都選unsigned就行了,它會自動型別,這三個變數主要用來接收並暫存距離、溫度和溼度
接下來先翻到「變量定義」頁籤,添加變量如下圖,類型都選unsigned就行了,它會自動型別,這三個變數主要用來接收並暫存距離、溫度和溼度
翻回「控制詳情」,我們要設定一下串口收到什麼才會觸發
翻回「控制詳情」,我們要設定一下串口收到什麼才會觸發
添加觸發
添加觸發
如左圖,串口輸入、UART1_RX是必然的,注意它自己給的消息編號(流水號是很重要的)就是觸發點唷!
如左圖,串口輸入、UART1_RX是必然的,注意它自己給的消息編號(流水號是很重要的)就是觸發點唷!
下方的輸入參數是依你的設計需要,有沒有要傳值進來,這個comm2我預定讓Micro:bit傳距離給它,所以我添加了一個參數a1(自己依變數通則取名),類型也選unsigned,測試值隨便打
下方的輸入參數是依你的設計需要,有沒有要傳值進來,這個comm2我預定讓Micro:bit傳距離給它,所以我添加了一個參數a1(自己依變數通則取名),類型也選unsigned,測試值隨便打
傳多個參數
傳多個參數
為了比較有測試價值,在comm3的觸發裡,我設定要接收二個值,把參數名稱定為a2和a3,準備來接收溫度和溼度,消息編號會自己跳2,這個你只要記得就可以
為了比較有測試價值,在comm3的觸發裡,我設定要接收二個值,把參數名稱定為a2和a3,準備來接收溫度和溼度,消息編號會自己跳2,這個你只要記得就可以
所以目前的狀態就是下圖
所以目前的狀態就是下圖
設定被觸發後要做什麼事,這可是重頭戲了,上圖中我點選comm2的「添加控制」先設定由變數s1接收參數a1的值
設定被觸發後要做什麼事,這可是重頭戲了,上圖中我點選comm2的「添加控制」先設定由變數s1接收參數a1的值
確定後繼續添加控制,選條件執行(這小小的晶片可以設定這麼多),我打算利用這個S1變數來寫判斷式
確定後繼續添加控制,選條件執行(這小小的晶片可以設定這麼多),我打算利用這個S1變數來寫判斷式
在s1小於等於10的時候,SU-03T播放語音,而內容可以用添加文本、添加變量來湊,這樣可以明白吧!
在s1小於等於10的時候,SU-03T播放語音,而內容可以用添加文本、添加變量來湊,這樣可以明白吧!
所以這條comm2設定完大概如下圖,我還加了一個判斷就是在s1小於等於10的時候除了會講「這樣的距離…」,還會串口輸出字元B(hex是42)給Micro:bit
所以這條comm2設定完大概如下圖,我還加了一個判斷就是在s1小於等於10的時候除了會講「這樣的距離…」,還會串口輸出字元B(hex是42)給Micro:bit
對於comm3的設定應該就能理解了,只是傳二個參數可以用
對於comm3的設定應該就能理解了,只是傳二個參數可以用
以上這樣就差不多了,可以繼承成新的子版本並發布出新的韌體來用囉!
以上這樣就差不多了,可以繼承成新的子版本並發布出新的韌體來用囉!
接下來講Micro:bit的部份,就看一下積木圖理解一下吧!
接下來講Micro:bit的部份,就看一下積木圖理解一下吧!
主要是那二個送資料出去的函數,有包含灰色的積木(沒得拉的),這個寫法我是跟對岸的工程師學的,目的是從Micro:bit中送16進位的值出去,運用開設Buffer的方法,十進位的170就是十六進位的AA,以「send_distance」這個函式來說就是從串口送出
「AA 55 01 距離值 55 AA」 的意思,AA 55....55 AA這種格式是SU-03T訂的,其中那個1送進去後會觸發消息編號1,下一個數字就是傳進去的第一個參數…
主要是那二個送資料出去的函數,有包含灰色的積木(沒得拉的),這個寫法我是跟對岸的工程師學的,目的是從Micro:bit中送16進位的值出去,運用開設Buffer的方法,十進位的170就是十六進位的AA,以「send_distance」這個函式來說就是從串口送出
「AA 55 01 距離值 55 AA」 的意思,AA 55....55 AA這種格式是SU-03T訂的,其中那個1送進去後會觸發消息編號1,下一個數字就是傳進去的第一個參數…
積木塊的生成方法
積木塊的生成方法
在Makecode中先切到Javascript頁,直接貼以下的程式碼再改成你要的
unction send_distance (num: number) {
在Makecode中先切到Javascript頁,直接貼以下的程式碼再改成你要的
unction send_distance (num: number) {
let buf = pins.createBuffer(6);
buf[0] = 170
buf[1] = 85
buf[2] = 1
buf[3] = num
buf[4] = 85
buf[5] = 170
serial.writeBuffer(buf)
}
好了!我想就寫到這兒就好!其他的變化大家都可以自己想像…只有你知道自己想做出什麼效果,所以自己生成自己的韌體是必要的~不只是為了不同的喚醒詞及回應詞
好了!我想就寫到這兒就好!其他的變化大家都可以自己想像…只有你知道自己想做出什麼效果,所以自己生成自己的韌體是必要的~不只是為了不同的喚醒詞及回應詞