歡迎來到輸入與輸出的精彩世界!

你有沒有想過,電子遊戲是怎樣知道你按下了按鈕?或者自動門是怎樣知道要為你打開呢?在這一章,我們將會一起探索電腦如何接收來自外界的資訊、如何處理這些資料,以及如何顯示或執行結果的奇妙過程!

如果一開始覺得電腦術語有點深奧,千萬不用擔心。透過生活中的有趣例子和好玩的編程專題,你很快就會成為電腦小專家!


核心概念:「輸入—處理—輸出」(IPO)循環

每一個電腦系統、機械人和程式,都遵循一個簡單的三步驟循環,稱為 IPO 循環(IPO Cycle):

1. 輸入(Input): 使用者或感應器傳入(into)電腦的資訊、數據或訊號。
2. 處理(Process): 電腦的大腦(演算法)運用這些資訊進行思考、計算或遵循指令規則。
3. 輸出(Output): 從電腦傳出(out)的結果,例如圖像、聲音、燈光或實體動作。

生活小比喻:烤多士(吐司)

我們可以把多士爐想像成一個電腦系統:
輸入: 你把麵包放進去,然後按下拉桿。
處理: 計時器開始倒數,發熱線逐漸變熱。
輸出: 香噴噴、暖烘烘又酥脆的多士彈了出來!

重點提示: 沒有輸入,電腦就沒有資料可以運作;沒有處理,電腦就無法做出決定;而沒有輸出,我們就永遠無法看到或聽到結果!


各式各樣的輸入形式

輸入是指觸發程式執行動作或為程式提供資訊的任何數據或訊號。輸入可以直接來自人類,也可以來自周圍的實體環境。

1. 使用者輸入(來自你的直接操作!)

這些是你在玩遊戲或使用程式時,向電腦發出指令的方式:

按鍵: 按下空白鍵、方向鍵,或在鍵盤上輸入字母來控制角色或輸入文字。
滑鼠與指標操作: 點擊按鈕、拖放物件,或在螢幕座標(即 \(x, y\) 位置)上移動滑鼠。
觸控螢幕手勢: 在平板電腦或手機螢幕上輕點、滑動或捏合縮放。
文字與數字提示: 當程式發問時輸入答案(例如 Scratch 中的「詢問 [你叫甚麼名字?] 並等待」積木,會把你輸入的內容存入「詢問的答案」積木中)。
音訊/語音: 透過咪高峰(麥克風)收集聲音(例如在遊戲中測量拍手聲有多大,或是錄製你的聲音)。

2. 感應器輸入(實體運算 Physical Computing)

電腦不只是放在書桌上;它們還可以內置在智能裝置中,例如 BBC micro:bitCrumble 控制板。這些裝置會使用實體輸入:

按鈕與開關: 按下 micro:bit 上的 A 鍵B 鍵,或者撥動電路上的開關。
光線感應器(光敏電阻 LDR): 測量房間的明暗程度(用於自動夜燈)。
溫度感應器: 檢測空氣的冷熱程度。
動作感應器(加速度計): 偵測裝置何時被搖晃、傾斜或移動。
濕度感應器: 檢測土壤是濕還是乾,用於自動植物澆水系統。

你知道嗎? 街燈到了晚上會自動亮起,可不是甚麼魔法——而是因為它內置了微型光線感應器(一種輸入),能夠偵測太陽何時落山!

重點提示: 輸入可以是使用者的操作(如點擊或打字),也可以是來自周圍世界的感應器讀數(如光線、傾斜度或溫度)。


各式各樣的輸出形式

輸出是指電腦完成處理指令後,所產生的動作、訊號、聲音或顯示內容。

1. 視覺輸出(我們看得見的事物)

螢幕圖像: 角色在螢幕上移動、更換造型、放大,或顯示對話泡泡(使用「說出」或「思考」積木)。
計分板與文字: 在螢幕上顯示玩家的最終得分或提示訊息。
單個 LED 燈: 小燈泡亮起、熄滅或閃爍。
彩色燈光(NeoPixels / Sparkles 全彩 LED): 實體電路上的彩色燈在紅、綠、藍色之間變換。
LED 點陣顯示屏: 由排列成網格的燈光組成,例如 BBC micro:bit 上的 \(5 \times 5\) LED 螢幕,可以顯示笑臉、數字或滾動文字。

2. 聽覺輸出(我們聽得見的事物)

揚聲器(喇叭)與蜂鳴器: 播放音效(例如角色跳躍時的「啵」一聲)、播放音符、發出警告嗶嗶聲,或大聲朗讀文字。

3. 動態與實體輸出(會移動或震動的事物)

馬達(電機): 帶動機械人的輪子轉動,讓自走車向前行駛。
伺服馬達(舵機): 轉動指定的角度,例如升起停車場的自動閘桿。
震動/觸覺回饋: 當遊戲角色撞到牆壁時,微型馬達會讓遊戲手掣(手把)震動。

重點提示: 輸出讓電腦能夠透過視覺(螢幕和 LED)、聽覺(揚聲器和蜂鳴器)以及動作(馬達和伺服馬達)與世界溝通互動。


在演算法與程式碼中運用輸入與輸出

現在讓我們來看看,在編程專題中輸入和輸出是如何緊密連接在一起的!

1. 事件驅動的輸入(Event-Driven Inputs)

在 Scratch 等圖像化積木編程語言中,程式通常會等待某個事件(即輸入)來觸發一組指令:

當 [空白] 鍵被按下 \(\implies\) 播放音效 [Laser]
當此角色被點擊 \(\implies\) 造型換成 [下一個造型]
當晃動時(在 micro:bit 上) \(\implies\) 顯示隨機數字

2. 條件驅動的輸入:選擇結構(Selection)

我們可以使用選擇結構(即 如果... 那麼... 否則... 積木)來檢查輸入,並決定要產生甚麼輸出:

如果 <按下鍵 [向上鍵]?> 那麼 y 改變 \(10\)
如果 <溫度 \(> 25\)> 那麼 開啟馬達 [ON](啟動風扇降溫!)

3. 將輸入儲存在變數中

變數(Variable)就像電腦記憶體中有名字的儲物盒,用來存放數據。當使用者提供輸入時,我們通常會將它存放在變數中,以便稍後使用:

• 步驟 1: 電腦發問:「你叫甚麼名字?」(輸入提示)
• 步驟 2: 使用者輸入:"Maya"(輸入數據)
• 步驟 3: 程式將變數 PlayerName 設為 詢問的答案(儲存輸入)
• 步驟 4: 角色說出:「Hello Maya!」(輸出)

4. 預測與測試輸出:除錯(Debugging)

優秀的電腦科學家一定會測試自己的程式!你應該設定測試輸入,檢查輸出是否符合預期:

測試輸入: 按下向右鍵。
預期輸出: 角色向右移動 \(10\) 步。
實際輸出: 角色向上移動了 \(10\) 步。(糟糕!我們發現了程式錯誤,需要除錯修復!)。

重點提示: 輸入能夠觸發事件或檢查條件,而將它們儲存在變數中,可以幫助程式產生我們想要的精確輸出


常見錯誤與需要避免的陷阱

小小程式設計師要注意避開以下常見的思維誤區喔!

誤區 1:把電腦螢幕混淆為輸入裝置。
事實: 普通電腦螢幕是輸出裝置,因為它是用來顯示圖像的。觸控螢幕則很特別,因為它同時具備輸入裝置(感應你的觸摸)和輸出裝置(顯示畫面)的雙重功能!

誤區 2:以為電腦會「完全自動」思考和行動。
事實: 自動化裝置(如自動感應門或花園自動灑水器)並沒有人類的大腦。它們只是在運行預先編寫好的演算法,等待特定的感應器輸入(如動態或濕度訊號),然後才觸發對應的輸出

誤區 3:忘記了「處理」這個步驟。
事實: 如果沒有運算指令,輸入不會瞬間自動變成輸出。如果你請使用者輸入兩個數字,除非你的演算法中包含加法運算積木,否則電腦不會自動把它們相加!

誤區 4:把儲存裝置與輸入/輸出混淆。
事實: USB 記憶棒(隨身碟)和硬碟是用來儲存資料(保存檔案以備後用)的,而不是直接用來感應外界資訊(輸入)或呈現動作結果(輸出)。


快速複習:測測你的小宇宙!

來動動腦筋,完成以下快速配對挑戰,看看你掌握了多少:

將輸入與對應的感應器配對:
1. 搖晃遊戲手掣 \(\implies\) 加速度計/動作感應器
2. 檢測睡房光線是否昏暗 \(\implies\) 光線感應器(光敏電阻 LDR)
3. 輸入你的秘密密碼 \(\implies\) 鍵盤(按鍵)

將輸出與對應的裝置配對:
1. 在 micro:bit 上顯示笑臉 \(\implies\) \(5 \times 5\) LED 點陣螢幕
2. 讓玩具車在地毯上向前行駛 \(\implies\) 馬達
3. 獲勝時播放勝利音樂 \(\implies\) 揚聲器/蜂鳴器

記住這個黃金法則: 輸入傳進去,演算法進行處理,然後呈現出輸出