单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:5674|回复:4

基于nRF24L01的2.4G遥控车51单片机源程序

 [复制链接]
ID:236141发表于 2017-9-27 19:09|显示全部楼层
基于nRF24L01的遥控小车,包含源代码,基本框架包括小车上下左右,小车利用左右轮组差速进行转弯,完成各种路线行驶,适合电子爱好者新手练手的小车平台,可从源工程拓展小车功能。
0.png

单片机源程序如下:

  1. #include "nRF24L01.h"
  2.     
  3. uchar TX_ADDRESS[TX_ADR_WIDTH]={0xAB,0xAA,0xAA,0xAA,0xAA}; //发送地址
  4. uchar RX_ADDRESS[RX_ADR_WIDTH]={0xAB,0xAA,0xAA,0xAA,0xAA}; //接收地址

  5. uchar   rate = 0x0F;   //2Mbs, 0dB  低噪声增益开启


  6. sbit   LED1     =P1^1;                 //       前进的按键接口  根据自己焊接决定
  7. //sbit   LED2     =P2^1;                
  8. //sbit     LED3       =P2^2;                
  9. //sbit     LED4       =P2^3;
  10. //sbit     LED5       =P2^4;                              
  11. sbit L1=P2^6;
  12. sbit L2=P2^7;
  13. sbit R1=P2^4;
  14. sbit R2=P2^5;
  15. //sbit fire=P2^7;    
  16. uchar rece_buf[32];                             //接收寄存器
  17.                              //a0=37:最大角度,脉宽1.899ms

  18. void delay(uint t)
  19. {
  20.      uint a,b;
  21.      for(a=0;a<t;a++)
  22.          for (b=0;b<255;b++);
  23. }

  24. void main()
  25. {     int i;
  26.      uchar n=0,m=0;
  27.      LED1=1;
  28. //     LED2=1;
  29. //     P2=0xff;
  30. //delay(1000) ;
  31. //   fire=0;
  32.      while(NRF24L01_Check());               //等待检测到NRF24L01,程序才会向下执行
  33.      NRF24L01_RT_Init(TX_PLOAD_WIDTH,TX_ADDRESS,TX_ADR_WIDTH,RX_ADDRESS,RX_ADR_WIDTH,rate);            

  34.      for(i=0;i<12;i++)
  35.          {
  36.              delay(100);    
  37.              LED1=~LED1;
  38.          }
  39.      LED1=1;
  40. //     fire=1;
  41.                 

  42.      while(1)
  43.      {
  44. //     **************************************


  45. //**************************************************
  46.          if(NRF_IRQ==0)           // 如果无线模块接收到数据
  47.          {        
  48.             
  49.              if(NRF24L01_RxPacket(rece_buf)==0)
  50.              {    
  51.                  if(rece_buf[1]==0xaa)               //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
  52.                  {
  53.                      LED1=0;
  54. //                     LED2=1;
  55. //                     LED3=0;
  56. //                     LED4=1;
  57. //                     LED5=0;
  58.                      L1     =1;
  59.                      L2     =0;
  60.                      R1     =1;
  61.                      R2     =0;
  62.                  }
  63.                  else if(rece_buf[1]==0xab)               //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
  64.                  {
  65.                      LED1=0;
  66. //                     LED2=0;
  67. //                     LED3=1;
  68. //                     LED4=0;
  69. //                     LED5=1;
  70.                      L1     =0;
  71.                      L2     =1;
  72.                      R1     =0;
  73.                      R2     =1;
  74.                  }
  75.                  else if(rece_buf[1]==0xac)               //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
  76.                  {
  77.                      LED1=0;
  78. //                     LED2=1;
  79. //                     LED3=0;
  80. //                     LED4=0;
  81. //                     LED5=1;
  82.                      L1     =1;
  83.                      L2     =0;
  84.                      R1     =0;
  85.                      R2     =1;
  86.                  }    
  87.                  else if(rece_buf[1]==0xad)               //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
  88.                  {
  89.                      LED1=0;
  90. //                     LED2=0;
  91. //                     LED3=1;
  92. //                     LED4=1;
  93. //                     LED5=0;
  94. //                     L1     =0;
  95.                      L2     =1;
  96.                      R1     =1;
  97.                      R2     =0;
  98.                  }
  99.                 
  100.                  else if(rece_buf[1]==0xae)               //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
  101.                  {
  102.                      LED1=0;
  103.                     
  104. //                     LED2=0;
  105.                  }
  106.                  else if(rece_buf[1]==0xaf)               //第1位以后是收到的命令数据,rece_buf[0]是数据位数长度
  107.                  {
  108.                      LED1=0;
  109. //                     fire=0;
  110. //                     LED2=0;
  111.                  }
  112.                  else
  113.                  {
  114.                      LED1=0;
  115. //                     LED2=1;
  116. //                     LED3=1;
  117. //                     LED4=1;
  118. //                     LED5=1;
  119.                      L1     =0;
  120.                      L2     =0;
  121.                      R1     =0;
  122.                      R2     =0;
  123. //                     fire=1;
  124.                  }
  125.                  delay(20);
  126.              }
  127.          }
  128.          else    
  129.          {
  130. ……………………

  131. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
51版遥控小车.zip(140.68 KB, 下载次数: 146)
ID:79544发表于 2017-11-5 13:37|显示全部楼层
楼主:是用按键控制的吗?
ID:718064发表于 2022-11-18 19:36|显示全部楼层
电路图有吗,俺不懂
ID:1060234发表于 2023-1-3 23:02|显示全部楼层
请问这个是适用天线版本的吗?
ID:402383发表于 2024-3-25 16:25|显示全部楼层
判断/检查数组里面的多个元素是否等于目标值和只检查数组的一个元素,这两种方法的效果会一样吗?

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

Powered by 单片机教程网