2017-07-04 69 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); 
// --- 
}