許多人拿到micro:bit,會把手頭有的各種感測器、馬達和micro:bit結合,做出許多具有創意的機構,如自走車、微型機器人等,把micro:bit當做是新版的arduino,創意十足。但是,我手頭的這些東西實在不多,我甚至連馬達驅動板都沒有,所以,我就只能把micro:bit這個單板看看如何能夠玩到極致。
micro:bit這個東西,大部份可用在資訊或是生活科技領域的教學中,但是,今天,我要把它用在英文教學,讓micro:bit的功能展現在更多的學習領域當中。背英文單字是大部份的人可能會經歷過的事,今天設計的小程式,讓多人的小組可以用合作學習的方式來拼英文單字,透過合作學習的方式,讓學生能討論單字中英文字母的順序,並進而能讓他們在遊戲的趣味中背熟英文單字。相關的教學示例及micro:bit的用法,請參考以下的影片示例:
每個拿到micro:bit的學生,都會被分配到一個字母
micro:bit除了資訊及生活科技領域之外,也可以適當的使用在其他的學習領域當中
他們必須討論出正確的字母順序,以便拼出正確的英文單字
使用水銀電池的擴展板,可讓micro:bit的使用更方便
相關用法請參閱以上的影片說明來使用,至於要用到多少micro:bit,就看要測驗的單字有多少個字母,就準備幾個,所以要測驗的單字,它的字母數最好一樣,如果不一樣,最好後面要補上適當長度的空白,讓每個單字的長度相同。以下的教師端的程式,若想要增加更多單字或是要用更長的單字,則請修改以下程式的最後一行(記得,每個單字的長度要一樣),每個單字前後都要用英文的雙引號包住,單字和單字中間要有個半形的逗號。將以下的程式碼貼上https://makecode.microbit.org/裡面的javascript頁面後,即可下載安裝進micro:bit,但是,請記住,不要再點選讓它轉成積木程式,因為裡面的內容有些複雜了,積木程式無法處理,讓它轉成積木程式的話有些部份會轉不出來而不正常。
教師端micro:bit的程式
let arrayStr: string[] = []let myString = ""let myBits: string[] = []let arrayAns: number[] = []let selectedStr = 0let tempNum = 0let equal = falselet counts = 0let corrects = 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 (receivedName.charAt(0) == "A") { checkAns(parseInt(receivedName.substr(1)), receivedValue) } else if (receivedValue == -1) { myBits.push(receivedName) radio.sendValue(receivedName, myBits.length - 1) basic.showNumber(myBits.length) }})input.onButtonPressed(Button.AB, () => { setBitsChar()})function checkAns(cIndex: number, cAns: number) { counts++ if (counts <= myString.length) { if ((arrayAns[cIndex] == cAns) || (myString.charAt(cAns) == myString.charAt(arrayAns[cIndex]))) { corrects++ } if (counts == myString.length) { if (counts == corrects) { radio.sendValue("Good", 0) basic.showString("Good!") } else { counts = 0 corrects = 0 radio.sendValue("Wrong", 0) basic.showString("Wrong!") } } }}function setBitsChar() { counts = 0 corrects = 0 tempNum = 0 arrayAns = [] myString = arrayStr[selectedStr] radio.sendValue(myString, -2) tempNum = Math.random(myString.length) arrayAns.push(tempNum) for (let i = 1; i <= myString.length - 1; i++) { equal = true while (equal) { tempNum = Math.random(myString.length) for (let j = 0; j < arrayAns.length; j++) { equal = (arrayAns[j] == tempNum) if (equal) { break } } } if (!equal) { arrayAns.push(tempNum) } } for (let k = 0; k <= arrayAns.length - 1; k++) { radio.sendValue("" + k, arrayAns[k]) basic.pause(1) } basic.showIcon(IconNames.Yes)}arrayAns = []selectedStr = 0tempNum = 0counts = 0equal = falsemyBits = []myString = ""radio.setGroup(1)//要修改測驗的內容單字,請自行修改以下這一行陣列內容arrayStr = ["dog", "mom", "how","cat","age","ago"]學生端的micro:bit,看測驗題目單字的長度有幾個字母,就要準備幾個micro:bit,把以下的程式安裝進所有學生端的micro:bit即可:
let myChar = ""let myString = ""let myIndex = 0let rightAns = 0let myChoice = 0let answering = falseradio.onDataPacketReceived(({ receivedString: receivedName, receivedNumber: receivedValue }) => { if (receivedName == "" + control.deviceSerialNumber()) { myIndex = receivedValue basic.showNumber(myIndex) } else if (receivedName == ("" + myIndex)) { rightAns = receivedValue myChar = myString[rightAns] basic.showString(myChar) } else if (receivedName == "Good") { clearData() basic.showIcon(IconNames.Yes) } else if (receivedName == "Wrong") { basic.showIcon(IconNames.No) basic.pause(1000) basic.showString(myChar) answering = false } else if (receivedValue == -2) { clearData() myString = receivedName }})input.onButtonPressed(Button.A, () => { if (!answering && myChar != "") { myChoice += 0 - 1 if (myChoice < 0) { myChoice = 0 } basic.showNumber(myChoice + 1) }})input.onButtonPressed(Button.B, () => { if (!answering && myChar != "") { myChoice += 1 if (myChoice > myString.length - 1) { myChoice = myString.length - 1 } basic.showNumber(myChoice + 1) }})input.onButtonPressed(Button.AB, () => { if (!answering && myChar != "") { radio.sendValue("A" + myIndex, myChoice) basic.showString("?") answering = true }})function clearData() { myChar = "" myString = "" rightAns = -1 myChoice = -1 answering = false}basic.showString("?")radio.setGroup(1)myIndex = -1clearData()radio.sendValue("" + control.deviceSerialNumber(), myIndex)