找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8267|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

NRF24L01 2.4G搖控收發(fā)純數(shù)字2通道PWM(可以轉(zhuǎn)為4,8...N個(gè)雙向通道)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:113207 發(fā)表于 2016-4-10 03:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
之前發(fā)的24L01 控制LED燈明暗,弄好了  

可以增加用 map 更改數(shù)字范圍實(shí)現(xiàn)更多通道

在arduino1.01 編譯通過,10米內(nèi)沒壓力,(注:通道多了,會(huì)有延時(shí))
-------------------------發(fā)送端--------------------------------
  1.     //MISO -> D12  
  2.     // * MOSI ->D11  
  3.     // * SCK ->D13
  4.      
  5.      //* CE ->D8
  6.      //* CSN ->D7
  7.      
  8.     #include "SPI.h"      //24L01庫(kù)文件
  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");//發(fā)送到"接收地址"
  22.       Mirf.payload = sizeof(int);          //數(shù)據(jù)類型(整數(shù))
  23.        Mirf.config();  //發(fā)送通道??
  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 向電平與之前電平不一樣則執(zhí)行
  29.        {
  30.           Mirf.send((byte *)&aaa); //發(fā)送X向電平
  31.          aaaa=aaa;                       //保存X 向當(dāng)前電平
  32.          while(Mirf.isSending()){     //等待或繼續(xù)發(fā)送??
  33.       }
  34.         }
  35.     if (bbb !=bbbb)                    //如果 Y 向電平與之前電平不一樣則執(zhí)行
  36.     {
  37.        Mirf.send((byte *)&bbb);  //發(fā)送Y向電平
  38.       bbbb=bbb;                      //保存Y 向當(dāng)前電平
  39.       while(Mirf.isSending()){    //等待或繼續(xù)發(fā)送?
  40.       }
  41.     }
  42.      delay(10);                        // 等待0.01秒
  43.     }
復(fù)制代碼

---------------------接收端--------------------------------
  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 庫(kù)文件
  12.     #include ;
  13.     LiquidCrystal_I2C lcd(0x27,16,2);
  14.      
  15.     #include "SPI.h"                              //24L01庫(kù)文件
  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);               //設(shè)置LCD背光亮度,好象沒作用
  28.             delay(20);
  29.       Mirf.spi = &MirfHardwareSpi;          //加載24L01  SPI
  30.       Mirf.init();
  31.       Mirf.setRADDR((byte *)"serv1"); //接收地址" "
  32.       Mirf.payload = sizeof(int);            //數(shù)據(jù)類型(整數(shù))
  33.           Mirf.config();
  34.     }
  35.      
  36.     void loop(){
  37.      
  38.       if(Mirf.dataReady()){                          //如果接收到數(shù)據(jù)則執(zhí)行
  39.      
  40.           Mirf.getData((byte *)&data);   //接收數(shù)據(jù)
  41.      
  42.           if (data>=1)               //如果大于或等于1為X向 (如果設(shè)為 >=0就會(huì) X,Y通道沖突,所以設(shè)為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向,并將負(fù)數(shù)變?yōu)檎龜?shù) 1至1024
  58.       delay(10);
  59.     }
復(fù)制代碼
Mirf.payload = sizeof(int);            //數(shù)據(jù)類型(整數(shù))

if(Mirf.dataReady()){

應(yīng)該指的是  從機(jī)接收到   主機(jī)發(fā)來的任何信號(hào) 就開始執(zhí)行下面語句吧

之前定義類型為整數(shù),所以每收到一條整數(shù)就開始  .因?yàn)橐焖夙憫?yīng)~

24L01 .zip (16.64 KB, 下載次數(shù): 35)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表