【问题标题】:Program stops after I add more if statements添加更多 if 语句后程序停止
【发布时间】:2017-10-05 20:45:04
【问题描述】:

最近我遇到了一个问题,我又添加了 2 个 if 语句,它会一起停止我的代码。例如,下面的代码将与两个 gyroX if 语句一起使用,但是一旦我添加了这两个 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(); 
}

【问题讨论】:

  • 应该导致挂断的那部分代码看起来没什么问题。你是如何为伺服系统供电的?如果您通过 Arduino 获取电力,那么当第二组伺服系统试图移动并关闭电路板时,您可能会绘制太多。给我们一个项目的示意图。
  • 它们独立于 Arduino 供电。还值得一提的是,我让所有四个伺服系统同时移动。
  • 如果它们是独立供电的,你们有共同点吗?
  • 它到底是怎么挂起来的?您是仅注释掉 if 语句还是注释掉 recordGyroRegisters() 中的部分?考虑添加带有long 变量内容的调试打印。
  • 是的,舵机与同一个电池并联。所以他们有共同点。

标签: if-statement arduino gyroscope servo


【解决方案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
{
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 2023-02-23
    • 2022-06-15
    • 1970-01-01
    • 2014-07-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多