今天實作的micro:bit小程式,也是基於一對多的控制而改編成的大型跑馬燈程式。
micro:bit上的LED可顯示文字,如果長度超過二個字的文字便會以砲馬燈的方式由左到右依序出現。但是micro:bit的LED實在太小,一次只能出現一個字母,如果有多個micro:bit就可以組合成一個大型跑馬燈。
可多個micro:bit組合成大型跑馬燈
可將下方程式碼貼於makecode上的javascript頁面上
可多個micro:bit組合成大型跑馬燈
也可以轉成積木式語法使用
先準備一個micro:bit當做控制器,將以下的程式安裝進這個micro:bit裡面,然後讓這個控制器先開好機,跑馬燈的micro:bit開機後就會向這個控制器要求給定一個流水編號。控制器按A鍵或B鍵可選擇大型跑馬燈要顯示的字串,A+B鍵一起按,則會將選定好的字串送給跑馬燈micro:bit來顯示。要顯示的字串請自行修改以下的程式碼的最後一行陣列值:
let arrayStr: string[] = []let myBits: string[] = []let selectedStr = 0input.onButtonPressed(Button.B, () => { selectedStr += 1 if (selectedStr > arrayStr.length - 1) { selectedStr = arrayStr.length - 1 } basic.showNumber(selectedStr + 1)})input.onButtonPressed(Button.A, () => { selectedStr += 0 - 1 if (selectedStr < 0) { selectedStr = 0 } basic.showNumber(selectedStr + 1)})radio.onDataPacketReceived(({ receivedString: receivedName, receivedNumber: receivedValue }) => { if (receivedValue == -1) { myBits.push(receivedName) radio.sendValue(receivedName, myBits.length - 1) basic.showNumber(myBits.length) }})input.onButtonPressed(Button.AB, () => { radio.sendValue("bits", myBits.length) basic.pause(1) radio.sendValue(arrayStr[selectedStr], -2)})radio.setGroup(1)myBits = []selectedStr = -1//可修改、增刪以下的字串陣列,讓跑馬燈有更多字串可供顯示arrayStr = ["micro:bit", "Hello World!", "Yes, I got it!"]再準備多個micro:bit當做要顯示文字的跑馬燈,將以下的程式安裝進這些個micro:bit跑馬燈裡面,要先將上面所介紹的控制端的micro:bit先開機,然後依序打開跑馬燈micro:bit,以取得自身的順序編號,才會依照正確的順序顯示文字。
let myString = ""let bits = 0let myIndex = 0radio.onDataPacketReceived(({ receivedString: receivedName, receivedNumber: receivedValue }) => { if (receivedName == "" + control.deviceSerialNumber()) { myIndex = receivedValue basic.showNumber(myIndex) } else if (receivedName == "bits") { bits = receivedValue } else if (receivedValue == -2) { myString = receivedName+" " basic.clearScreen() marquee() }})function marquee() { led.setBrightness(0) basic.showString(myString.charAt(myIndex)) for (let i = 0; i < 200; i++) { led.setBrightness(i) basic.pause(1) } basic.pause(1800) basic.showString(myString.substr(myIndex + 1))}basic.showString("?")radio.setGroup(1)myIndex = -1myString = ""bits = 0radio.sendValue("" + control.deviceSerialNumber(), myIndex)