本帖最后由 弘毅 于 2018-8-15 08:02 编辑
自己做了一个避障小车,只有一个UNO板和l298n板,一个二驱的履带式底盘和一个sr04的超声波传感器。
但是无论怎么调试代码都没用,下面附上代码和接法,求大佬们给指正一下。
- #define IN1 8
- #define IN2 9
- #define IN3 12
- #define IN4 13
- int Echo_Pin=3;
- int Trig_Pin=2;
- int cm;
- int L;
- void forward();
- void back();
- void turnLeft();
- void turnRight();
- void _stop();
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);//波特率为9600
- pinMode(IN1,OUTPUT);
- pinMode(IN2,OUTPUT);
- pinMode(IN3,OUTPUT);
- pinMode(IN4,OUTPUT);
- pinMode(Trig_Pin,OUTPUT);
- pinMode(Echo_Pin,INPUT);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- /*******************************超声波距离 *************************************/
- digitalWrite(Trig_Pin, LOW); //低高低电平发一个短时间脉冲去TrigPin
- delayMicroseconds(2);
- digitalWrite(Trig_Pin, HIGH);
- delayMicroseconds(10);
- digitalWrite(Trig_Pin, LOW);
- cm = pulseIn(Echo_Pin, HIGH) / 58.0; //将回波时间换算成cm
- //cm = (int(cm * 100.0)) / 100.0; //保留两位小数
- Serial.print(cm);
- Serial.print("cm");
- Serial.println();
- delay(200);
- L=cm;
- /***************************障碍判断***************************************/
- if(L>=40)
- {
- forward();
- }
- if(L<40)
- {
- _stop();
- delay(300);
- turnRight();
- delay(350);
- if(L>=40)
- { forward(); }
- else
- { turnRight(); }
- }
- }
- void forward()
- {
- digitalWrite(IN1,HIGH);
- digitalWrite(IN2,LOW);
- digitalWrite(IN3,HIGH);
- digitalWrite(IN4,LOW);
- }
- void back( )
- {
- digitalWrite(IN1,LOW);
- digitalWrite(IN2,HIGH);
- digitalWrite(IN3,LOW);
- digitalWrite(IN4,HIGH);
- }
- void turnLeft( )
- {
- digitalWrite(IN1,LOW);
- digitalWrite(IN2,LOW);
- digitalWrite(IN3,HIGH);
- digitalWrite(IN4,LOW);
- }
- void turnRight( )
- {
- digitalWrite(IN1,HIGH);
- digitalWrite(IN2,LOW);
- digitalWrite(IN3,LOW);
- digitalWrite(IN4,LOW);
- }
- void _stop()
- {
- digitalWrite(IN1,LOW);
- digitalWrite(IN2,LOW);
- digitalWrite(IN3,LOW);
- digitalWrite(IN4,LOW);
- }
复制代码
|