---
# System prepended metadata

title: Mbot濃縮講義
tags: [Arduino]

---

###### tags: `Arduino`
# Mbot濃縮講義
## 前置安裝
Arduino去官網載1.8.19(win 7 and newer)，其他資料在
https://github.com/Harrysome/2023-NTNU-EEcamp

下載解壓縮後把擴充函式庫(Makeblock-Libraries-master)丟進去

開啟EEcamp裡的車車原廠程式碼，上傳成功的話應該開電時會叫三聲

## APP inventor
- 到官網按creat，然後註冊(一路確定按到底)，建立新專案(**檔名不要設中文或數字**)(網頁語言自己改(在右上角))
- 左邊最下面有"擴充套件"，進去，選URL然後貼上網址(網址在github上)
- 把**Mbot**和**藍芽客戶端(在"通訊"裡)** 先拉進手機裡
- 依序把按鍵，標籤，滑桿丟進手機，記得要用**水平配置**或是**表格配置**，不然你永遠無法把物件並排
- 到程式設計開始拉方塊
- 依照按鈕的功能下手
    - connect/disconnect
    - 滑桿/標籤
    - RGB輸入
    - 上下左右鍵
    - setRGB/resetRGB
- **確定權限設定的方塊有拉出來**
- 可用APK打包並下載，或是用AI companion APP連線測試
- 和車車配對請貼著車車，防止連到別人的車或是連線不到
- 若有多時間會教如何再新增按鈕來撥放音樂或設計不同的APP介面來控車


### Debug
- 車子連不到請**確定你有開電**，在不然就車子接電腦充電一下在試，連線請手機貼著車子，不要連到別人的
- 真的連不到請找講師或生機股更換車車
- 沒安卓手機請找生機借公用的，或是學員共用，或麻煩隊輔借一下手機使用
- 按鈕按了沒反應，請確定你的按鈕有接上方塊，或是馬達數值是否有放錯
- 滑桿數值的標籤記得要連動滑桿的指針位置進行變更

## Arduino程式結構
- 引入函式庫，物件設定
- setup 只進行一次的動作或設定
- loop 無限迴圈
- 副程式

## 序列(Serial)
### 函數
```cpp=
Serial.begin(9600)   //一定要打在setup裡,鮑率記得要和視窗一樣
Serial.print(你要的東西)
Serial.available()      //放在if裡判斷是否有資料進來
Serial.read();    //讀取輸入的字元
delay(毫秒數);
```

## 馬達
```cpp=
#include <MeMCore.h>
MeDCMotor motorL(M1);  //馬達不要接反
MeDCMotor motorR(M2);

motorL.run(數值);  //數值介在-255~255
motorR.run(數值);
motorL.stop();
motorR.stop();
```

## if else/ switch
上過程式設計的各位應該都會(~~除非你被當~~)，注意判斷的等號要兩個，Serial.available()自己就能當條件，switch的break記得要打，讀取的值只能訂成字元(除非學員自己會就讓他去玩)

## 副程式和序列控制
注意Stop(int s)是大寫S，其他就確定學員有打完四個方向，速度用100~150就差不多

## RGB LED
~~不會用for和while的去面壁~~
for裡的i是區域變數，出了for就不能用
led設定記得腳位是7，led個數是2
要設兩個led用0，要設定左或右用1/2

## 超音波 & 紅外線
```cpp=
MeUltrasonicSensor ultraSensor(PORT_3);
MeLineFollower lineFinder(PORT_2);

int dis = ultraSensor.distanceCm(); //距離讀取
int num = lineFinder.readSensors(); //路線情況讀取
```

超音波的讀取範圍在3~400，盡量找平的反射面讀取比較容易

紅外線讀到白色是1黑色是0，用2進位組合就是0123，再組合馬達移動就能做出循跡車

# Arduino debug 方法
## 遇到亂碼
- 重開幾次序列視窗，同時確定鮑率是對的(也要確定begin(9600)有設定)
- 重新上傳
- 重開IDE
- 確定序列埠有選對，確定Mbot有開，再不然就重新插拔

## 編譯錯誤(exit 1)
- 確定序列埠有選對，確定Mbot有開，再不然就重新插拔
- 若不確定序列，對windows按右鍵(或按win+X)>>裝置管理員>>連接埠(COM和LPT)，插拔Mbot看看哪個東西會變
- 若電腦不能判讀(電腦太老)，EEcamp資料夾有CH341SER的安裝檔，執行然後按install，成功後再去裝置管理員確定是否安裝成功

## 函式不存在、變數未定義、expected 'something'
~~再不聽課阿~~
- 到草稿碼>>匯入程式庫>>加入zip程式庫，把在EEcamp資料夾裡的master壓縮檔丟進去
- 確定你的函式英文沒拼錯字
- 注意是否全域變數定成區域變數，或是根本沒有宣告
- 確定分號、括號都有打對
- 確定空格沒有打到全形(這很麻煩)

## 馬達不會動
- 確定馬達的螺絲有鎖好
- 可能電池沒電，要充一下電
- 馬達數值調太小(盡量界於100或-100之間)
- 重新插拔馬達的線

## 馬達方向
- 確定M1和M2有沒有插反(左M1右M2)
- 注意如果是要設前進，兩個馬達應該數值要相反
- 出現只設一邊但兩邊都會移動，去找生機或講師換車

## 超音波模組異常
- 確定PORT和模組接的線是一樣的數字
- loop裡加個delay(10)或(100)

## 紅外線異常
- 條件判讀是直接用0123，不能用二進制
- 黑色或暗色物體是0，白色或淺色物體是1，確定循跡路線的顏色夠分明

# REF
[Arduino 簡說](/IogUDGJiRo-LvgfM73XVnA)
[Arduino 程式架構及語法](/uh_UWZRaRNeGPiV-3_4Fxg)
[Arduino(C++)基礎語法](/Juvtj4mqSP6qLHP_94F7Zg)