|
補上程式碼:
/*
三感測器自走車程式
-- 感測器訊號輸入為數位訊號 1: white, 0: black
-- 雙馬達控制轉向
-- 使用PWM控制馬達轉速, 但無後退動作
狀態與動作
白黑白 直進 (全速) (全速)
黑黑白 左轉 (半速) (全速)
白黑黑 右轉 (全速) (半速)
黑白白 快速左轉 (停止) (全速)
白白黑 快速右轉 (全速) (停止)
白白白 停止 (停止) (停止)
*/
// constants won't change. They're used here to
// set pin numbers:
const int SensorLeft = 2; //左感測器輸入腳
const int SensorMiddle = 3; //中感測器輸入腳
const int SensorRight = 4; //右感測器輸入腳
const int MotorLeft = 5; //左馬達輸出腳
const int MotorRight = 6; //右馬達輸出腳
// variables will change:
int SL; //左感測器狀態
int SM; //中感測器狀態
int SR; //右感測器狀態
void setup() {
// 輸出入椄腳初始設定, 指定為輸入或輸出
pinMode(SensorLeft, INPUT);
pinMode(SensorMiddle, INPUT);
pinMode(SensorRight, INPUT);
pinMode(MotorLeft, OUTPUT);
pinMode(MotorRight, OUTPUT);
// 預設馬達輸出為 0 (停止)
digitalWrite(MotorRight, LOW);
digitalWrite(MotorLeft, LOW);
}
void loop(){
// 讀取感測器狀態值
SL = digitalRead(SensorLeft);
SM = digitalRead(SensorMiddle);
SR = digitalRead(SensorRight);
// HIGH(1) : white region.
// LOW(0) : black region.
if (SM == LOW) { //中感測器在黑色區域
if (SL == LOW & SR == HIGH) { // 左黑右白, 向左轉彎
analogWrite(MotorLeft, 127); // 左輪半速
analogWrite(MotorRight, 255); // 右輪全速
}
else if (SR == LOW & SL == HIGH) { // 左白右黑, 向右轉彎
analogWrite(MotorLeft, 255); // 左輪全速
analogWrite(MotorRight, 127); // 右輪半速
}
else { // 兩側均為白色, 直進
analogWrite(MotorLeft, 255); // 兩輪都全速
analogWrite(MotorRight, 255);
}
}
else { // 中感測器在白色區域
if (SL == LOW & SR == HIGH) { // 左黑右白, 快速左轉
//digitalWrite(MotorLeft, LOW);
//digitalWrite(MotorRight, HIGH);
analogWrite(MotorLeft, 0); // 左輪停止
analogWrite(MotorRight, 255); // 右輪全速
}
else if (SR == LOW & SL == HIGH) { // 左白右黑, 快速右轉
//digitalWrite(MotorRight, LOW);
//digitalWrite(MotorLeft, HIGH);
analogWrite(MotorLeft, 255); // 左輪全速
analogWrite(MotorRight, 0); // 右輪停止
}
else { // 都是白色, 停止
//digitalWrite(MotorRight, LOW);
//digitalWrite(MotorLeft, LOW);
analogWrite(MotorLeft, 0);
analogWrite(MotorRight, 0);
}
}
} |
|