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.
Я добавил задержки, думая, что, может быть, он двигался так быстро. Я даже пытался перемещаться по разным этажам, но это всегда дает один и тот же результат.