小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 7107|回复: 2

解决 51duino源代码SDK V2.0 超声波雷达不能显示问题

[复制链接]
发表于 2015-9-24 17:13:06 | 显示全部楼层 |阅读模式
本帖最后由 blueanima 于 2015-9-24 20:13 编辑

非常感谢版主提供51duino源代码SDK V2.0,供大家学习,而且自己可以按照需要更改了,但是我直接编译后发现超声波距离显示一直为0。
后来看了看,发现是main.c里面少了一个向上位机传输的代码,加上就有显示了。也不知道对不对,会不会是我画蛇添足了,呵呵。

main.c
最后几行代码
while(1)
    {
          Cruising_Mod();
          Send_Distance();//缺少这一句
    }

请大家指教

附图一张,我的机器人


IMG_0019.JPG
回复

使用道具 举报

发表于 2015-9-24 20:27:35 | 显示全部楼层
你加入的是对的。但是要注意了,如果加入了超声波回传的这句话,那么最好不要切换到超声波避障模式,因为我们发现如果发送数据太快,超声波模块返回的值不正确。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-24 21:19:56 | 显示全部楼层
本帖最后由 blueanima 于 2015-9-24 21:21 编辑
liuviking 发表于 2015-9-24 20:27
你加入的是对的。但是要注意了,如果加入了超声波回传的这句话,那么最好不要切换到超声波避障模式,因为我 ...

万分感谢版主亲自回复啊,不胜荣幸。
再请教版主一个问题
我根据【分享】wifi小车超声波测试代码改进http://www.wifi-robots.com/thread-1911-1-1.html(感谢cjnt007)将代码加入了51duino源代码SDK V2.0
因为我是初学,不懂得我如何在PWM和超声波上同时使用定时器1
超声波改进代码原文在time.c上定义
  1. void Timer_1(void) interrupt 3

  2. {

  3. t1_conter++;  

  4. //改进,定时器溢出一次,

  5. t1_conter

  6. 就+1



  7.         if((t1_conter*3)%9==0)        //9ms切换一次

  8.         {

  9.                  if(rec_flag)

  10.                  {

  11.                      LED5 = ~LED5;        //控制LED5在接收数据时闪烁

  12.                  }

  13.                  else

  14.                  {

  15.                      LED5 = 1;                //不接收时不亮

  16.                  }

  17.         }

  18. }
复制代码



原始的time.c上有一个同样的电机pwm定义
  1. void <font color="Red">Timer_2</font>(void) interrupt 3(<font color="Red">我将Timer_1改为了Timer_2,这样编译才不会出错,但是pwm无法使用了</font>)
  2. {         
  3.     static uint16 ms_count=0;
  4.         static uchar _100us_count=0;
  5.         //TH1     =   0xA9;   
  6.     //TL1     =   0x9A;

  7.         Uart_timeout_count++;
  8.         if((Uart_timeout_count == 1000) && (rec_flag)) //串口接收1秒超时
  9.         {
  10.                 rec_flag = 0;
  11.         }

  12.         if(ms_count++ >= 1000)
  13.         {
  14.              ms_count = 0;
  15.                  if(rec_flag)
  16.                  {
  17.                      LED5 = ~LED5;
  18.                  }
  19.                  else
  20.                  {
  21.                      LED5 = 1;
  22.                  }
  23.         }
  24.          



  25.          TH1     =   0xF7;   
  26.      TL1     =   0x5C; //10KHZ频率定时

  27.          _100us_count++;

  28.          if(_100us_count <= Left_Speed) //左侧占空比,1KHz
  29.          {
  30.              MOTOR_A_EN = 1;
  31.          }
  32.          else
  33.          {
  34.              MOTOR_A_EN = 0;
  35.          }

  36.          if(_100us_count <= Right_Speed)        //右侧占空比,1KHz
  37.          {
  38.              MOTOR_B_EN = 1;
  39.          }
  40.          else
  41.          {
  42.              MOTOR_B_EN = 0;
  43.          }

  44.          if(10 == _100us_count)
  45.          {
  46.               _100us_count = 0;
  47.                   MOTOR_A_EN = 0;
  48.                   MOTOR_B_EN = 0;
  49.          }
  50.                  
  51. }

  52. void Timer_1(void) interrupt 3
  53. {

  54.         t1_conter++;  


  55.         if((t1_conter*3)%9==0)        
  56.         {
  57.                  if(rec_flag)
  58.                  {
  59.                      LED5 = ~LED5;        
  60.                  }
  61.                  else
  62.                  {
  63.                      LED5 = 1;               
  64.                  }
  65.         }
  66. }
复制代码

我应该如何更改代码,使得超声波和pwm都使用定时器1


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-22 23:59 , Processed in 1.103579 second(s), 27 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表