2017-10-05 10 views
0

最近、私は2つのif文を追加して、すべてのコードを停止させるという問題が発生しています。たとえば、以下のコードは2つのgyroX if文で動作しますが、これらの2つのgyroY 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を通して力を引き出しているなら、第2セットのサーボがボードを動かしてシャットダウンしようとすると、あなたはあまりにも多くの描画をするかもしれません。プロジェクトの概要を教えてください。 –

+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

これはどのようにして問題を解決しますか? –

関連する問題