单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:44981|回复:39
打印上一主题下一主题

51单片机避障小车制作资料与问题解决(附源码)

 [复制链接]
跳转到指定楼层
楼主
ID:237538发表于 2017-12-5 10:30|只看该作者|只看大图回帖奖励
避障小车程序实现功能:
1.蓝牙控制,重力感应,通过串口通讯实现手机和蓝牙之间的连接控制用到hc-06模块
2.循迹壁障,遇见障碍能够及时躲避,通过舵机带动hc-sr04超声波模块的左右转动来测量前左右的障碍
3.跟踪,可以追踪一个物体,物进车进,物退车退
4.走黑线,不同颜色的物体对光的反射不同
4.pwm速度快慢调速,通过pwm调节l298n产生脉宽调制
5.开灯,通过手机控制单片机的io口输出高低电频实现
6.喇叭,高低电频产生震荡
********************************************************************************/
/********************************************************************************
避障小车出现的问题:
1.主要是定时器优先级别问题,解决办法调节定时器优先级别,第一次掌握了定时器二的用法,这是52特有的
2.切记,定时器0不能和定时器1互换,因为定时器1优先级没有0高,互换会导致超声波测距模块接受不到数据
3.出现模块从谍,的问题,解决办法用标记把可能出问题模块一个一个标记;最后发现原来是延时函数名字相同
4.字符串不能直接比较需要用if(strcmp(字符串,字符串2)==0)如果一样就返回一个0,如果一比二大就返回
一个正数否则返回负数记住需要包含#include<string.h>头文件
5.舵机不能两个地方同时出现归中,刚开始以为是定时器优先级别的问题,打开定时器1串口通讯就会制动打开
所以我在串口函数里设了点亮led灯来测试串口中断是否自己打开,然后我先是注释ET1发现程序正常,
后面又注释掉中断3发现程序正常,说明不是定时器设置问题, 注释掉中断三里的内容发现也正常说明不是中断引起的
然后注释掉舵机pwm调速,发现也正常说明不是小车档位pwm的问题最后注释掉小车快慢pwm调速,发现舵机函数有问题
然后注释掉舵机pwm调速里的eles发现不正常,之后尝试了改pwm输出口的名字以及io口发现都没用,最后拔掉舵机信号线
发现有用,说明舵机初始化有问题,最后把初始化里的归中14,该成0,发现能正常运作,最后把初始化该成14,注释掉
超声波次主函数的归中发现能正常运作,说明两个归中只能要一个。
结论;一点要细致认真,勤于思考,碰到问题要迎难而上因为编程本来就是个改错的过程别碰到问题就想着
问别人,因为自己的程序只有自己最了解,写代码一定要规范,免得到时后乱起来连自己都看不懂。
11月13日,吴才成

下面是制作的避障小车的实物图:


51单片机避障小车源程序如下:
  1. #include<AT89X52.H>      
  2. #include<string.h>                 //字符串比较头文件
  3. #include< intrins.h>                       //nop的头文件
  4. #define Left_moto_go {P3_1=1,P3_2=0,P3_3=1,P3_4=0;}       //左边两个电机向前走
  5. #define Left_moto_back {P3_1=0,P3_2=1,P3_3=0,P3_4=1;}       //左边两个电机向后转
  6. #define Left_moto_Stop {P3_1=0,P3_2=0,P3_3=0,P3_4=0;}       //左边两个电机停转
  7. #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0  ;}       //右边两个电机向前走
  8. #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;}       //右边两个电机向前走
  9. #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;}       //右边两个电机停转 */
  10. /***************************************************************/
  11. //蓝牙的设置
  12. /*****************************************************************/
  13. void zxddc ();   //转向灯 后退 刹车指示灯
  14. void zxdzz ();       //转向灯左转
  15. void zxdyz ();       //转向灯右转
  16. void zxdgd ();       //转向灯关灯
  17. sbit LEDHZ = P3^5;                           //转向灯左边
  18. sbit LEDHY = P3^6;                           //转向灯右边
  19. sbit LED1 = P1^0 ;                           //左方向灯
  20. sbit LED2 = P1^1 ;                           //右方向灯
  21. sbit  fmq = P1^2 ;                           //喇叭,蜂鸣器
  22. int pwmjishu = 0 ;                           //pwm调速
  23. int pushjishu = 0 ;                         //pwm调速
  24. sbit ena1 = P2^7;
  25. sbit enb1 = P2^6;                             //l298npwm调速引脚
  26. sbit ena2 = P2^5;
  27. sbit enb2 =       P2^4;
  28. unsigned char data table[4]={ 0,0,0,};//用来装串口发送过来的字符串,不包括0
  29. /***************************************************************/
  30. //超声波的设置
  31. /*********************************************************/
  32. #define CSBPWM P2_2                 //接舵机信号端输入PWM信号调节速度
  33. #define ECHO P2_0                       //超声波接口定义
  34. #define TRIG P2_1                       //超声波接口定义
  35. unsigned char disdat[4]={ 0,0,0,0,};
  36. unsigned char pwm_val_left = 0;//变量定义
  37. unsigned char push_val_left =0;//14;//舵机归中,产生约,1.5MS 信号
  38. unsigned long S=0;
  39. unsigned long S1=0;
  40. unsigned long S2=0;
  41. unsigned long S3=0;
  42. unsigned long S4=0;
  43. unsigned int time=0;                 //时间变量
  44. unsigned int timer=0;                 //延时基准变量
  45. unsigned char timer1=0;             //扫描时间变量


  46. void qianj(void)           //前进
  47. {
  48.        Left_moto_go ;                 //左电机往前走
  49.        Right_moto_go ;                 //右电机往前走
  50. }
  51. /************************************************************************/
  52. //全速后退
  53. void hout(void)                       //后退
  54. {
  55.        Left_moto_back ;             //左电机往前走
  56.        Right_moto_back ;             //右电机往前走
  57.        zxddc ();                       //后退指示灯
  58. }
  59. /*********************       ***************************************************/
  60. //左转                                   //左转
  61. void zuoz(void)
  62. {
  63.        Left_moto_back ;             //左电机往前走
  64.        Right_moto_go ;             //右电机往前走
  65.        zxdzz ();                       //左转指示灯
  66. }
  67. /************************************************************************/
  68. //右转
  69. void youz(void)                       //右转
  70. {
  71.        Left_moto_go ;                 //左电机往前走
  72.        Right_moto_back ;             //右电机往前走
  73.        zxdyz ();                       //右转指示灯
  74. }
  75. /************************************************************************/
  76. //STOP
  77. void tingz(void)                   //停止
  78. {                                  
  79.        Left_moto_Stop ;             //左电机停走
  80.        Right_moto_Stop ;             //右电机停走
  81.        zxdgd ();                       //车子停止指示灯关闭
  82. }
  83. /************************************************************************/
  84. /************************************************************************/
  85.   void delay1(unsigned int k) //延时函数
  86. {
  87.        unsigned int x,y;
  88.        for(x=0;x<k;x++)
  89.        for(y=0;y<2000;y++);
  90. }
  91. /******************************//*******************************************/
  92.        void delay_50us(unsigned int z)       //延时函数
  93. {
  94.        unsigned int x,y;
  95.       
  96.        for(x=z;x>0;x--)
  97.            for(y=110;y>0;y--);
  98.       
  99. }      

  100. /*************************************************/

  101. void StartModule() //启动测距信号
  102. {
  103.        TRIG=1; //给10us以上的高电频
  104.        _nop_(); //_nop_()一个机器周期,1us
  105.        _nop_();
  106.        _nop_();
  107.        _nop_();
  108.        _nop_();
  109.        _nop_();
  110.        _nop_();
  111.        _nop_();
  112.        _nop_();
  113.        _nop_();
  114.        _nop_();
  115.        _nop_();
  116.        _nop_();
  117.        _nop_();
  118.        _nop_();
  119.        _nop_();
  120.        _nop_();
  121.        _nop_();
  122.        _nop_();
  123.        _nop_();
  124.        _nop_();
  125.        TRIG=0;
  126. }
  127. /***************************************************/
  128. /**************************************************/
  129. void Conut(void) //计算距离
  130. {
  131.            while(!ECHO); //当RX为零时等待
  132.            TR0=1; //开启计数
  133.            while(ECHO); //当RX为1计数并等待
  134.            TR0=0; //关闭计数
  135.            time=TH0*256+TL0; //读取脉宽长度
  136.            TH0=0;
  137.            TL0=0;
  138.            S=(time*1.7)/100; //算出来是CM

  139. }


  140. void COMM( void )       //方向计算
  141. {


  142.        push_val_left=5; //舵机向左转90度
  143.        timer=0;
  144.        while(timer<=4000); //延时400MS让舵机转到其位置
  145.        StartModule(); //启动超声波测距
  146.        Conut(); //计算距离
  147.        S2=S;
  148.       
  149.        push_val_left=23; //舵机向右转90度
  150.        timer=0;
  151.        while(timer<=4000); //延时400MS让舵机转到其位置
  152.        StartModule(); //启动超声波测距
  153.        Conut(); //计算距离
  154.        S4=S;
  155.        push_val_left=14; //舵机归中
  156.        timer=0;
  157.        while(timer<=4000); //延时400MS让舵机转到其位置
  158.        StartModule(); //启动超声波测距
  159.        Conut(); //计算距离
  160.        S1=S;
  161.        if((S2<20)||(S4<20)) //只要左右各有距离小于20CM小车后退
  162.        {
  163.            hout(); //后退
  164.            timer=0;
  165.            while(timer<=4000);
  166.        }

  167.        if(S2>S4)
  168.        {
  169.            youz(); //车的左边比车的右边距离小 右转
  170.            timer=0;
  171.            while(timer<=4000);
  172.        }
  173.        else
  174.        {
  175.                  zuoz(); //车的左边比车的右边距离大 左转
  176.                  timer=0;
  177.            while(timer<=4000);
  178.        }
  179. }

  180. /**********************************************************************************
  181. 舵机pwm调速,和小车换挡调速共用一个定时器
  182. ***********************************************************************************/
  183. void pwm_Servomoto()
  184. {
  185.       
  186.        if(pwm_val_left<=push_val_left)
  187.        CSBPWM=1;
  188.        else
  189.        CSBPWM=0;
  190.        if(pwm_val_left>=200)
  191.        pwm_val_left=0;      

  192. }


  193. /************************************************************/
  194. void Delay(unsigned int i)
  195. {
  196.        char j;
  197.        for(i; i > 0; i--)
  198.            for(j = 200; j > 0; j--);
  199. }
  200. /*****************************************************************/
  201. void fangx()       //方向函数
  202. {
  203.            if(strcmp(table,"ONA")==0)     qianj();//前进

  204.            else if(strcmp(table,"ONB")==0) hout();//后退

  205.            else if(strcmp(table,"ONC")==0)  zuoz();//左转
  206.           
  207.            else if(strcmp(table,"OND")==0)  youz ();//右转

  208.            else tingz();//停止
  209.                           

  210.        //       if((a[0]=='O')&&(a[1]='N')&&(a[2]=='A')&&(a[3]==0)) qianj();
  211.            /*if(a=="ONA")qianj();//前进 总结字符串不能用==比较需要调用内部库函数

  212.            else if(a=="ONB") hout();//后退

  213.            else if(a=="ONC") zuoz();//左转
  214.           
  215.            else if(a=="OND") youz();//右转
  216.   
  217.            else tingz();//停止       */      
  218. }          
  219. /*****************************************************************************/
  220. void dangwei()         //档位函数
  221. {
  222.        if (strcmp(table,"ON1") ==0 )
  223.            pushjishu=0;
  224.        if (strcmp(table,"ON2") ==0 )                 //判断是否按下按键
  225.            {
  226.                  //pushjishu=pushjishu+10;
  227.                  pushjishu+=10;                           //x+=y;相当与x=x+y;这样使程序更精炼
  228.              while (strcmp(table,"ON2") ==0 ); //当按键按下的时候进入while循环执行分号空语句,
  229.                                                              //当按键是释放跳出while循环,很好的使按键按下一次执行一次,不会跑飞
  230.            }
  231.        if (strcmp(table,"ON3") ==0 )
  232.            {
  233.                  //pushjishu=pushjishu-10;
  234.              pushjishu-=10;
  235.                  while (strcmp(table,"ON3") ==0 );
  236.            }
  237.   /*       if (strcmp(table,"ON4") ==0 )
  238.            pushjishu=105;
  239.        /*if(strcmp(table,"ON5")==0)
  240.            pushjishu=160;
  241.        if(strcmp(table,"ON6")==0)
  242.            pushjishu=200;       */
  243. }
  244. /**************************************************************************/
  245. void zxddc ()   //转向灯 后退 刹车指示灯 。函数需要在前面声明,因为电机函数定义在此函数前面,在电机函数调用此函数会出现错误
  246. {
  247.        LEDHZ = 0;
  248.        LEDHY = 0;
  249. }
  250. void zxdzz ()       //转向灯左转
  251. {
  252.        LEDHZ = 0;
  253.        LEDHY = 1;
  254. }
  255. void zxdyz ()       //转向灯右转
  256. {
  257.        LEDHZ = 1;
  258.        LEDHY = 0;
  259. }
  260. void zxdgd ()       //转向灯关灯
  261. {

  262.        LEDHZ = 1;
  263.        LEDHY = 1;
  264. }
  265. /***************************************************************************/
  266. void kaideng()       //开前大灯灯函数
  267. {                                                      
  268.        if ( strcmp(table,"ON7") == 0 )       //开灯
  269.    {
  270.            LED1=0;
  271.            LED2=0;
  272.        }
  273.        if ( strcmp(table,"ON8") == 0 )//关灯
  274.    {
  275.            LED1=1;
  276.            LED2=1;
  277.        }
  278. }
  279. /*************************************************************************/
  280. void laba()
  281. {
  282.        if(strcmp(table,"ON9")==0)
  283.        {
  284.            fmq = 1;         //给高电平
  285.            Delay(5);         //延时
  286.            fmq = 0;         //给低电平
  287.            Delay(5);      
  288.        }
  289. }
  290. /**********************************************************/
  291. void pwm(void)//小车快慢pwm调速,是通过l298n完成的
  292. {

  293. if(pwmjishu<=pushjishu)      
  294.        {
  295.            ena1 = 0;
  296.            enb1 = 0;
  297.            ena2 = 0;
  298.            enb2 = 0;   //l298n,实现pwm调速,当给高电频的时候io引脚有效,给低电平时无效
  299.        }      
  300.        else
  301.        {
  302.            ena1 = 1 ;
  303.            enb1 = 1 ;
  304.            ena2 = 1 ;
  305.            enb2 = 1 ;    
  306.        }

  307. if(pwmjishu >= 200)
  308.        pwmjishu = 0;

  309. }
  310. /*******************************************************************************
  311. 超声波魔术手程序
  312. *******************************************************************************/
  313. void moss ()
  314. {
  315.        Delay (100);
  316.        push_val_left=14; //舵机归中
  317.        while(1) /*无限循环*/
  318.        {      
  319.          dangwei();//档位      
  320.            if(strcmp(table,"ON6")==0)       //判断按键 是否按下如果按下就退出csbmian函数,return结束函数
  321.                  return;      
  322.            if(timer>=1000) //100MS检测启动检测一次
  323.            {
  324.                  timer=0;
  325.                  StartModule(); //启动检测
  326.                  Conut(); //计算距离
  327.                  if(S<10) //距离小于20CM
  328.                        hout(); //小车停止
  329.                  if(20>S&&S>10) //距离小于20CM
  330.                        tingz();
  331.                  if(30>S&&S>20) //距离大于,30CM往前走
  332.                        qianj();
  333.                  else
  334.                  if(S>35)
  335.                        tingz();
  336.            }      
  337.        }
  338. }
  339. /****************************************
  340. 超声波壁障主函数
  341. /***************************************************************/

  342. /*       delay_50us(500);
  343.        TMOD=0X11;
  344.        TH1=(65536-100)/256; //100US定时
  345.        TL1=(65536-100)%256;
  346.        TH0=0;
  347.        TL0=0;
  348.        TR1= 1;
  349.        ET1= 1;
  350.        ET0= 1;
  351.        EA = 1; */      
  352. void csbmian ()
  353. {

  354.        timer=0;
  355.    push_val_left=14; /*舵机归中,在初始化的时候归要不在这归中,如果两个地方贵在程序就会出现毛病                                 两个地方
  356.                                  同时归中串口中断无缘无辜的会打开,导致车子不能串口通讯, */
  357.        delay1(50);
  358.        while(1) //无限循环//
  359.        {      
  360.              dangwei();//档位          
  361.              kaideng();  //开灯函数
  362.              laba();       //鸣笛函数
  363.       
  364.                if(strcmp(table,"ON6")==0)       //判断按键 是否按下如果按下就退出csbmian函数,return结束函数
  365.                            return;
  366.       
  367.                  if(timer>=1000) //100MS检测启动检测一次
  368.                  {
  369.                        timer=0;
  370.                        StartModule(); //启动检测
  371.                        Conut(); //计算距离
  372.                        if(S<45) //距离小于20CM
  373.                        {
  374.                            hout();
  375.                            hout();       //刹车
  376.                            hout();
  377.                            tingz(); //小车停止
  378.                            COMM(); //方向函数
  379.                        }
  380.                        else
  381.                            if(S>45) //距离大于,30CM往前走
  382.                            qianj();
  383.                  }
  384.        }
  385. }
  386.   
  387. /**********************************************************/
  388. void main()
  389. {      
  390.        T2CON=0x30; //设置定时器二为串口波特率模式
  391.        SCON=0x50;  //设置串口方式为1
  392.        RCAP2H=0xff;
  393.        RCAP2L=0xdc; //定时器二自动装初值16位
  394.        TH2=0xff;
  395.        TL2=0xdc;           //定时器二
  396.        TR2=1;               //启动定时器2
  397.        ES=1;                   //打开串口中断
  398.        PS=1;                   //串口优先级设置为最高

  399.        TMOD=0X11;       //打开定时器0和定时器1,工作做方式一
  400.        TH1=(65536-100)/256; //100US定时
  401.        TL1=(65536-100)%256;
  402.        ET1=1 ;                 //打开定时器一中断
  403.        TR1=1 ;                 //启动定时器一
  404.        TH0=0;             //定时器0初始化
  405.        TL0=0;             //切记定时器0不能和定时器一互换,因为定时器0优先级比1高,如果换了以后就不能接收超声波了
  406.      ET0=1;             //打开定时器0中断
  407.        EA=1;                   //打开总中断      
  408.                     
  409.                   

  410.                         
  411. /*  T2CON=0x30;
  412.        SCON=0x50;  //设置串口方式为1
  413.        RCAP2H=0xff;
  414.        RCAP2L=0xdc;
  415.        TH2=0xff;
  416.        TL2=0xdc;
  417.        TMOD=0X11;       //打开定时器0和定时器1,工作做方式一
  418.        TH1=(65536-100)/256; //100US定时
  419.        TL1=(65536-100)%256;
  420.        TH0=0;             //定时器0初始化
  421.        TL0=0;
  422.        ET1=1 ;
  423.        ET0= 1;             //打开定时器0中断
  424.        TR2=1;
  425.        ES=1;
  426.        PS=1;      
  427.        EA=1;

  428. /*******************************************/
  429. /*       TMOD=0X11;
  430.        TH1=(65536-100)/256; //100US定时
  431.        TL1=(65536-100)%256;
  432.        TH0=0;
  433.        TL0=0;
  434.        TR1= 1;
  435.        ET1= 1;
  436.        ET0= 1;
  437.        EA=1;                       //总开关
  438. /******************************************/
  439.    //单独蓝牙的串口设置
  440. /******************************************/
  441.        /*TMOD=0x21;//定时器1工作方式2,8位自动重装  
  442.        TH0=(65536-100)/256; //100US定时
  443.        TL0=(65536-100)%256;
  444.    TH1=0xFd; //11.0592M晶振,9600波特率 
  445.    TL1=0xFd;
  446.        PS=1;
  447.        ET0=1 ;
  448.        TR0=1 ;
  449.        TR1=1 ;//打开定时器1
  450.    SM0=0 ;//串口方式1 SM0 SM1 01 允许接收  
  451.    SM1=1 ;//SMOD=0 16分频
  452.    REN=1 ;
  453.        ES=1 ;//打开串口中断  
  454.    EA=1;//开总中断  */
  455.    //以上跟串口通信初始化有关

  456.        while(1)
  457.        {
  458.        dangwei();//档位          
  459.        fangx();   //方向函数
  460.        kaideng();  //开灯函数
  461.        laba();       //鸣笛函数

  462.        if(strcmp(table,"ON5")==0)//判断是否按下第五个按键,按下则启动超声波模式
  463.          csbmian ();       //超声波模块的主函数
  464.        if(strcmp(table,"ON4")==0)//判断是否按下第四个按键,按下则启动超声波魔术手
  465.          moss ();       //超声波魔术手模块的主函数
  466.        }
  467. }
  468. /***************************************************/
  469. ///*TIMER1中断服务子函数产生PWM信号*/
  470. void pwmdins()interrupt 3         //定时器一,优先级别最低
  471. {

  472.        TH1=(65536-100)/256;                             //100US定时
  473.        TL1=(65536-100)%256;  
  474.        pwmjishu++;                                         // 小车快慢的pwm调速
  475.        pwm();                                               //小车快慢的pwm函数
  476.        timer++;                                 //超声波的基准 定时器100US为准。在这个基础上延时
  477.        pwm_val_left++;                             //舵机的pwm调速基准时间
  478.        pwm_Servomoto();                       //舵机pwm调速函数

  479. }
  480. /***************************************************/
  481. ///*TIMER0中断服务子函数产生PWM信号*/
  482. void timer0()interrupt 1             //因为串口优先级别变最高所以定时器0位第二高
  483. {

  484. }
  485. /***************************************************/

  486.    void serial() interrupt 4     //中断子函数       //ps=1;使之优先级最高
  487. {
  488.        int i;
  489.        ES=0;                         //关闭串口中断,其实不关也没影响
  490.        table[i++]=SBUF;         //数组下标加一,把字符串变成字符字单个取出存入数组,使之成为一元素
  491.        if(i==3)                   //字符串有三个字符,不包括标志位0
  492.        i=0;                       //使之清零以便下次从收
  493.        RI=0;                       //串口标志位硬件制一,手动清零
  494.        ES=1;                       //打开串口                
  495. …………
  496. …………
  497. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

原理图: 无
仿真: 无
代码:
宝马自动驾驶.zip(53.9 KB, 下载次数: 509)


评分

黑币 +100
收起理由
+ 100
共享资料的黑币奖励!

查看全部评分

沙发
ID:1发表于 2017-12-5 14:20|只看该作者
好资料,51黑有你更精彩!!!
板凳
ID:171111发表于 2018-5-1 22:10|只看该作者
谢谢楼主   资料真好
地板
ID:322672发表于 2018-5-5 12:12|只看该作者
手动点赞
5#
ID:77866发表于 2018-5-8 16:59|只看该作者
谢谢楼主,提供资料,解决了急需问题
6#
ID:269454发表于 2018-7-20 17:11|只看该作者
能不能发下电路图
7#
ID:376635发表于 2018-7-21 15:26|只看该作者
资料挺不错的,感谢
8#
ID:393768发表于 2018-9-4 22:36|只看该作者
厉害哦
9#
ID:394168发表于 2018-9-6 01:50|只看该作者
下载了没搞明白怎么弄
10#
ID:400222发表于 2018-9-19 20:09来自手机|只看该作者
有没有制作小车的材料清单
11#
ID:406979发表于 2018-10-9 13:22|只看该作者
谢谢楼主好东西
12#
ID:409750发表于 2018-10-15 09:36来自手机|只看该作者
能不能发下电路图
13#
ID:405273发表于 2018-10-17 11:31|只看该作者
我从论坛下载的资料为啥打不开啊
keil4 keil3都打不开啊

14#
ID:405273发表于 2018-10-17 14:26|只看该作者
已解决 谢谢 文件夹名字的问题
15#
ID:413969发表于 2018-10-23 12:54|只看该作者
不错 学习学习
16#
ID:430125发表于 2018-11-20 19:41|只看该作者
感谢楼主,来学习了
17#
ID:434555发表于 2018-11-27 21:34|只看该作者
资料真好
18#
ID:436792发表于 2018-11-30 20:31|只看该作者
人才,好资料,谢谢楼主分享
19#
ID:436792发表于 2018-11-30 20:49|只看该作者
好资料
20#
ID:443011发表于 2018-12-10 09:06|只看该作者
赞一个
21#
ID:483314发表于 2019-3-2 17:07|只看该作者
可以的对我帮助很大
22#
ID:482489发表于 2019-3-16 18:54|只看该作者

资料真好
23#
ID:495816发表于 2019-3-21 23:26|只看该作者
不错,学习学习
24#
ID:511444发表于 2019-4-13 19:44|只看该作者
感谢楼主分享
25#
ID:300463发表于 2019-4-16 15:49|只看该作者
刚好在调试小车  谢谢了
26#
ID:431514发表于 2019-4-29 07:45|只看该作者
有没有制作小车的材料清单
27#
ID:414113发表于 2019-4-29 16:18|只看该作者
感谢楼主分享,慢慢学习中
28#
ID:431514发表于 2019-5-2 09:04|只看该作者
下载了没搞明白怎么弄
29#
ID:538080发表于 2019-5-18 08:30|只看该作者
这个可以呀
30#
ID:704712发表于 2020-3-9 17:26|只看该作者
没有原理图呢
31#
ID:707535发表于 2020-3-14 13:42|只看该作者
求元件库和封装库
32#
ID:702493发表于 2020-3-14 15:29|只看该作者
楼主,我最近也在玩这个,遇到点问题。
程序没有有关超声波的内容,只是一个直走的命令,但HC-SR04超声波模块连在单片机上,小车不走。
拔掉echo端口,小车直走。
检查超声波模块,超声波模块完好,收发端未接反。
这什么原因啊?求解答。
网上实在是找不到资料,都卡半个月了,以上问题你也遇到过吗?
33#
ID:712292发表于 2020-3-20 15:17|只看该作者
谢谢大神~
34#
ID:713570发表于 2020-3-23 16:53来自手机|只看该作者
楼主有没有电路图
35#
ID:713570发表于 2020-3-23 16:54来自手机|只看该作者
ghdok 发表于 2019-4-16 15:49
刚好在调试小车  谢谢了

有没有电路图,求电路图
36#
ID:712292发表于 2020-4-25 22:31|只看该作者
感谢楼主分享,谢谢大师
37#
ID:695362发表于 2020-4-30 11:03|只看该作者
谢谢楼主分享
38#
ID:608763发表于 2020-6-2 15:06|只看该作者
手动点赞
39#
ID:1107666发表于 2024-1-13 01:51|只看该作者
感谢楼主,正好在看51避障
40#
ID:211360发表于 2024-1-20 11:52|只看该作者
非常感谢!希望能有更全面的资料

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网