2017-07-04 67 views
0

所以我要在這時候我跑我的代碼和我的超聲波傳感器的問題與H橋和Arduino的運行汽車Arduino的代碼,並與電機H橋一臺電機的轉速爲所有的時間和其他每6秒旋轉2秒,但我不知道爲什麼。任何幫助?問題與根據編寫的代碼

下面是代碼:

int in1 = 2; 
int in2 = 3; 
int in3 = 4; 
int in4 = 5; 
int in5 = 6; 
int in6 = 7; 
int trig = 8; 
int echol = 9; 
int echor = 12; 
int echof = 11; 
long df, tf, dr, tr, dl, tl; 
void setup() { 

    Serial.begin(9600); 
    } 

void loop() { 

pinMode (in1, OUTPUT); 
pinMode (in2, OUTPUT); 
pinMode (in3, OUTPUT); 
pinMode (in4, OUTPUT); 
pinMode (in5, OUTPUT); 
pinMode (in6, OUTPUT); 
pinMode (trig, OUTPUT); 
pinMode (echol, INPUT); 
pinMode (echor, INPUT); 
pinMode (echof, INPUT); 


forward(); 

    digitalWrite (trig, HIGH); 
    delay (0.01); 
    tf = pulseIn (echof, HIGH); 
    digitalWrite (trig, LOW); 
    df = tf * 0.03156; 

    if (df < 1.5){ 
    digitalWrite (trig, HIGH); 
    delay (0.01); 
    tr = pulseIn (echor, HIGH); 
    tl = pulseIn (echol, HIGH); 
    digitalWrite (trig, LOW); 
    dr = tr * 0.03156; 
    dl = tl * 0.03156; 

    if (dr > dl) { 

    right(); 
    delay (5000); 
    forward(); 

    } 
    else { 

    left(); 
    delay (5000); 
    forward(); 

    } 

} 

} 



void forward(){ 
digitalWrite (in1, HIGH); 
digitalWrite (in2, LOW); 
digitalWrite (in3, HIGH); 
digitalWrite (in4, LOW); 
digitalWrite (in5, HIGH); 
digitalWrite (in6, LOW); 
} 

void backward(){ 
    digitalWrite (in1, LOW); 
    digitalWrite (in2, HIGH); 
    digitalWrite (in3, LOW); 
    digitalWrite (in4, HIGH); 
    digitalWrite (in5, LOW); 
    digitalWrite (in6, HIGH); 
} 

void left(){ 
    digitalWrite (in1, LOW); 
    digitalWrite (in2, LOW); 
    digitalWrite (in3, HIGH); 
    digitalWrite (in4, LOW); 
    digitalWrite (in5, HIGH); 
    digitalWrite (in6, LOW); 
} 

void right(){ 
    digitalWrite (in1, HIGH); 
    digitalWrite (in2, LOW); 
    digitalWrite (in3, LOW); 
    digitalWrite (in4, LOW); 
    digitalWrite (in5, HIGH); 
    digitalWrite (in6, LOW); 
} 
+0

您使用的是什麼H-Bridge模塊? –

回答

0

不知道那是錯的一切,但通過TL * 0.03156乘以long並在long存儲的值可能不是你做什麼打算。您應該使用浮點值來包含這種計算的結果。

0

首先,你應該將安裝程序(您的PIN碼設置),則無需重新初始化每個環形針I/O設置。

void Setup() 
{ 
    Serial.begin(9600); 
    pinMode (in1, OUTPUT); 
    pinMode (in2, OUTPUT); 
    pinMode (in3, OUTPUT); 
    pinMode (in4, OUTPUT); 
    pinMode (in5, OUTPUT); 
    pinMode (in6, OUTPUT); 
    pinMode (trig, OUTPUT); 
    pinMode (echol, INPUT); 
    pinMode (echor, INPUT); 
    pinMode (echof, INPUT); 
} 

從我所瞭解的H橋模塊來看,他們通常每個電機有3個輸入,其中每個電機一次只能有一個輸入。我無法找到該效果的任何相關離子你的代碼....這是一個約束,所以你應該組織圍繞它的代碼。這會使讀取和調試更容易。目前在Arduino的沒有調試,因此組織代碼確實有很大的幫助。如果你需要更多的幫助,這將肯定是有很多其他人更容易理解你的代碼做什麼。

void MotorA(int dir) 
{ 
    // dir = 0 = STOP, +1 = Forward, -1 = Reverse 
    digitalWrite(in1, dir > 0);  
    digitalWrite(in2, dir == 0);  // You gave no details on the module 
    digitalWrite(in3, dir < 0);  // you have. the actual logic may differ... 
} 

void MotorB(int dir) 
{ 
    // dir = 0 = STOP, +1 = Forward, -1 = Reverse 
    digitalWrite(in4, dir > 0); 
    digitalWrite(in5, dir == 0); 
    digitalWrite(in6, dir < 0); 
} 

void Stop() 
{ 
    MotorA(0); 
    MotorB(0); 
} 

void Forward() 
{ 
    MotorA(+1); 
    MotorB(+1); 
} 

void Reverse() 
{ 
    MotorA(-1); 
    MotorB(-1); 
} 

void Left() 
{ 
    MotorA(+1); 
    MotorB(-1); 
} 

void Right() 
{ 
    MotorA(-1); 
    MotorB(+1); 
} 

我還建議你用一個簡單的循環來開始啓動,直到你有運行電機?一次添加一個功能。這將幫助您最終完成項目,並且準備得更快。

void Loop() 
{ 
    Forward() 
    delay(5000); 
    Stop() 
    delay(1000); 
    Reverse(); 
    delay(1000); 
// --- 
}