网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月03日漏签0天
arduino吧 关注:75,585贴子:230,735
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 2回复贴,共1页
<<返回arduino吧
>0< 加载中...

【求助】智能小车为什么switch语句中超声波避障只执行一次

  • 只看楼主
  • 收藏

  • 回复
  • 虚幻五秒
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include "SR04.h"//超声波头文件
#include <Servo.h>//舵机头文件
#define TRIG_PIN A5 //超声波触发引脚
#define ECHO_PIN A4 //超声波接收引脚
int Front_Distance = 0;//储存前面距离变量
int Left_Distance = 0;//储存左面距离变量
int Right_Distance = 0;//储存右面距离变量
Servo myservo; //创建舵机对象
int pos = 0; //储存舵机角度的变量
int left_motor_en = 5;//左电机使能
int right_motor_en = 6;//右电机使能
int left_motor_go = 3;//左电机正传
int right_motor_go = 4;//右电机正传
int left_motor_back = 2;//左电机反转
int right_motor_back = 7;//右电机反转
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;//存储超声波距离值变量
#include <IRremote.h>
int RECV_PIN = A1; //红外线接收器OUTPUT端接在A1
IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号
decode_results results; //解码结果放在decode_results构造的对象results里
void setup() {
//电机驱动引脚全部设置为输出模式
pinMode(left_motor_en,OUTPUT);
pinMode(right_motor_en,OUTPUT);
pinMode(left_motor_go,OUTPUT);
pinMode(right_motor_go,OUTPUT);
pinMode(left_motor_back,OUTPUT);
pinMode(right_motor_back,OUTPUT);
myservo.attach(9); // 设置舵机控制脚为数字9脚
//控制车速
analogWrite(left_motor_en,130);//左电机占空比值 取值范围0-255,255最快
analogWrite(right_motor_en,130);//右电机占空比值取值范围0-255 ,255最快
irrecv.enableIRIn(); //启动红外解码
}
//小车前进
void forward()
{
digitalWrite(left_motor_go,HIGH); //左电机前进
digitalWrite(left_motor_back,LOW);
digitalWrite(right_motor_go,HIGH); //右电机前进
digitalWrite(right_motor_back,LOW);
}
//小车后退
void backward()
{
digitalWrite(left_motor_go,LOW); //左电机反转
digitalWrite(left_motor_back,HIGH);
digitalWrite(right_motor_go,LOW); //右电机反转
digitalWrite(right_motor_back,HIGH);
}
//小车单轮左转
void left()
{
digitalWrite(left_motor_go,LOW); //左电机停止
digitalWrite(left_motor_back,LOW);
digitalWrite(right_motor_go,HIGH); //右电机前进
digitalWrite(right_motor_back,LOW);
}
//小车单轮右转
void right()
{
digitalWrite(left_motor_go,HIGH); //左电机前进
digitalWrite(left_motor_back,LOW);
digitalWrite(right_motor_go,LOW); //右电机停止
digitalWrite(right_motor_back,LOW);
}
//停车
void stop_car()
{
digitalWrite(left_motor_go,LOW); //左电机停止
digitalWrite(left_motor_back,LOW);
digitalWrite(right_motor_go,LOW); //右电机停止
digitalWrite(right_motor_back,LOW);
}
//小车原地左转
void left_rapidly()
{
digitalWrite(left_motor_go,LOW); //左电机反转
digitalWrite(left_motor_back,HIGH);
digitalWrite(right_motor_go,HIGH); //右电机正转
digitalWrite(right_motor_back,LOW);
}
//小车原地右转
void right_rapidly()
{
digitalWrite(left_motor_go,HIGH); //左电机正转
digitalWrite(left_motor_back,LOW);
digitalWrite(right_motor_go,LOW); //右电机反转
digitalWrite(right_motor_back,HIGH);
}
void front_detection()//测量小车前方距离
{
myservo.write(90);//舵机旋转90处于小车正前方
delay(65);//等待舵机到达指定角度
Front_Distance = sr04.Distance();//读取超声波距离
}
void left_detection()//测量小车左面距离
{
myservo.write(180);//舵机旋转180处于小车左面
delay(300);//等待舵机到达指定角度
Left_Distance = sr04.Distance();//读取超声波距离
}
void right_detection()//测量小车右面距离
{
myservo.write(0);//舵机旋转0处于小车右面
delay(300);//等待舵机到达指定角度
Right_Distance = sr04.Distance();//读取超声波距离
}
void zhengchang()
{
front_detection();//测量小车前方距离
if(Front_Distance < 35)//当前方厘米处出现障碍物时
{
stop_car(); delay(100);
backward(); delay(300);//先停车再后退一段距离
stop_car(); delay(100);//再次停车,扫描找出可行驶的空旷路线
left_detection();//测量左侧是否有障碍物
right_detection();//测量右侧是否有障碍物
if(Left_Distance < 35 && Right_Distance < 35)
{
left_rapidly();//
delay(600);//实现掉头
}
else if(Left_Distance > Right_Distance)//左边比右边空旷
{
left(); delay(500);//左转
stop_car(); delay(100);//停车稳定方向
}
else//否则,右边比左边空旷
{
right(); delay(500);//右转
stop_car(); delay(100);//停车稳定方向
}
}
else//前方无障碍物则前进
{
forward();//前进
}
}
void moshushou(){
a=sr04.Distance();//读取超声波距离
if(a > 20)//设置避障距离(单位厘米)
{
forward();//当手掌距离超声波大于20cm时执行前进
}
else
{
backward(); //否则执行后退
}
delay(65);//间隔65毫秒刷新一次
}
void loop() {
if (irrecv.decode(&results)) {
switch(results.value){ //判定按下的是哪个按键
case 0xFF18E7: zhengchang(); break;//数字“2”键,前进
case 0xFF4AB5: backward(); break;//数字“8”键,后退
case 0xFF10EF: left(); break;//数字“4”键,左转
case 0xFF5AA5: right(); break;//数字“6”键,右转
case 0xFF38C7: stop_car(); break;//数字“5”键,停车
}
irrecv.resume();
}
}


  • 虚幻五秒
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢各位大佬


2026-01-03 14:08:10
广告
不感兴趣
开通SVIP免广告
  • 郑大明白滴
  • 崭露头角
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
循环里边你按键后只执行一次


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回arduino吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示