智障小车.c
来源:互联网 发布:贵州大数据交易平台 编辑:程序博客网 时间:2024/04/30 07:11
思路:不加控制时让小车往一边偏着走,当传感器探测到偏到一定程度时加以回正,再继续;做到一个传感器走直线,顺便能把直角弯给拐了
/**************************************************************************** 硬件连接 P1_6 接驱动模块ENA 使能端,输入PWM信号调节速度 P1_7 接驱动模块ENB 使能端,输入PWM信号调节速度 P3_4 P3_5 接IN1 IN2 当 P3_4=1,P3_5=0; 时左电机正转 驱动蓝色输出端OUT1 OUT2接左电机 P3_4 P3_5 接IN1 IN2 当 P3_4=0,P3_5=1; 时左电机反转 P3_6 P3_7 接IN3 IN4 当 P3_6=1,P3_7=0; 时右电机正转 驱动蓝色输出端OUT3 OUT4接右电机 P3_6 P3_7 接IN3 IN4 当 P3_6=0,P3_7=1; 时右电机反转 关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入最低的电压6V时候可以输出稳定的5V 分别在针脚标+5 与GND 。这个电源可以作为单片机系统的供电电源。 ****************************************************************************/ #include<AT89x51.H> #define Left_moto_pwm P1_6 //接驱动模块ENA 使能端,输入PWM信号调节速度 #define Right_moto_pwm P1_7 //接驱动模块ENB #define Left_moto_go {P3_2=0,P3_3=1;} //P3_4 P3_5 接IN1 IN2 当 P3_4=0,P3_5=1; 时左电机前进 #define Left_moto_back {P3_2=1,P3_3=0;} //P3_4 P3_5 接IN1 IN2 当 P3_4=1,P3_5=0; 时左电机后退 #define Right_moto_go {P3_6=0,P3_7=1;} //P3_6 P3_7 接IN1 IN2 当 P3_6=0,P3_7=1; 时右电机前转 #define Right_moto_back {P3_6=1,P3_7=0;} //P3_6 P3_7 接IN1 IN2 当 P3_6=1,P3_7=0; 时右电机后退 unsigned char pwm_val_left =0;//变量定义 unsigned char push_val_left =0;// 左电机占空比N/10 unsigned char pwm_val_right =0; unsigned char push_val_right=0;// 右电机占空比N/10 bit Right_moto_stop=1; bit Left_moto_stop =1; unsigned int time=0; int a=0;//模式2/************************************************************************//* PWM调制电机转速 *//************************************************************************//* 左电机调速 *//*调节push_val_left的值改变电机转速,占空比 */ void pwm_out_left_moto(void){ if(Left_moto_stop) { if(pwm_val_left<=push_val_left) Left_moto_pwm=1; else Left_moto_pwm=0; if(pwm_val_left>=22) pwm_val_left=0; } else Left_moto_pwm=0;}/******************************************************************//* 右电机调速 */ void pwm_out_right_moto(void){ if(Right_moto_stop) { if(pwm_val_right<=push_val_right) Right_moto_pwm=1; else Right_moto_pwm=0; if(pwm_val_right>=22) pwm_val_right=0; } else Right_moto_pwm=0;}/***************************************************////*TIMER0中断服务子函数产生PWM信号*/ void timer0()interrupt 1 using 2{ TH0=0XF8; //1Ms定时 TL0=0X30; time++; pwm_val_left++; pwm_val_right++; pwm_out_left_moto(); pwm_out_right_moto(); } /***************************************************/ void main(void){ TMOD=0X01; TH0= 0XF8; //1ms定时 TL0= 0X30; TR0= 1; ET0= 1; EA = 1; while(1) /*无限循环*/ { //第一种障碍物// if(P0_3==0)//正朝前的有障碍 { while(P0_7==1) { Left_moto_back;Right_moto_go;push_val_left =2;push_val_right =2; } while(P0_2==0) { if(P0_7==0||P0_6==0||P0_4==0)// { Left_moto_back;Right_moto_back;push_val_left =3;push_val_right =1; } if(P0_4==1) // { Left_moto_back;Right_moto_back;push_val_left =1;push_val_right =3; } } } if(P0_5==0)//正朝斜的有障碍 { while(P0_7==1) { Left_moto_back;Right_moto_back;push_val_left =2;push_val_right =2; } while(P0_2==0) { if(P0_7==0||P0_6==0||P0_4==0)// { Left_moto_back;Right_moto_back; push_val_left =3;push_val_right =1; } if(P0_4==1) // { Left_moto_back;Right_moto_back;push_val_left =1;push_val_right =3; } } } if(P0_3==1)//正朝前无障碍 { P0_0=0; Left_moto_back;Right_moto_back; if(P0_2==0)//正边侧 { if(P0_1==1)//无障碍物的时候输出高电平 { push_val_left =4; push_val_right =1; } else //有障碍物的时候输出低电平 { push_val_left =1;push_val_right =4; } } else //解决拐大弯的问题 { push_val_left =2;push_val_right =0; } } }}
阅读全文
0 0
- 智障小车.c
- 【智障题系列C】序列问题
- 用C语言实现“智障”的棋盘游戏
- ---------------小车
- 小车
- 洛谷 oj 2679 【NOIP2015】子串(一堆智障错误)Mod 、O(c) etc.
- 智能小车34:汇编与C语言一起玩
- 基于Dragonboard 410c的智能小车(一)
- 基于Dragonboard 410c的智能小车(二)
- 基于Dragonboard 410c的智能小车(三)
- 基于Dragonboard 410c的智能小车(四)
- blender智障脑补篇一
- hdoj1001【智障了。。。】
- 智障错误大全
- 智障题 Uva Patties
- 少犯智障问题!!!
- 学写智障蛇
- 最智障的离散化
- MySQL 数据备份与恢复(小学生篇)
- 练习23
- 动态代理详解
- System.out.println的神奇之处
- 设计模式(3)
- 智障小车.c
- 练习24
- Windows下安装Redis及php的redis拓展教程
- 将一个list分成多个list的Java实现。
- 【Redis】高可用
- SimpleDateFormat的使用
- 练习25
- 练习26
- 练习27