Arduino 程序在while循环开始后停止
我正试图根据陀螺仪的数据移动伺服装置。不幸的是,我的程序在while循环开始后停止。例如,在我的代码中,一旦gyroX值达到3000,串行监视器将停止向我提供gyro数据,并且伺服不会运行。如有任何关于如何解决此问题的建议,将不胜感激Arduino 程序在while循环开始后停止,arduino,gyroscope,servo,mpu6050,Arduino,Gyroscope,Servo,Mpu6050,我正试图根据陀螺仪的数据移动伺服装置。不幸的是,我的程序在while循环开始后停止。例如,在我的代码中,一旦gyroX值达到3000,串行监视器将停止向我提供gyro数据,并且伺服不会运行。如有任何关于如何解决此问题的建议,将不胜感激 #include <Wire.h> #include <Servo.h> Servo servo; long accelX, accelY, accelZ; float gForceX, gForceY, gForceZ; long
#include <Wire.h>
#include <Servo.h>
Servo servo;
long accelX, accelY, accelZ;
float gForceX, gForceY, gForceZ;
long gyroX, gyroY, gyroZ;
float rotX, rotY, rotZ;
int pos1 = 90;
void setup() {
Serial.begin(9600);
Wire.begin();
setupMPU();
}
void loop() {
recordAccelRegisters();
recordGyroRegisters();
printData();
while( gyroX > 3000 ){ //problem happens here
pos1 += 5;
servo.write(pos1);
}
}
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();
}
void recordAccelRegisters() {
Wire.beginTransmission(0b1101000);
Wire.write(0x43);
Wire.endTransmission();
Wire.requestFrom(0b1101000,6);
while(Wire.available() < 6);
accelX = Wire.read()<<8|Wire.read();
accelY = Wire.read()<<8|Wire.read();
accelZ = Wire.read()<<8|Wire.read();
}
void printData() {
Serial.print("Gyro (deg)");
Serial.print(" X=");
Serial.print(gyroX);
Serial.print(" Y=");
Serial.print(gyroY);
Serial.print(" Z=");
Serial.print(gyroZ);
Serial.print(" Accel (g)");
Serial.print(" X=");
Serial.print(accelX);
Serial.print(" Y=");
Serial.print(accelY);
Serial.print(" Z=");
Serial.println(accelZ);
}
#包括
#包括
伺服;
长加速,加速,加速;
浮动gForceX、gForceY、gForceZ;
长陀螺X、陀螺Y、陀螺Z;
浮动rotX、rotY、rotZ;
int pos1=90;
无效设置(){
Serial.begin(9600);
Wire.begin();
setupMPU();
}
void循环(){
记录加速寄存器();
记录寄存器();
printData();
当(gyroX>3000){//问题发生在这里
pos1+=5;
伺服写入(pos1);
}
}
void setupMPU(){
导线开始传输(0b1101000);
线写入(0x6B);
连线写入(0b00000000);
导线端传动();
导线开始传输(0b1101000);
线写入(0x1B);
连线写入(0x00000000);
导线端传动();
导线开始传输(0b1101000);
线写入(0x1C);
连线写入(0b00000000);
导线端传动();
}
无效记录寄存器(){
导线开始传输(0b1101000);
线写入(0x3B);
导线端传动();
请求自(0b1101000,6)的电线;
while(Wire.available()<6);
gyroX=Wire.read()在while循环中,没有任何命令可以更改gyroX的值。因此,一旦进入该循环,它将成为一个无限循环。您需要在while循环中调用recordGyroRegisters函数,以便在该循环中更新变量。或者,您可以利用循环函数已经在循环和简化的事实y去掉for循环,选择基于if语句的内容。在while循环中,没有可以更改gyroX值的命令。因此,一旦进入该循环,它就变成了一个无限循环。您需要在while循环中调用recordGyroRegisters函数,以便在该循环中更新变量。或者y你可以利用循环函数已经在循环的事实,简单地摆脱for循环,选择基于if语句的内容。太棒了!这解决了我的问题!我感谢你用简单的术语解释它。谢谢你的帮助。太棒了!这解决了我的问题!我感谢你用simp解释它谢谢你的帮助。