不只是上傳程式!這是我們賦予機器「智慧」的第一步!

今天下午 (10/29),我們迎來了「自走車 DIY」的下半場——軟體實戰。如果說,兩週前的我們是打造「軀殼」的硬體工程師;那麼今天,我們扮演的就是賦予「靈魂」的軟體工程師。
關卡重重,但這就是「研究」的日常

坦白說,今天的挑戰,遠比我們預期的要多。
雖然因為學校其他活動,今天參與的夥伴人數稍減,但到場的夥伴,都很專注在課程上。從下載被系統封鎖的 Zip 壓縮檔、奮戰複雜的驅動程式安裝,到處理部分電腦有不同的 COM 埠接口問題…… 我們幾乎把新手裝環境會遇到的坑都踩過了一遍。



不過,這正是「研究社」最真實的風景。我們看到的,不是挫折或放棄,而是各組夥伴們互相討論、幹部們穿梭協助、共同Debug的團隊精神。當你遇到困難,夥伴就在你身邊,這就是社團的價值。
注入靈魂的訊號:當「上傳成功」的訊息亮起
經過一番努力,我們欣喜地看到,所有組別都在表定下課時間前 20 分鐘,成功將第一支範例程式寫入自走車!
當你按下「上傳」按鈕,看到 IDE 顯示「上傳成功」的那一刻,你的自走車就已經從一堆零件,蛻變為一個真正等待指令的「機器人」了。
我們知道,因為繁瑣的前置作業佔據了太多時間,我們很可惜地沒能深入講解程式碼的具體運作,這也是我們幹部群需要更有效率、繼續精進的地方。
但,夥伴們,別擔心!
最艱難、最繁瑣的「建置環境」階段已經過去了。從硬體組裝到軟體安裝,你的平台已經準備就緒。
而「程式設計」的邏輯,遠比你想像的更直觀。我們社團的程式並不需要艱深的演算法,你只需要——想像自己就是一台機器人。
「當我感應到前方有障礙物時,我該怎麼辦?」
「是該左轉、右轉,還是先倒退一步?」
用這個角度去思考,你會發現寫程式就像在規劃自己的反應一樣,充滿樂趣。
自走車程式基礎
作為補償,我們在這裡先為大家帶來今天範例程式的「核心邏輯」快速解說。
我們今天範例程式的核心,其實都集中在 loop() 這個主程式中。這就是機器人的「大腦」,它會不斷重複執行裡面的判斷。
你可以想像機器人只會做兩件事:
-
偵測:
程式的第一件事,就是呼叫getDistance()來看看「前方有多遠?」// 取得使用超聲波感測器感應的前方距離(cm) long d = getDistance(); // getDistance 是副程式,這裡先不展開介紹 -
判斷:
拿到距離d之後,就是一個巨大的if... else...判斷句,也就是「二選一」的邏輯判斷:-
情況 A:如果路是通的
如果d > 15(前方 15 公分以上都沒東西),
或d == 0(感測器沒抓到東西,當作安全) ...if (d > 15 || d == 0) { // 那我就... forward(); // 繼續前進 } -
情況 B:如果遇到障礙物
否則... (代表前方 15 公分內有東西擋路了!)else { // 我必須執行一連串的「閃避動作」: stopMotor(); // 1. 立刻停止 delay(200); // 等待一下 leftTurn(); // 2. 向左轉 (準備繞出去) delay(300); // 左轉持續 300 毫秒 forward(); // 3. 往前開一點 (繞到障礙物旁邊) delay(300); // 前進持續 300 毫秒 rightTurn(); // 4. 向右轉 (把車頭回正) delay(300); // 右轉持續 300 毫秒 forward(); // 5. 往前開一點 (安全通過障礙物) delay(200); // 前進持續 200 毫秒 // (後面是切回原路線的動作...依此類推) }
-
你看,這整套迴避動作,就是一連串 forward()、leftTurn()、rightTurn() 這些「基本動作」的組合。而這些基本動作,又分別去控制馬達的腳位。
這就是程式的邏輯!我們之後的課程,就是來修改這些 delay() 的時間,或是 leftTurn() 的角度,讓它跑得更完美!
感謝今天所有堅持到底、共同奮戰的夥伴!
你們的耐心與專注,讓我們成功跨越了軟體的門檻。現在,萬事俱備。期待在接下來的社課中,我們能真正開始「玩」程式,一同探索如何讓你的自走車更聰明、更有效率!
我們下次見!



