我的超音波避障是按照書籍的編譯去編寫的,可是寫出來編譯出現以下的這些訊息diy10_6A.ino: In function 'void loop()':
diy10_6A.ino:116:10: error: 'turnRigh' was not declared in this scope
diy10_6A.ino:116:37: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
編譯時發生錯誤
以下我的自編程式:
const byte TrigPin = 13;
const int EchoPin = 12;
const int dangerThresh = 580;
const byte speed = 100;
long distance;
const byte ENA = 5;
const byte ENB = 6;
const byte IN1 = 10;
const byte IN2 = 9;
const byte IN3 = 8;
const byte IN4 = 7;
byte dir = 0; // 記錄行進狀態,0代表「前進」,1代表「判斷」。
void stop() {
// 馬達停止
analogWrite(ENA, 0);
// 馬達A的PWM輸出
analogWrite(ENB, 0);
// 馬達B的PWM輸出
}
void forward() { // 馬達轉向:前進(兩個馬達都正轉)
analogWrite(ENA, speed); // 馬達A的PWM輸出
digitalWrite(IN1, HIGH); // 請參閱表10-5的設定
digitalWrite(IN2, LOW);
analogWrite(ENB, speed); // 馬達B的PWM輸出
digitalWrite(IN3, HIGH); // 請參閱表10-5的設定
digitalWrite(IN4, LOW);
}
void backward() { // 馬達轉向:後退(兩個馬達都反轉)
analogWrite(ENA, speed); // 馬達A的PWM輸出
digitalWrite(IN1, LOW); // 請參閱表10-5的設定
digitalWrite(IN2, HIGH);
analogWrite(ENB, speed); // 馬達B的PWM輸出
digitalWrite(IN3, LOW); // 請參閱表10-5的設定
digitalWrite(IN4, HIGH);
}
void turnLeft() { // 馬達轉向:左轉(馬達A反轉、馬達B正轉)
analogWrite(ENA, speed); // 馬達A的PWM輸出
digitalWrite(IN1, LOW); // 請參閱表10-5的設定
digitalWrite(IN2, HIGH);
analogWrite(ENB, speed); // 馬達B的PWM輸出
digitalWrite(IN3, HIGH); // 請參閱表10-5的設定
digitalWrite(IN4, LOW);
}
void turnRight() { // 馬達轉向:右轉(馬達A正轉、馬達B反轉)
analogWrite(ENA, speed); // 馬達A的PWM輸出
digitalWrite(IN1, LOW); // 請參閱表10-5的設定
digitalWrite(IN2, HIGH);
analogWrite(ENB, speed); // 馬達B的PWM輸出
digitalWrite(IN3, HIGH); // 請參閱表10-5的設定
digitalWrite(IN4, LOW);
}
long ping() { // 超音波感測程式
digitalWrite(TrigPin, HIGH); // 觸發腳設定成高電位
delayMicroseconds(5); // 持續5微秒
digitalWrite(TrigPin, LOW); // 觸發腳設定成低電位
return pulseIn(EchoPin, HIGH); // 測量高電位的持續時間(µs)
}
void setup(){
pinMode(TrigPin, OUTPUT); // 觸發腳設定成「輸出」
pinMode(EchoPin, INPUT); // 接收腳設定成「輸入」
// 馬達控制板的接腳全都設定成「輸出」
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
distance = ping(); // 讀取障礙物的距離
Serial.print("distance:"); //輸出距離(單位:公分)
Serial.println(distance); //顯示距離
if (distance>dangerThresh) // 如果距離大於20cm…
{
if (dir != 0) // 如果目前的行進狀態不是「前進」
{
dir = 0; // 設定成「前進」
stop(); // 暫停馬達0.5秒
delay(500);
}
backward(); // 前進
}
else
{
if (dir != 1) // 如果目前的狀態不是「後退」
{
if (turnRight > turnLeft) // 右邊小於左邊 左轉
{
{
dir = 1; // 設定成「左轉」
stop(); // 暫停馬達0.5秒
delay(500);
}
turnRight();
}
if (turnRight <= turnLeft) // 右邊大於左邊 右轉
{
{
dir = 1; // 設定成「右轉」
stop(); // 暫停馬達0.5秒
delay(500);
}
turnLeft();
}
if (turnRigh < 3 && turnLeft < 3) //假如 左邊距離和右邊距離小於3公分
{
dir = 1; // 設定成「右轉」
stop(); // 暫停馬達0.5秒
delay(500);
}
}
forward(); // 向後退
}
delay(500); // 持續0.5秒
}
請教各位,小弟我編譯的程式,哪些出了問題,可以指導提點我一下,謝謝 |