2017-07-04 9 views
0

私は自分のコードを私の超音波センサで実行し、モータとhブリッジを使って常に1つのモータが回転し、 6秒ごとに2秒間スピンしますが、理由はわかりません。どんな助け?ここで Arduinoコードで書かれたコードに従ってHブリッジとArduinoでモータを動かす

はコードです:間違っているすべての

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ブリッジモジュールを使用していますか? –

答えて

0

わからないが、TL * 0.03156でlongを乗算し、おそらくあなたが意図し何をしていませんlongに値を格納します。そのような計算の結果を格納するには、浮動小数点値を使用する必要があります。

0

まず、Setup()でピン設定を移動する必要があります。すべてのループでピンのI/O設定を再初期化する必要はありません。

私はHブリッジモジュールについて知っているので、通常、1つのモーターに3つの入力がありますが、そのうちの1つは一度にオンにする必要があります。私はあなたのコードにその影響を与える相関関係を見つけることができませんでした....これは制約なので、コードを整理する必要があります。これにより、読みやすくデバッグが容易になります。 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); 
} 

モーターを稼働させるまで、もっと簡単なループから始めてみることをお勧めしますか?一度に1つの機能を追加します。これは、あなたのプロジェクトを完成させ、最終的にはより早く準備するのに役立ちます。

void Loop() 
{ 
    Forward() 
    delay(5000); 
    Stop() 
    delay(1000); 
    Reverse(); 
    delay(1000); 
// --- 
} 
関連する問題