2017-07-04 3 views
0

So habe ich ein Problem, in dem, wenn ich meinen Code mit meinen Ultraschallsensoren laufen, und h Brücke mit Motoren ein Motor spinnt zu jeder Zeit und der andere Spinnt alle 6 Sekunden für 2 Sekunden, aber ich weiß nicht warum. Irgendeine Hilfe? HierProblem mit Arduino-Code läuft Motoren mit H-Brücke und Arduino nach dem geschriebenen Code

ist der Code:

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

Welches H-Brückenmodul verwenden Sie? –

Antwort

0

Nicht sicher von allem, was falsch ist, aber eine long von tl * 0,03156 und Speichern des Werts in einem long multipliziert wird wahrscheinlich nicht tun, was Sie beabsichtigen. Sie sollten Gleitkommawerte verwenden, um die Ergebnisse dieser Berechnungsart zu enthalten.

0

Zunächst sollten Sie Ihre Pin-Setup in Setup verschieben(), es ist nicht notwendig, Pin-Setup auf jedem Loop neu zu initialisieren.

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); 
} 

Von dem, was ich über den H-Brückenmodul weiß, haben sie in der Regel 3 Eingänge pro Motor, von denen nur eine auf zu einer Zeit sein sollte. Ich konnte keine Korrelation zu diesem Effekt in Ihrem Code finden .... Dies ist eine Einschränkung, also sollten Sie Ihren Code darum herum organisieren. Es würde das Lesen und Debuggen erleichtern. Es gibt keinen Debugger auf dem Arduino, daher hilft das Organisieren von Code sehr. Und wenn Sie mehr Hilfe benötigen, ist es für andere sicher einfacher zu verstehen, was Sie tun.

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); 
} 

Darf ich Ihnen auch vorschlagen, mit einer einfacheren Schleife zu beginnen, bis Sie die Motoren laufen haben? Fügen Sie jeweils ein Feature hinzu. Dies wird Ihnen helfen, Ihr Projekt am Ende schneller fertig zu stellen.

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