2017-10-05 22 views
0

최근에 나는 2 개의 if 문을 추가하고 모두 함께 코드를 중지하는 문제가 발생했습니다. 예를 들어, 아래의 코드는 두 개의 gyroX if 문과 함께 작동하지만 일단 두 개의 gyroY 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

코드의 해당 부분이 끊어져도 문제가없는 것으로 보입니다. 어떻게 Servos에 전력을 공급하고 있습니까? Arduino를 통해 전력을 끌어오고 있다면 두 번째 서보 세트가 보드를 움직이고 보드를 닫으려고 할 때 너무 많이 드로잉 할 수 있습니다. 우리에게 프로젝트의 도식을주세요. –

+0

그들은 Arduino와 독립적으로 구동됩니다. 한 번에 4 대의 서보 모터를 모두 움직이게했음을 언급 할 가치가 있습니다. –

+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

이 문제가 어떻게 해결됩니까? –