2017-10-05 1 views
0

Kürzlich hatte ich ein Problem, wo ich 2 weitere if-Anweisungen hinzufügen und es stoppt meinen Code alle zusammen. Zum Beispiel funktioniert der folgende Code mit den beiden gyroX if-Anweisungen, aber sobald ich diese beiden gyroy if-Anweisungen hinzugefügt habe, wird der gesamte Code nicht mehr ausgeführt. Vorschläge zur Lösung dieses Problems sind willkommen.Programm stoppt, nachdem ich mehr if-Anweisungen hinzufügen

#include <Wire.h> 
#include <Servo.h> 

Servo servo1; 
Servo servo2; 
Servo servo3; 
Servo servo4; 

int pos1 = 0; 
int pos2 = 0; 

long gyroX, gyroY, gyroZ; 

void setup() { 
    Serial.begin(9600); 
    Wire.begin(); 
    setupMPU(); 
    servo1.attach(4); 
    servo2.attach(5); 
    servo3.attach(6); 
    servo4.attach(7); 
} 

void loop() { 
    recordGyroRegisters(); 
    if(gyroX <= 0) 
    { 
     pos1 += 1; 
     servo1.writeMicroseconds(pos1); 
     servo3.writeMicroseconds(pos1); 
    } 
    if(gyroX > 0) 
    { 
     pos1 -= 1; 
     servo1.writeMicroseconds(pos1); 
     servo3.writeMicroseconds(pos1); 
    } 
    if(gyroY <= 0) //PROBLEM OCCURS WHEN I ADD THIS FUNCTION 
    { 
     pos2 += 1; 
     servo2.writeMicroseconds(pos2); 
     servo4.writeMicroseconds(pos2); 
    } 
    if(gyroY > 0) //PROBLEM OCCURS WHEN I ADD THIS FUNCTION 
    { 
     pos2 -= 1; 
     servo2.writeMicroseconds(pos2); 
     servo4.writeMicroseconds(pos2); 
    } 
} 

void setupMPU(){ 
    Wire.beginTransmission(0b1101000); 
    Wire.write(0x6B); 
    Wire.write(0b00000000); 
    Wire.endTransmission(); 
    Wire.beginTransmission(0b1101000); 
    Wire.write(0x1B); 
    Wire.write(0x00000000); 
    Wire.endTransmission(); 
    Wire.beginTransmission(0b1101000); 
    Wire.write(0x1C); 
    Wire.write(0b00000000); 
    Wire.endTransmission(); 
} 

void recordGyroRegisters() { 
    Wire.beginTransmission(0b1101000); 
    Wire.write(0x3B); 
    Wire.endTransmission(); 
    Wire.requestFrom(0b1101000,6); 
    while(Wire.available() < 6); 
    gyroX = Wire.read()<<8|Wire.read(); 
    gyroY = Wire.read()<<8|Wire.read(); 
    gyroZ = Wire.read()<<8|Wire.read(); 
} 
+0

Mit dem Teil des Codes, der ein Auflegen verursachen sollte, sieht nichts falsch aus. Wie fahren Sie die Servos? Wenn Sie über das Arduino Strom ziehen, zeichnen Sie möglicherweise zu viel, wenn der zweite Servosatz versucht, das Board zu verschieben und herunterzufahren. Geben Sie uns eine schematische Darstellung des Projekts. –

+0

Sie werden unabhängig vom Arduino angetrieben. Es ist auch erwähnenswert, dass ich alle vier Servos auf einmal bewegt habe. –

+0

Wenn sie unabhängig voneinander betrieben werden, haben Sie eine gemeinsame Basis? –

Antwort

-1

Warum verwenden Sie nicht else if? Es wird schneller arbeiten.

if(gyroX <= 0) 
{ 
    ... 
} 
else if(gyroX > 0) 
{ 
} 

if(gyroY <= 0) //PROBLEM OCCURS WHEN I ADD THIS FUNCTION 
{ 
} 
else if(gyroY > 0) //PROBLEM OCCURS WHEN I ADD THIS FUNCTION 
{ 
} 
+1

Wie löst das das Problem? –

Verwandte Themen