2017-10-05 58 views
0

最近我遇到了一個問題,我添加了2個以上的語句,它將我的代碼全部停在一起。例如,下面的代碼將與兩個gyroX if語句一起工作,但是一旦我添加這兩個陀螺儀if語句,整個代碼將不會運行。任何建議如何解決這個問題,將不勝感激。我添加更多的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

沒有看起來應該導致掛斷的那部分代碼看起來不對。你如何爲舵機提供動力?如果你通過Arduino獲得電源,當第二組伺服器試圖移動和關閉電路板時,你可能會畫得太多。給我們一個項目的示意圖。 –

+0

它們獨立於Arduino供電。還值得一提的是,我曾經有過四個舵機同時動作。 –

+0

如果他們獨立供電,你有共同點嗎? –

回答

-1

爲什麼不使用else if? 它會工作得更快。

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

這是如何解決問題的? –