這是本班透過FabLab自造實驗室創客課程與業師合作的成果,本次上課為上學期課程之延伸,上學期所教授內容同樣為Arduino Nano電路板,使用Scratch for Arduino軟體,透過簡單的拼圖邏輯,引領我們進入電路版的世界,能夠在台中家商上到這樣的課程,真的是一大福音。
而本學期同學們已了解Arduino原理後,本學期進階到利用Arduino IDE界面撰寫程式碼,其了解過程相對來講需要較長的時間去理解,但也讓我們見識到了程式碼的連動性,讓我們大開眼界了。
以下為本次US-016所使用的程式碼片段,請參考:
int DisValue; //超音波距離
const int MotorLeftA=2; //左馬達A
const int MotorLeftB=3; //左馬達B
const int MotorRightA=4; //右馬達A
const int MotorRightB=5; //右馬達B
void setup(){
//序列埠初始化
Serial.begin(115200);
//馬達腳位為輸出
pinMode(MotorLeftA,OUTPUT);
pinMode(MotorLeftB,OUTPUT);
pinMode(MotorRightA,OUTPUT);
pinMode(MotorRightB,OUTPUT);
}
void loop(){
//DisValue為讀取並計算後的值
DisValue=SensorRead();
//當DisValue距離小於80 需執行轉彎
if(DisValue<80){
Release();
delay(1000);
TurnRight();
delay(200);
Release();
delay(1000);
}//其餘前進
else{
Forward();
}
}
// int yyy(){return value;}執行完程式後回傳value
int SensorRead(){
int Value = analogRead(A0);
Value *= 3;
Value /=10;
Serial.print("Distance is: ");
Serial.println(Value);
Serial.println(" cm");
return Value;
}
//void xxx(){} 執行迴圈依次
void Forward(){
Serial.println("Forward");
digitalWrite(MotorLeftA,1);
digitalWrite(MotorLeftB,0);
digitalWrite(MotorRightA,1);
digitalWrite(MotorRightB,0);
}
void Backward(){
Serial.println("Backward");
digitalWrite(MotorLeftA,0);
digitalWrite(MotorLeftB,1);
digitalWrite(MotorRightA,0);
digitalWrite(MotorRightB,1);
}
void TurnRight(){
Serial.println("TurnRight");
digitalWrite(MotorLeftA,1);
digitalWrite(MotorLeftB,0);
digitalWrite(MotorRightA,0);
digitalWrite(MotorRightB,1);
}
void TurnLeft(){
Serial.println("TurnLeft");
digitalWrite(MotorLeftA,0);
digitalWrite(MotorLeftB,1);
digitalWrite(MotorRightA,1);
digitalWrite(MotorRightB,0);
}
void Release(){
Serial.println("Release");
digitalWrite(MotorLeftA,0);
digitalWrite(MotorLeftB,0);
digitalWrite(MotorRightA,0);
digitalWrite(MotorRightB,0);
}