void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
pinMode(ledPinBlue, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop() {
mpu6050.update();
Serial.print("angleX : ");
Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");
Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");
Serial.println(mpu6050.getAngleZ());
int start = (mpu6050.getAngleZ());
int now = 0;
int must =0;
route1();
delay(10) ;
dur();
delay(10);
route2();
delay(10);
route3;
delay(10);
dur();
}
void turnright () {
digitalWrite(ledPinBlue, HIGH);
delay(20);
digitalWrite(ledPinBlue, LOW);
delay(200);
analogWrite( enA , 140);
analogWrite( enB , 140);
digitalWrite( in1 , LOW);
digitalWrite( in2 , HIGH);
digitalWrite( in3 , HIGH);
digitalWrite( in4, LOW);
delay(30);
analogWrite( enA , 90);
analogWrite( enB , 90);
digitalWrite( in1 , LOW);
digitalWrite( in2 , LOW);
digitalWrite( in3 , LOW);
digitalWrite( in4, LOW);
}
void forword () {
digitalWrite(ledPinBlue, HIGH);
delay(3);
digitalWrite(ledPinBlue, LOW);
delay(4);
digitalWrite(ledPinBlue, HIGH);
delay(2);
digitalWrite(ledPinBlue, LOW);
delay(4);
digitalWrite(ledPinBlue, HIGH);
delay(1);
digitalWrite(ledPinBlue, LOW);
delay(3);
analogWrite( enA , 96);
analogWrite( enB , 96);
digitalWrite( in1 , HIGH);
digitalWrite( in2 , LOW);
digitalWrite( in3 , HIGH);
digitalWrite( in4, LOW);
}
void turnleft(){
digitalWrite(ledPinBlue, HIGH);
delay(200);
digitalWrite(ledPinBlue, LOW);
delay(20);
analogWrite( enA , 150);
analogWrite( enB , 150);
digitalWrite( in1 , HIGH);
digitalWrite( in2 , LOW);
digitalWrite( in3 , LOW);
digitalWrite( in4, HIGH);
delay(30);
analogWrite( enA , 90);
analogWrite( enB , 90);
digitalWrite( in1 , LOW);
digitalWrite( in2 , LOW);
digitalWrite( in3 , LOW);
digitalWrite( in4, LOW);
}
void dur(){
analogWrite( enA , 0);
analogWrite( enB , 0);
digitalWrite( in1 , LOW);
digitalWrite( in2 , LOW);
digitalWrite( in3 , LOW);
digitalWrite( in4, LOW);
digitalWrite(ledPinBlue, HIGH);
digitalWrite(ledPinBlue, HIGH);
}
void route3(){
int start = (mpu6050.getAngleZ());
if (start > 180){
turnright();
delay(50);
}
if (start < 180 && start > 91){
turnleft();
delay(50);
}
if (start == 180){
forword();
delay(1200);
}
}
void route2(){
int start = (mpu6050.getAngleZ());
if (start > 91 && start < 179){
turnright();
delay(50);
}
if (start < 89 && start > 1){
turnleft();
delay(50);
}
if (start == 90){
forword();
delay(1200);
}
}
void route1 () {
int start = (mpu6050.getAngleZ());
if (start > 1 && start < 89){
turnright();
delay(40);
}
if (start < 0){
turnleft();
delay(40);
}
if (start == 0){
forword();
delay(1200);
}
}
使用上面的arduino代码,我试图移动一辆汽车并将其旋转90度4次以形成一个矩形,但是当我从按钮启动它或每次重置它时都会给我不同的角度,例如在第一个91第二个60第三个97。
我添加了延迟,认为也许它移动得太快了。我什至尝试在不同的楼层移动,但结果总是相同。
除了第 32 行和第 30 行到第 32 行之间,我没有看到代码中的问题,我认为您需要 dur 函数,但我认为您可以在每次转动后检查角度并通过值纠正错误。 如果这不起作用,我认为你的陀螺仪不起作用,你可以通过将陀螺仪在桌子上移动 90 度来测试陀螺仪,然后查看陀螺仪的输出。