arduino平衡车超声波_适合新手的详细arduino超声波避障小车教程

先上源代码#include

int motorL1=6; //左边轮子int motorL2=5;

int motorR1=9; //右边轮子int motorR2=11;

int ledL=7; //转弯灯int ledR=8;

int ledB=19; //倒车灯int ledG=13; //大灯Servo s; //超声波转向舵机int trig=4; //发射信号int echo=2; //接收信号unsigned int S; //距离存储void setup() {

Serial.begin(9600); //设置波特率pinMode(trig,OUTPUT); //设置引脚模式pinMode(echo,INPUT);

pinMode(motorL1,OUTPUT);

pinMode(motorL2,OUTPUT);

pinMode(motorR1,OUTPUT);

pinMode(motorR2,OUTPUT);

pinMode(ledL,OUTPUT);

pinMode(ledR,OUTPUT);

pinMode(ledB,OUTPUT);

pinMode(ledG,OUTPUT);

pinMode(12,OUTPUT);

s.attach(3); //定义舵机所用引脚s.write(90); //初始化舵机角度tone(12,800,500);

delay(2000); //开机延时}

void loop() { //主函数s.write(90); //舵机中位range(); //执行测距函数if(S<10){ //判断障碍物距离,距离太近back(); //后退delay(300); //后退时间}

if(S<=40&&S>10){ //距离中等turn(); //运行转向判断函数}

if(S>40){ //距离充足line(); //运行直行函数}

}

void turn(){ //判断转向函数lull(); //停止所用电机s.write(170); //舵机转到170度既左边(角度与安装方式有关)delay(500); //留时间给舵机转向range(); //运行测距函数s.write(90); //测距完成,舵机回到中位delay(600); //留时间给舵机转向if (S>30) {L();} //判断左边障碍物距离,如果距离充足,运行左转 else {

s.write(10); //否则,舵机转动到10度,测右边距离delay(600);

range(); //测距s.write(90); //中位delay(600);

if(S>30){ R();

} //右转else{ back(); //判断右边距离,距离充足右转否则后退int x=random(1); //产生一个0到1的随机数 if (x=0){R();}

else{L();} //判断随机数} //否则后退,并随机转向}

}

void range(){ //测距函数digitalWrite(trig,LOW); //测距delayMicroseconds(2); //延时2微秒digitalWrite(trig,HIGH);

delayMicroseconds(20);

digitalWrite(trig,LOW);

int distance = pulseIn(echo,HIGH); //读取高电平时间distance = distance/58; //按照公式计算S = distance; //把值赋给SSerial.println(S); //向串口发送S的值,可以在显示器上显示距离if (S<30){

tone(12,800,50);

delay(50); //延时}

}

void line(){

ledoff(); //关闭所有LEDledg(); //运行大灯函数digitalWrite(motorR1,HIGH); //启动所有电机向前digitalWrite(motorL1,HIGH);

digitalWrite(motorR2,LOW);

digitalWrite(motorL2,LOW);

}

void L(){

ledoff;

digitalWrite(motorL1,LOW);

digitalWrite(motorR2,LOW);

analogWrite(motorL2,100);

analogWrite(motorR1,100);

for (int x=0;x<5;x++){ //执行5次ledl(); //右边LED函数}

lull(); //暂停所有电机}

void R(){

ledoff();

digitalWrite(motorL2,LOW);

digitalWrite(motorR1,LOW);

analogWrite(motorL1,100);

analogWrite(motorR2,100);

for (int x=0;x<5;x++){

ledr();

}

lull();

}

void back(){ //后退函数ledoff();

ledb();

digitalWrite(motorL1,LOW);

digitalWrite(motorR1,LOW);

analogWrite(motorL2,100);

analogWrite(motorR2,100);

ledb();

}

void lull(){

digitalWrite(motorL1,LOW);

digitalWrite(motorL2,LOW);

digitalWrite(motorR1,LOW);

digitalWrite(motorR2,LOW);

}

void ledl(){

digitalWrite(ledL,HIGH);

delay(50);

digitalWrite(ledL,LOW);

delay(50);

}

void ledr(){

digitalWrite(ledR,HIGH);

delay(50);

digitalWrite(ledR,LOW);

delay(50);

}

void ledb(){

digitalWrite(ledB,HIGH);

}

void ledg(){

digitalWrite(ledG,HIGH);

}

void ledoff(){

digitalWrite(ledL,LOW);

digitalWrite(ledL,LOW);

digitalWrite(ledL,LOW);

digitalWrite(ledL,LOW);

}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值