micro:bit大型跑馬燈
今天實作的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 = 0
input.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 = 0
let myIndex = 0
radio.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 = -1
myString = ""
bits = 0
radio.sendValue("" + control.deviceSerialNumber(), myIndex)