zoukankan      html  css  js  c++  java
  • [51单片机] nRF24L01 无线模块 测试 按键-灯-远程控制

    哈哈,穷吊死一个,自己做的一个超简单的板还没有电源提供,只得借助我的大开发板啦。其实这2个模块是完全可以分开的,无线嘛,你懂得!进入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯

    >_<!首先是发送模块:

     1 void main()
     2 {
     3      uchar Tx_Buf1[]={1};    //发送的信息1 
     4      uchar Rx_Buf[32];      //接收到的数据暂存器,最多32字节数据  
     5      init_NRF24L01();
     6      LED6=1;                //初始灯6熄灭   
     7 
     8     while(NRF24L01_Check())                    //检查不到24l01则报警 
     9     {
    10         beep=0;
    11         delay_ms(200);
    12         beep=1;
    13         delay_ms(200);
    14     }
    15     while(1)
    16     {    
    17         RX_Mode();                            //接收模式  
    18         while(!nRF24L01_RxPacket(Rx_Buf))     //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式  
    19         {
    20             if(KEY1==0)                         //按了按键1,则变成发送模式,发送对应数据,发送完后变成接收模式 
    21             {    
    22                 delay_ms(5);//消抖动 
    23                 if(KEY1==0)
    24                 {
    25                      while(!KEY1);
    26                     TX_Mode();                         //发送模式 
    27                     Tx_Buf1[0]=1;                    //将1发送过去
    28                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
    29                     LED6=0;
    30                     delay_ms(300);
    31                     LED6=1;
    32                     delay_ms(300);                    //发送后LED1闪一下 
    33                     break;                            //退出最近的循环,从而变回接收模式,这句关键
    34                  }    
    35              }
    36              else if(KEY2==0)                     
    37              {    
    38                 delay_ms(5);//消抖动 
    39                 if(KEY2==0)
    40                 {
    41                      while(!KEY2);
    42                     TX_Mode();                         //发送模式 
    43                     Tx_Buf1[0]=2;                    //将2发送过去
    44                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
    45                     LED6=0;
    46                     delay_ms(300);
    47                     LED6=1;
    48                     delay_ms(300);                    
    49                     break;                            //退出最近的循环,从而变回接收模式,这句关键
    50                  }    
    51               }
    52               else if(KEY3==0)                         
    53               {    
    54                 delay_ms(5);//消抖动 
    55                 if(KEY3==0)
    56                 {
    57                      while(!KEY3);
    58                     TX_Mode();                         //发送模式 
    59                     Tx_Buf1[0]=3;                    //将3发送过去
    60                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
    61                     LED6=0;
    62                     delay_ms(300);
    63                     LED6=1;
    64                     delay_ms(300);                    
    65                     break;                            //退出最近的循环,从而变回接收模式,这句关键
    66                  }    
    67               }
    68               else if(KEY4==0)                         //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式 
    69               {    
    70                 delay_ms(5);//消抖动 
    71                 if(KEY4==0)
    72                 {
    73                      while(!KEY4);
    74                     TX_Mode();                         //发送模式 
    75                     Tx_Buf1[0]=4;                    //将4发送过去
    76                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
    77                     LED6=0;
    78                     delay_ms(300);
    79                     LED6=1;
    80                     delay_ms(300);                    
    81                     break;                            //退出最近的循环,从而变回接收模式,这句关键
    82                  }    
    83               }
    84          }
    85          if(Rx_Buf[0]==1)                               //若接收到对应的数据则实现对应功能 
    86          {
    87              Rx_Buf[0]=0;                //清空数据 
    88              LED6=0;
    89               delay_ms(300);
    90               LED6=1;
    91               delay_ms(300);                //接收到数据 后闪烁      
    92          }
    93     }
    94 }

    第8~14行检测nRF24L01是否存在,如果不存在就报警,这里把beep映射到一个蜂鸣器的引脚;接下来进入主循环,首先设置为接收模式循环检测是否收到数据,如果收到数据就直接跳到85行执行LED6的闪烁功能,在循环检测是否收到数据期间,还可以检测是否有按键按下,并转换为发送模式将对应命令发送出去;总的来说比较简单,这里就不做详解,此外要有一个nRF24L01的51驱动文件,网上很多,自己写起来有点烦~调试可能会出现很多错误!

    >_<!接收端:

     1 void main()
     2 {
     3      uchar Tx_Buf1[]={1};    //发送的信息1 
     4      uchar Rx_Buf[32];      //接收到的数据暂存器,最多32字节数据  
     5      init_NRF24L01();
     6      LED6=1;                //初始灯6熄灭   
     7 
     8     while(NRF24L01_Check())                    //检查不到24l01则报警 
     9     {
    10         beep=0;
    11         delay_ms(200);
    12         beep=1;
    13         delay_ms(200);
    14     }
    15     while(1)
    16     {    
    17         RX_Mode();                            //接收模式  
    18         while(!nRF24L01_RxPacket(Rx_Buf))     //等待接收数据,返回1则接收到数据,在等待接收数据期间,可以随时变成发送模式  
    19         {
    20             if(KEY8==0)                         //按了按键8,则变成发送模式,发送对应数据,发送完后变成接收模式 
    21             {    
    22                 delay_ms(5);//消抖动 
    23                 if(KEY8==0)
    24                 {
    25                      while(!KEY8);
    26                     TX_Mode();     //发送模式 
    27                     nRF24L01_TxPacket(Tx_Buf1);        //发送命令数据
    28                     LED6=0;
    29                     delay_ms(300);
    30                     LED6=1;
    31                     delay_ms(300);                    //发送后LED6闪一下 
    32                     break;                            //退出最近的循环,从而变回接收模式,这句关键
    33                  }    
    34              }
    35          }
    36          //1//if(Rx_Buf[0]==1)                               //若接收到对应的数据则实现对应功能 
    37          //1//{
    38          //1//   Rx_Buf[0]=0;                //清空数据 
    39          //1//   LED6=0;
    40          //1//     delay_ms(300);
    41          //1//     LED6=1;
    42          //1//     delay_ms(300);                //接收到数据 后闪烁      
    43          //1//}
    44         switch(Rx_Buf[0]){//对数据进行分析来控制灯亮
    45         case 0:
    46             break;
    47         case 1:
    48             Rx_Buf[0]=0;                //清空数据 
    49             LED1=0;
    50             delay_ms(300);
    51             LED1=1;
    52             delay_ms(300);    
    53             break;
    54         case 2:
    55             Rx_Buf[0]=0;                //清空数据 
    56             LED2=0;
    57             delay_ms(300);
    58             LED2=1;
    59             delay_ms(300);    
    60             break;
    61         case 3:
    62             Rx_Buf[0]=0;                //清空数据 
    63             LED3=0;
    64             delay_ms(300);
    65             LED3=1;
    66             delay_ms(300);    
    67             break;
    68         default:
    69             Rx_Buf[0]=0;                //清空数据 
    70             LED4=0;
    71             delay_ms(300);
    72             LED4=1;
    73             delay_ms(300);    
    74             break;
    75         }         
    76     }
    77 }

    这个就不解释啦,和发送的差不多,就是等待接收,接收的时候还能检测按键然后将命令发送过去,当收到数据时,就转到下面的switch对命令进行解析,来实现不同LED灯的亮灭。

    资源下载链接:http://pan.baidu.com/s/1kTyZiXT 

  • 相关阅读:
    XCode 7 运行 cocos2dx 2.2.6问题小节
    SerializeField和Serializable
    convert2utf8withbom
    NGUI制作字体的三种方法
    js json stringify
    nodejs npm 使用淘宝 NPM 镜像
    js url?callback=xxx xxx的介绍
    强引用 弱引用
    关于xml里的encoding
    js 历史
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3840013.html
Copyright © 2011-2022 走看看