2021年10月25日 星期一

Py(thon) Route直直行

Py(thon) Route直直行

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB:http://gg.gg/TedLeeFB/
Blog:http://gg.gg/TedLeeBlog/

Nov. 1, 2021
88x31.png[1]

歹(phái)(Py)路真歹行,毋免驚,閣向前行(台語)。

108課綱之科技領綱

今年(2021)翰林出版社獨樹一格,在九上資訊科技科投入一顆強大的震撼彈:編入一章12節課的Python編程(我們暫借此詞語,因為通俗的程式設計(programming design)一詞太過形下而強調。「技法(skills)」。另一方面,運算思維(computational thinking)又太形上而有摸不著邊際之感)。有人一聽到國中生要學語法程式立刻心生疑問:新課綱不是規範第四教育階段(七到九年級)宜採積木式的視覺化程式設計工具(visualized programming tools)教學嗎?我們翻出科技領綱(https://reurl.cc/Krl7Rj ,第10頁)來細究它是怎麼說的:

中學的程式設計:包含程式設計的概念、實作及應用。「可」採用視覺化程式設計工具,並搭配演算法進行教學。

就字面上來說,「可」採不需等於「必」採,也就是說視覺工具是個建議值罷了。就教學面向來說,很難有一套學習法就能適用於所有的學生。畢竟教學實施的對象是「人」,而鍾鼎山林各有所好啊!
所以,重點似乎不在課綱規範什麼,反倒是我們要教哪些。
對筆者而言,我們備完課後所擬出的三點教學目標如下:
  1. 編程共創:網路是一個便於分享與交流的平台,利用它的分散多工的環境洽好適合異地協作編程來共同創作專案。
  2. Python體驗:在我們備完翰林版國九資訊科技第2章的從Scratch到Python後寫下《從軟體工具提升到資訊系統觀的12堂Python專題製作之旅:以1A2B為例》(https://reurl.cc/L7n0ax) 一文,接著就有同行前輩問道:上完這套Python課程模組後,能保證學生們都一定會寫程式嗎?這一問,勾起我們最深的信念:學習編程 ≠ 程式設計(精準來說是邏輯思考訓練),也不意味著人人將來都要成為程式設計師。所以,就如同芬蘭的孩童游泳課(https://reurl.cc/NZxoDn)一樣,設計各種遊戲來誘發小朋友不怕水,並能在水中潛水遊玩。因此,這短短的12節課並不是要教出未來的程式設計師,而是希望學生游藝於文字式編程之中。
  3. 雲端工具運用:共用、自動儲存、免安裝的輕量客戶端(thin client)操作,把所有非敏感性資料存在雲端上以便於隨時隨地(anytime anywhere)取用的概念對現行的學生是陌生而不熟悉的(就筆者近十年的教學經驗觀察)。雲端工具與平台的學習和程式專案的儲存,也是資訊科技的核心能力之一,尤其對於成長在這個網路世代的莘莘學子而言,這樣的雲端環境很可能就是他們畢業後的工作生態,尤其處在在世紀大疫情傳播感染的浩劫威脅之下。

編程基礎

縱觀各類程式語言(programming languages)的基礎結構,不外乎是循序(sequential)、選擇(selective)與重複(repititive)。然後才是模組化(modularized)程式,再結合陣列(array)資料結構(data structure)往下延伸。而Python亦然。換言之,初學程式設計要學的就是這些程式語言共通的原理、原則。

Python教學信念

筆者在某私立貴族私校任職期間,曾經教授過小六Scratch動畫設計(因為私校的勤管嚴教校風,資深資訊老師共商不宜教授遊戲設計)一年。上完一學期後,就有學生聽聞要續上Scratch而顯無奈。而翰林版教材中,七、八年級已上了整整兩年的Scratch了,學生們的倦怠感已然叢生,編程工具是該進化了~。

此外,當代能真正拿來開發應用軟體的程式語言仍以文字語法式為主。要嘛就升上10年級再接觸,要嘛就早早接受這必要之惡。

其實,程式語言也好,程式設計也罷,編程教育真正要訓練的是邏輯思維,程式只是表現想法的一個載體(carrier)──工具各有巧妙不同,教學存乎一心而已!

IDE(Integrated Development Environment)工具

編寫Python程式的免費Windows IDE甚多,在表1中我們將就幾個面向來分類它們的選用考量,並詳細說明我們最終採用Replit的演進過程。

表1:各種常見的Python IDE。

回顧上節我們擬定的三大教學目標:
  1. 編我共創 → Colab、Replit
  2. Python體驗 → Colab、Replit、IDLE、Spyder、MS Visual Studio 2019、VS Code、Thonny
  3. 雲端工具運用 → Colab、Replit、VS Code
很明顯地,三目標和7工具交集的結果是Colab和Replit。跟據我們實際教學的結果,因為學生端全數採用Google教育帳號登入,上兩次後竟發生圖1的Colab服務未開啟之窘境。經我們多方詢問與甞試後,推論出可能發生的問題來自本人雖身兼學校系管師,但並不是全校Google帳號管理者(super user)的權限(permission)。Colab不是預設的Google應用程式(apps),再加上學生的年齡皆未滿18。因此,我們不敢冒然開放非預設的使用權限。


圖1:Colab服務未開啟。

最後,我們選用Replit這套老牌IDE工具。截至目前為止,至少在筆者教授的9個班約2xx人次中操作都很穩定。

學習路徑(learning routes)

請推薦Python教材、Python要怎麼學…?(本文不討論「學Python要做什麼、為什麼要學Python…」這類動機問題, 提供給有需要的讀者自行檢視自身的學習需求)優秀的航海士都備有詳盡的航海圖,出海航行時才不致迷航。以下我們將介紹幾條可行的學習路徑供讀者們參考與選擇---它們沒有最好,只有適不適合!

  1. JS積木(圖2) → Python:從JavaScript(JS)積木入門(https://makecode.microbit.org/#editor)可先不管文字式語法(syntax)的繁瑣規範。待有編程基礎後再進入Python的高階程式語言。
  2. JS積木 → mP積木(圖3) → Python:在JS積木和Python中插人micro Python(官方的正式名稱叫static python,https://makecode.com/language。它是Pyhon語法的簡化版加上micro:bit開發版硬體控制程式的綜合體)為了方便起見,本文皆用mP來稱呼)做為中介的過渡站。在MakeCode平台上,mP的操作是拖曳出積木就會產生對應的語法程式,讓Python的初學者可以在進入純文字程式撰寫前有一稍稍的緩衝銜接。
  3. mP積木 → Python:由mP積木自動產生語法程式的輔助開始熟悉mP的語法規則後,再進入Python的編程世界。
  4. Blockly積木 → Python:此類較著名的Blockly積木工具有 Edu Blocks(https://app.edublocks.org/ )和Blockpy(https://think.cs.vt.edu/blockpy/blockpy/load )。其中,只有後者具積木和語法同時互轉的功能。
  5. Python:純文字語法的編程學習。
  6. 流程圖 → Python:國內已出版百餘本各類程式語言專書的陳會安老師(https://tinyurl.com/yfk6ym82)所撰寫的「看流程圖寫Python」工具fChart(http://hueyanchen.byethost10.com/?i=1),是著眼於本國教育的地域性設計而成的「編程邏輯」訓練工具。筆者曾向大師請益,陳老師是這樣語重心長的說道:
台灣的編程教育最大的問題在哪?邏輯訓練。
外國的教育方式比較沒這方面的問題。因此,歐系(例如:芬蘭)的編程教學採語法視覺化;美系則採積木化。教學目標是把程式語言簡化成小孩比較容易理解的積木。
反觀台灣的現況卻非如此。所以,一昧的推廣Scratch是合適的嗎?
另一方面,就陳老師近年來的編程教學實務經驗,他觀察到:流程圖才是編程之母。積木不是。小朋友們拉完積木程式後,卻不一定懂程式背後的運算邏輯。

筆者自2017年推廣micro:bit編程到今(https://tinyurl.com/ygqm5rcu),也深此疑惑。如今巧遇大師解謎,也正將編程教學修正為:

想法 ---流程圖 → 程式

註1:我國國情是3~9年級推Scratch視覺化編程工具,10~12年級才進入文字式編程(目前有C/C++和Python兩派)。然而,MIT官方並未有Scratch自動產生C/C++或Python語法程的工具。因此,在編程的學習持續上一直有著很大的接軌落差存在。
註2:日前,筆者已將fChart流程圖的150個專案(https://github.com/fchart/fChartExamples2)全數做過一遍。它如何寫成Python程式碼的說明可參照筆者錄製的解說影片(https://youtu.be/bj6ZEub_nKg)。
註3:以fChart流程圖執行來訓練編程邏輯的展示如 https://youtu.be/-IJPXaCTUY8 所示。

圖2:MakeCode的JS積木編輯介面。

圖3:MakeCode的mP編輯介面。

教學法(teaching methods)

筆者以為,中學編程教學最大的挑戰是:由資訊專業走入通識教育。本來文法商…等等資訊非相關科系是一輩子也碰不到編程的。然而,自從科技以日進千里的躍進之後,編程思維竟儼然演進成未來公民必備的素養之一。因此,編程教學法就變成格外的重要了。本節將討論下列兩種常見的編程教學方式:

  1. 拆解法:教學者事先將程式做細部拆解。每次示範一小塊子功能。最後再組成完整的程式。
  2. 範例式(learning by examples):以小範例練習積累為主,不介紹深入的程式語法細節。強調從做中學習。

文字形語法常見錯誤類型

筆者就目前正在教授九年級Python程式設計12堂課的經驗,整理出下列幾種學生常見的語法錯誤類型:

1. 打錯字(typo):如圖4所示。該生將加權平均.6(60%)誤打成6,少了小數點。

圖4:打錯字。

2. 漏打字:如圖5所示,int()函式(function)只打了(),而沒打int。

圖5:漏打字。

3. 縮排(identation)問題:如圖6所示,Pyhon用空格(space)來標示程式區塊(block)。該縮的一定要縮;不該縮的不可亂縮。

圖6:縮排錯誤。

4. 函式與算式分不清:如圖7,print()是函式不是算式(expression)。

圖7:函式 vs. 算式。

5. 變數名稱不一致:例如:average打成avergae。
6. ( )、[ ]未速配:Replit會有長方形的配對「提示」,但總有人會視而不見。
7. 語法規則還未進入長期記憶:例如:print('輸出字串')自動省略' '、print(字串1 + 字串2 + …)少打+…。

註:除了上述各類的程式錯誤外,現今國內資訊教育最大的困境在「打字」。筆者目前這批授課學生已九年級了,'、%、[ ]、數字鎖定鍵NumLock、倒退鍵、Del鍵、小寫i和小寫l不分、Ctrl+c、Ctrl+v…仍有不少學生很不熟悉,甚至找不到位於鍵盤何處而要舉手尋求協助。更嚴重的是,中/英打混合輸入時,全/半形不會控制。

英文菜菜子

現今的編程教育除了我國固有的邏輯缺陷(defects)與前述的語法障礙(barriers)之外,我們還有一個很嚴重語言依賴(dependency):非中文不可。筆者每回第一次上課示範的軟體界面只要是英文版的,馬上就「AI(會唉)」起來。這是來自心底對英文的恐懼(當然,有一部份是中文的慣性),也是政府宣示2030要邁向雙語國家的最大挑戰!
就編程英文而言,從圖8可以歸納出四個發生點:

  1. 英文UI(User Interface,使用者界面)。
  2. 程式語言的英文語法。
  3. 程式行間的語法錯誤提示。
  4. 編譯錯誤訊息(error message)。

圖8:編程英文發生處。

就筆者自己的學習經驗而言,語言的使用(usage)只是一種習慣,多聽、多看、多用自然就如呼吸般自然。單字看不懂、句子讀不會只是表層,內心深處是否想學才是最大的關鍵。


2021年8月5日 星期四

將ESP8266類比腳位的讀值做為模擬測資送到Google Forms儲存

 將ESP8266類比腳位的讀值做為模擬測資送到Google Forms儲存

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB:http://gg.gg/TedLeeFB/
Blog:http://gg.gg/TedLeeBlog/

Aug. 5, 2021
88x31.png[1]
 

實驗目標

將ESP8266物聯網開發板讀取到的感測資料送至Google儲存,如圖1所示。




 圖1:本實驗架構圖。

材料

品名

數量

單位

備註

WeMos D1 WiFi UNO

1

片

*其它具有Arduino相容腳位及WiFi功能的開發板亦可

USB A公 對 Micro USB B公傳輸線

1

條

建議長度最好≥100 cm

*例如:D1 mini、…。

編程與開發環境建立步驟

請依照以下6個步驟,依序完成。

1. 安裝CH340 driver(驅動程式) 依照這篇 https://reurl.cc/7rQADb 提及的網址下載並裝妥開發板上晶片的硬體驅動程式。裝完後可以在device manager(裝置管理員)中看到它已被指定到一個特定的COM代號了。
2. 安裝Arduino IDE 從照這篇 https://reurl.cc/dGkbyq 的做法,先從Arduino官網上下載最新版的Arduino開發工具後安裝之。然後再讓Arduino IDE掛載上WeMOS D1 R1這塊板子的相關資訊。最後要記得選定它在步驟1拿到COM埠代碼(註:筆者在測試本文時發現,V1.8.15版的Arduino IDE已不會有先前版次埠偶而會有跑掉未勾選的情況)。
3. Arduino程式開發起手式:blink 將ESP8266接上電腦,再依筆者先前拙著 https://reurl.cc/XWMr2E 測試妥接下來的軟硬體開發環境是否備妥(板載的LED能正常閃爍)。註:步驟3~4(再到6)採取的是樣板程式碼的decomposition(拆解)。若讀者已確定您的軟硬體開發環境是正常的,可直接跳到步驟5。
4. WiFi connection(連接測試) 步驟4~7可參考這篇 https://reurl.cc/GmyqQW 的做法。將您的一段式(即裝置一開機後自動地讓程式傳送帳號及密碼後就可以連網)WiFi AP(筆者是開自己的手機hot spot(熱點)讓開發板連接上網的。讀者若要設定成非手機的WiFi AP,請查詢該WiFi AP的相關設定)帳號及密碼填入下列template code(樣板程式)aaa及bbb處後燒入到開發板中即可如圖2~3的所示順利地連上網際網路。
  1. #include <ESP8266WiFi.h> //ESP8266連網用

  2. void setup() {
  3.   Serial.begin(9600);

  4.   WiFi.begin("aaa","bbb");
  5.   while(WiFi.status() != WL_CONNECTED) { //不斷重複等候WiFi AP連接上
  6.      delay(500);
  7.      Serial.print(".");
  8.   } //end of while

  9.   Serial.println(WiFi.localIP()); //顯示出開發板被配到的IP
  10. } //end of setup()

  11. void loop() { //沒用到,留個空殼即可
  12. } //end of loop()

  13. 圖2:開發板連上WiFi後會取得一個IP。

    圖3:在WiFi AP上可以看到該開發板已連接(筆者的開發環境是筆電亦連到手機熱點上網,故會顯示已有筆電和開發板共2個連線裝置)。

5. 建立Google Forms 建Google Forms的詳細過程已在步驟4中的YouTube影片網址中揭示。取得form的API key(金鑰)和field id(表單內的欄位名稱代碼)如圖4及圖5所示。其中,知導了建好的Google Forms的這兩項資訊後,可直接在瀏覽器上下達 https://docs.google.com/forms/d/e/xxx/formResponse?entry.yyy=zzz 的HTTP GET命令手動傳測資zzz(如圖6所示)。同時,讀者可以檢查表單對應到Google Sheet上已成功將zzz寫入了。其中,Google網站提供的web services(網路服務)項目可查閱 https://reurl.cc/EnllOm 所示。
總結,上述的流程可以順利的產生一條完整的HTTP GET命令,執行它就能把一筆測資送到Google Forms儲存。接著,再把這個命令依照Google Forms的API呼叫格式填到程式碼裡(步驟6),就可以完整的串接讀取測資、送雲端存檔的整個自動化流程了。
  1. 設定Google Forms,以取得金錀與欄位代碼。
  2. 組成HTTP GET命令(可在瀏覽器上手動下達測試)。
  3. 用支援HTTP呼叫的程式語言程式拼成合法的API格式後反複自動執行。


圖4:Google自動產生的表單金鑰(藍色色塊處的字串)。

圖5:Google自動產生的欄位名稱代碼 1245404726。

圖6:手動下HTTP GET命令成功的網頁畫面。

6. 修改樣板程式中的參數  

  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClientSecure.h> //下達HTTP GET用

  3. long  test_data; //存放類比腳位讀到的測資
  4. WiFiClientSecure Secure_client;

  5. //讀取類比腳位17測資
  6. void read_data() {
  7.    test_data = analogRead(17);
  8. }

  9. void upload2GoogleForms() {
  10.     Secure_client.setInsecure(); //[2]
  11.     if (Secure_client.connect("docs.google.com", 443)) {
  12.         Secure_client.println("GET /forms/d/e/xxx/formResponse?entry.yyy="+ String(test_data)+"&submit=Submit HTTP/1.1");
  13.         Secure_client.println("Host: docs.google.com");
  14.         Secure_client.println("Connection: close");
  15.         Secure_client.println();
  16.         Secure_client.stop();
  17.    } else { //Google returned 0
  18.       Serial.println("Google said no!");
  19.    } //end of if-else
  20. } //end of upload2GoogleForms()

  21. void setup() {
  22.    pinMode(17, INPUT);
  23.    Serial.begin(9600);
  24.    test_data = 0;
  25.    WiFi.begin("aaa","bbb");
  26.    while(WiFi.status() != WL_CONNECTED) {
  27.        delay(500);
  28.        Serial.print(".");
  29.    } //end of while()

  30.    Serial.println(WiFi.localIP());
  31. } //end of setup()

  32. void loop() {
  33.     read_data();
  34.     Serial.println(test_data);
  35.     upload2GoogleForms();
  36.     delay(5000);
  37. } //end of loop()

7. 燒入開發板 當程式燒入完成後,在Arduino IDE的serial monitor(序列埠監看器)可看到類比讀值不斷的更新,並且透過網路將之記錄到Google Sheet上。

Advanced learning(進階學習)

  1. 後端database(資料庫) 開發板上傳測資到雲端資料庫的選擇還有Google Sheet(不透過Google Forms,但不確定現在是否可行,因為Google的開放策略總是改來改去的)、ThingSpeak、自架的資料庫、…。
  2.  HTTP、HTTPS protocol(通信協定) 在「編程與開發環境建立步驟」一節步驟6樣板程式的第13行,為什麼要設定成insecure(不安全的)?讀者可以試試,把此行comment(註解)掉後實驗是否依然會成功?
  3. 和WiFi AP建立連線  在「編程與開發環境建立步驟」一節步驟6樣板程式的第6~12行,begin()、status()、localIP()這三個method(方法)是定義在ESP8266WiFi.cpp這隻程式(在 C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi\src 這個path(路徑)下可找到它)中的,它是怎麼implement(實現)的?
  4. 從樣板到專業或應用 現今編程已變的十分簡化,跟著SOP(Standard Operation,標準化流程)123…就搞定。如果只是拿來快速應用,It's ok. Everything is fine. 否則,我們得細想:業餘 vs. 專業?我會套快速樣板,別人也一樣會套,那差別在哪裡?還有,樣板雖美,但當後續程式maintain(維護)發生問題時(很多時候會發生在某些API改版)要怎麼debug(除錯)?另一方面,從樣板內的基礎、必要知識是哪些?要不要花時去了解?…學習是有層次的,端看我們的目的為何?
  5. 多欄位(multiple fields) HTTP GET命令 https://docs.google.com/forms/d/e/xxx/formResponse?entry.yyy1=zzz1&entry.yyy2=zzz2&entry.yyy3=zzz3 ,那「編程與開發環境建立步驟」歩驟6的程式要怎修改呢?
  6. 觸發條件(triggering conditions)設定 能否設定當某些條件成立時自動發出手機推播(push)警訊?例如:當Google Forms收到的溫度測值超過100度,可能這個感測器已燒毀…。
  7. 443 在「編程與開發環境建立步驟」步驟5樣板程式第14行的443是何意?(https://reurl.cc/gWAR4R)


  1. 六種授權條款。
  2. 筆者特別感謝慧手科技Lin Sam(https://reurl.cc/6aO3Gk)老板的大力協助,使得本實驗得以順利完成。

2021年6月22日 星期二

水可以奌火嗎?

 

水可以奌火嗎?

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB:http://gg.gg/TedLeeFB/
Blog:http://gg.gg/TedLeeBlog/

Jun. 22, 2021
88x31.png[2]

家中的熱水器突然罷工不出熱水。裝死洗了兩天冷水後,还是決定不能偷懶放著爛。所以呢,只好硬著頭皮,趁著上完課後趕緊來當半日水電工。
先看了幾
部水電工同人志來墊墊底 、。其中要拜的是這部,今日得以省下$$都靠它!
先講結論:其實只是進水的浮桶生鏽卡住,造成微動開関等不到它來啟動,而無法順利奌火而已,人,就是它殺的
 !

根据前面說的那部神片指引,先用三用電錶量測電池線路
。然後再往前一極測試俗稱的「水奌火」裝置(記得小時候好像看过熱水器是這樣廣告的,不曉得有沒記錯)。咦,直接short微電開関就聽叭叭的電撃声,往上頭看也可以看到電火花。所以咧,是誰要來啟動它去奌火呢?是水吧?那卡奌就跑出來了:原來是浮筒因為水垢加連動的鏍絲生鏽而卡卡。先用廢牙刷清潔、除白色水垢,再用鐵刷去鏽。用吹氣球吹掉這些雜物後,重新上奌WD-40潤滑並防鏽。
最後,裝回外殼
之前,再把生鏽處上奌WD-40、接線外殼有破損的用電工膠帶加固。這樣就完成了一趟水電工之旅了~。

後記:水奌火的原理
一開始開熱水會讓浮桶上升去彈壓微動開関,它一过電就誏電子奌火控制器奌火燃燒瓦斯。


参考資料:

2021年3月7日 星期日

小彼特開天眼:使用VIA Pixetto視覺感測器之形狀偵測功能

小彼特開天眼:

使用VIA Pixetto視覺感測器之形狀偵測功能[1]
Line:ted2016.kpvs
Email:Lct4246@gmail.com
FB:http://gg.gg/TedLeeFB/
Blog:http://gg.gg/TedLeeBlog/

Mar. 7, 2021
88x31.png[2]

難易度:★★★☆☆。

主題:音效

聲音效果常能在一般場合上起畫龍點睛之效。就讓我們一起來play music吧!

任務:

小彼特特別加裝了新設備「天眼」來破解酷巴佈下的重重障礙而賺取滿滿的金幣。我們一起來看小彼特如何大顯身手吧!(利用8787的形狀偵測功能來啟動micro:bit內建的瑪莉歐撞金幣的音效「ba ding」)。

 材料

品名

數量

單位

備註

VIA Pixetto視覺感測器(含長、短micro USB專用傳輸線各一條)

1

盒

 

Grove線

1

條

 

micro:bit主板

1

片

 

micro USB傳輸線(100cm)

1

條

 

KSB034 I/O擴充板(90度排針)

1

片

 

圓形物件

1

個

 

造形分析(結構)

請參考瑪莉歐撞金幣的場景 ,將8787及micro:bit結合到讀者的情境之中,以便說一個您的設計故事。

功能分析(電路、程式)

如下表所示,將8787 Grove線的黃白Tx、Rx和micro:bit的P1、P2相接,以雙電源共地方式連接8787和micro:bit(做實驗時可將兩者都接到同一部電腦上供電)。註:因為micro:bit的P0腳和音源輸出同線路,習慣上,將它保留給外部的蜂鳴器使用。

8787

micro:bit

黃

P1

白

P2

紅

+3V3

黑

GND

 


請參考本書範例5:心情指數的設定,在Pixetto Utility上套用圓形的形狀偵測功能。

當micro:bit出現8787初始化完成圖形之後,如果8787偵測到圓形物件,則讓micro:bit播出瑪莉歐撞金幣的ba ding特效聲。

完整的micro:bit積木程式可由此(https://reurl.cc/MZ6bVn)下載。

成果展示

本文的展示影片如此(https://reurl.cc/ravqp1)所示。

教學活動設計

  1. 主題曲 根據瑪莉歐主題曲簡譜(https://reurl.cc/8y6WE7),修改本範例程式,讓8787偵測到三角形時由micro:bit開始播曲子。

實作練習題

修改本範例程式,使得小彼特可以隨時自動計算獲得的金幣數。参考程式碼如下:


参考資料:

  1. 本文係參考VIA官網〈Micro:bit 程式設計〉(https://reurl.cc/Dvl20R)改寫而成。
  2. 六種授權條款。