找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5511|回复: 4
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
基于nRF24L01的遥控小车,包含源代码,基本框架包括小车上下左右,小车利用左右轮组差速进行转弯,完成各种路线行驶,适合电子爱好者新手练手的小车平台,可从源工程拓展小车功能。


单片机源程序如下:

  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, 下载次数: 141)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:79544 发表于 2017-11-5 13:37 | 只看该作者
楼主:是用按键控制的吗?
回复

使用道具 举报

板凳
ID:718064 发表于 2022-11-18 19:36 | 只看该作者
电路图有吗,俺不懂
回复

使用道具 举报

地板
ID:1060234 发表于 2023-1-3 23:02 | 只看该作者
请问这个是适用天线版本的吗?
回复

使用道具 举报

5#
ID:402383 发表于 2024-3-25 16:25 | 只看该作者
判断/检查数组里面的多个元素是否等于目标值和只检查数组的一个元素,这两种方法的效果会一样吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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