2017-10-05 3 views
0

Récemment, j'ai eu un problème avec l'ajout de 2 instructions if et l'arrêt de mon code. Par exemple, le code ci-dessous fonctionnera avec les deux instructions gyroX if mais une fois que j'ajouterai ces deux instructions gyroY if, le code entier ne fonctionnera pas. Toute suggestion sur la façon de résoudre ce problème serait appréciée.Le programme s'arrête après avoir ajouté d'autres instructions if

#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

Rien ne semble faux avec la partie du code qui devrait provoquer un blocage. Comment alimentez-vous les Servos? Si vous utilisez l'Arduino, il est possible que vous en tiriez trop lorsque le deuxième ensemble de servos essaye de se déplacer et de fermer le tableau. Donnez-nous un schéma du projet. –

+0

Ils sont alimentés indépendamment de l'Arduino. Il est également intéressant de mentionner que j'ai eu les quatre servos se déplaçant en même temps. –

+0

Si elles sont alimentées indépendamment, avez-vous un terrain d'entente? –

Répondre

-1

Pourquoi n'êtes-vous pas en utilisant else if? Cela fonctionnera plus vite.

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

Comment cela résout-il le problème? –