找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7879|回复: 0
收起左侧

NRF24L01 2.4G摇控收发纯数字2通道PWM(可以转为4,8...N个双向通道)

[复制链接]
ID:113207 发表于 2016-4-10 03:02 | 显示全部楼层 |阅读模式
之前发的24L01 控制LED灯明暗,弄好了  

可以增加用 map 更改数字范围实现更多通道

在arduino1.01 编译通过,10米内没压力,(注:通道多了,会有延时)
-------------------------发送端--------------------------------
  1.     //MISO -> D12  
  2.     // * MOSI ->D11  
  3.     // * SCK ->D13
  4.      
  5.      //* CE ->D8
  6.      //* CSN ->D7
  7.      
  8.     #include "SPI.h"      //24L01库文件
  9.     #include "Mirf.h"
  10.     #include "nRF24L01.h"
  11.     #include "MirfHardwareSpiDriver.h"
  12.      
  13.     int aaa;
  14.     int aaaa;
  15.     int bbb;
  16.     int bbbb;
  17.      
  18.     void setup(){
  19.       Mirf.spi = &MirfHardwareSpi;  //加载24L01  SPI
  20.       Mirf.init();                                 //开始
  21.        Mirf.setTADDR((byte *)"serv1");//发送到"接收地址"
  22.       Mirf.payload = sizeof(int);          //数据类型(整数)
  23.        Mirf.config();  //发送通道??
  24.     }
  25.     void loop(){
  26.       aaa=analogRead(A4)+1;            //读取 X 向电平PWM(1至1024)
  27.       bbb= -analogRead(A5)-1;      //读取 Y向电平PWM(-1至-1024)
  28.        if (aaa !=aaaa)                    //如果 X 向电平与之前电平不一样则执行
  29.        {
  30.           Mirf.send((byte *)&aaa); //发送X向电平
  31.          aaaa=aaa;                       //保存X 向当前电平
  32.          while(Mirf.isSending()){     //等待或继续发送??
  33.       }
  34.         }
  35.     if (bbb !=bbbb)                    //如果 Y 向电平与之前电平不一样则执行
  36.     {
  37.        Mirf.send((byte *)&bbb);  //发送Y向电平
  38.       bbbb=bbb;                      //保存Y 向当前电平
  39.       while(Mirf.isSending()){    //等待或继续发送?
  40.       }
  41.     }
  42.      delay(10);                        // 等待0.01秒
  43.     }
复制代码

---------------------接收端--------------------------------
  1.     //MISO -> D12  
  2.     // * MOSI ->D11  
  3.     // * SCK ->D13
  4.      
  5.      //* CE ->D8
  6.      //* CSN ->D7
  7.     //LCD 1602 IIC SDA---A4  328
  8.     //LCD 1602 IIC SCL---A5 328
  9.      
  10.      
  11.     #include "Wire.h"                                //LCD1602 IIC 库文件
  12.     #include ;
  13.     LiquidCrystal_I2C lcd(0x27,16,2);
  14.      
  15.     #include "SPI.h"                              //24L01库文件
  16.     #include "Mirf.h"
  17.     #include "nRF24L01.h"
  18.     #include "MirfHardwareSpiDriver.h"
  19.      
  20.     int data;
  21.     int aaa;
  22.     int bbb;
  23.      
  24.     void setup(){   
  25.        lcd.init();                                        //加载LCD1602 IIC
  26.         lcd.backlight();
  27.         //lcd.setBacklight(120);               //设置LCD背光亮度,好象没作用
  28.             delay(20);
  29.       Mirf.spi = &MirfHardwareSpi;          //加载24L01  SPI
  30.       Mirf.init();
  31.       Mirf.setRADDR((byte *)"serv1"); //接收地址" "
  32.       Mirf.payload = sizeof(int);            //数据类型(整数)
  33.           Mirf.config();
  34.     }
  35.      
  36.     void loop(){
  37.      
  38.       if(Mirf.dataReady()){                          //如果接收到数据则执行
  39.      
  40.           Mirf.getData((byte *)&data);   //接收数据
  41.      
  42.           if (data>=1)               //如果大于或等于1为X向 (如果设为 >=0就会 X,Y通道冲突,所以设为1开始)
  43.           {
  44.      aaa=data-1;
  45.           }
  46.              if (data<=-1)         //如果小于或等于-1为Y向(............)
  47.              {
  48.         bbb=data+1;
  49.           }
  50.      
  51.         Mirf.rxFifoEmpty();            //清理24L01援存??
  52.       }
  53.          lcd.clear();                     //清屏
  54.           lcd.setCursor(0, 0);
  55.           lcd.print(aaa);                  //显示X向 1至1024
  56.           lcd.setCursor(6, 0);
  57.           lcd.print(0-bbb);             //显示Y向,并将负数变为正数 1至1024
  58.       delay(10);
  59.     }
复制代码
Mirf.payload = sizeof(int);            //数据类型(整数)

if(Mirf.dataReady()){

应该指的是  从机接收到   主机发来的任何信号 就开始执行下面语句吧

之前定义类型为整数,所以每收到一条整数就开始  .因为要快速响应~

24L01 .zip (16.64 KB, 下载次数: 35)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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