|
|
我的小车主要问题就是停不下来,会直接撞上前面的障碍物,感觉超声波没在判断,程序如下,有高手帮我分析分析吗?
- #include <Servo.h>
- #define L1 7
- #define L2 8
- #define R1 12
- #define R2 13
- #define C0 5
- #define C1 6
- Servo myservo;
- int rightDistance;
- int leftDistance;
- int middleDistance;
- const int Trig=2;
- const int Echo=3;
- void forward()
- {
- digitalWrite(L1,HIGH);
- digitalWrite(L2,LOW);
- analogWrite(C0,150);
- digitalWrite(R1,HIGH);
- digitalWrite(R2,LOW);
- analogWrite(C1,150);
- }
- void back()
- {
- digitalWrite(L1,LOW);
- digitalWrite(L2,HIGH);
- analogWrite(C0,150);
- digitalWrite(R1,LOW);
- digitalWrite(R2,HIGH);
- analogWrite(C1,150);
- }
- void turnLeft()
- {
- digitalWrite(L1,LOW);
- digitalWrite(L2,HIGH);
- analogWrite(C0,150);
- digitalWrite(R1,HIGH);
- digitalWrite(R2,LOW);
- analogWrite(C1,150);
- }
- void turnRight()
- {
- digitalWrite(L1,HIGH);
- digitalWrite(L2,LOW);
- analogWrite(C0,150);
- digitalWrite(R1,LOW);
- digitalWrite(R2,HIGH);
- analogWrite(C1,150);
- }
- void gostop()
- {
- digitalWrite(L1,LOW);
- digitalWrite(L2,LOW);
- analogWrite(C0,0);
- digitalWrite(R1,LOW);
- digitalWrite(R2,LOW);
- analogWrite(C1,0);
- }
- int Distance_test()
- {
- digitalWrite(Trig,LOW);
- delayMicroseconds(2);
- digitalWrite(Trig, HIGH);
- delayMicroseconds(10);
- digitalWrite(Trig, LOW);
- float cm=pulseIn(Echo, HIGH);
- cm= cm/58.0;
- cm = (int(cm * 100.0)) / 100.0;
- return (int)cm;
- }
- void setup()
- {
- myservo.attach(9);
- Serial.begin(9600); // 初始化串口
- pinMode(Echo,INPUT);
- pinMode(Trig,OUTPUT);
- pinMode(L1,OUTPUT);
- pinMode(L2,OUTPUT);
- pinMode(R1,OUTPUT);
- pinMode(R2,OUTPUT);
- pinMode(C0,OUTPUT);
- pinMode(C1,OUTPUT);
- gostop();
- }
- void loop()
- {
- myservo.write(90);
- delay(1000);
- middleDistance=Distance_test();
- Serial.print(middleDistance);
- Serial.println("cm");
- delay(1000);
- if(middleDistance<=20)
- {
- gostop();
- delay(500);
- myservo.write(30);
- delay(1000);
- rightDistance=Distance_test();
- delay(1000);
- myservo.write(90);
- delay(1000);
- myservo.write(150);
- delay(1000);
- leftDistance=Distance_test();
- delay(1000);
- myservo.write(90);
- delay(1000);
- middleDistance=Distance_test();
- delay(1000);
- if(rightDistance<=10&&leftDistance<=10)
- {
- back();
- delay(50);
- }
- else if(rightDistance>leftDistance)
- {
- turnRight();
- delay(50);
- }
- else if(rightDistance<leftDistance)
- {
- turnLeft();
- delay(50);
- }
- else
- {
- forward();
- }
- }
- else
- {
- forward();
- }
- }
复制代码 |
|