pww999 发表于 2012-11-8 23:21:48

NRF24L01 六通道摇控器PPM

本帖最后由 pww999 于 2012-11-9 14:19 编辑

上次发了一个2通道PWM,

http://www.geek-workshop.com/forum.php?mod=viewthread&tid=1228

这次顺手写了个 六通道PPM,只要转变一下就行了

未测试过哦,自己测试吧

去片:

-------------------------发送端--------------------------------

//MISO -> D12
// * MOSI ->D11
// * SCK ->D13

//* CE ->D8
//* CSN ->D7

#include "SPI.h"      //24L01库文件
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"

int aaa;
int aaaa;
int bbb;
int bbbb;
int ccc;
int cccc;
int ddd;
int dddd;
int eee;
int eeee;
int fff;
int ffff;


void setup(){
Mirf.spi = &MirfHardwareSpi;//加载24L01SPI
Mirf.init();                                 //开始
   Mirf.setTADDR((byte *)"serv1");//发送到"接收地址"
Mirf.payload = sizeof(int);          //数据类型(整数)
   Mirf.config();//发送通道??
}

void loop(){
aaa=analogRead(A0);            //读取电平(0至1023)
bbb= analogRead(A1);      
ccc=analogRead(A2);            
ddd= analogRead(A3);
eee=analogRead(A4);            
fff= analogRead(A5);

aaa=map(aaa,0,1023,0,999) ;
bbb=map(bbb,0,1023,1000,1999) ;
ccc=map(ccc,0,1023,2000,2999) ;
ddd=map(ddd,0,1023,3000,3999) ;
eee=map(eee,0,1023,4000,4999) ;
fff=map(fff,0,1023,5000,5999) ;
//这里如果模拟口多的话,还可以分出更多通道.........

   if (aaa !=aaaa)                  //如果 X 向电平与之前电平不一样则执行
   {
      Mirf.send((byte *)&aaa); //发送X向电平
                        
   while(Mirf.isSending()){   //等待或继续发送??
}
aaaa=aaa;//保存当前电平
    }
if (bbb !=bbbb)                  //如果 Y 向电平与之前电平不一样则执行
{
   Mirf.send((byte *)&bbb);//发送Y向电平
                     
while(Mirf.isSending()){    //等待或继续发送?
}
bbbb=bbb;//保存当前电平
}

//ccc~fff同上,自己写吧
//(也可以不用IF自己简化吧)

delay(10);                        // 等待0.01秒
}



---------------------接收端--------------------------------

//MISO -> D12
// * MOSI ->D11
// * SCK ->D13

//* CE ->D8
//* CSN ->D7
//LCD 1602 IIC SDA---A4328
//LCD 1602 IIC SCL---A5 328


#include "Wire.h"                              //LCD1602 IIC 库文件
#include <LiquidCrystal_I2C.h>;
LiquidCrystal_I2C lcd(0x27,16,2);

#include "SPI.h"                              //24L01库文件
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"

int data;
int aaa;
int bbb;
int ccc;
int ddd;
int eee;
int fff;

void setup(){   
   lcd.init();                                        //加载LCD1602 IIC
    lcd.backlight();
    //lcd.setBacklight(120);               //设置LCD背光亮度,好象没作用
      delay(20);
Mirf.spi = &MirfHardwareSpi;          //加载24L01SPI
Mirf.init();
Mirf.setRADDR((byte *)"serv1"); //接收地址" "
Mirf.payload = sizeof(int);            //数据类型(整数)
      Mirf.config();
}

void loop(){

if(Mirf.dataReady()){                        //如果接收到数据则执行

      Mirf.getData((byte *)&data);   //接收数据

      if (data>=0&&data<=999)               
      {
aaa=map(data,0,999,1100,1900); //这里为模拟量比例成 PPM频率 1100-1900,
      }
         if (data>=1000&&data<=1999)         
         {
    bbb=map(data,1000,1999,1100,1900);
      }

//ccc~fff自己写吧....

    Mirf.rxFifoEmpty();            //清理24L01援存??
}
   lcd.clear();                     //清屏
      lcd.setCursor(0, 0);
      lcd.print(aaa);               
      lcd.setCursor(6, 0);
      lcd.print(bbb);            
delay(10);
}

小猪会轮滑 发表于 2012-11-9 08:19:01

:o:o:o干什么的

pww999 发表于 2012-11-9 08:28:32

本帖最后由 pww999 于 2012-11-9 09:13 编辑

由于使用int 0-99, 每次ppm频率跳变为约=8,所以精度不高,
更改0-999,这样比例提高10倍,每次ppm频率跳变为约=1了,

nike1 发表于 2012-11-9 15:07:46

非常感谢LZ分享,正好要用到

xpaul 发表于 2012-11-11 17:35:36

学习学习,也正在做24L01+5110LCD+ARDUINO UNO作主控机,24L01+5110LCD+ARDUINO mini作客户机{:soso_e182:}

xpaul 发表于 2012-11-11 17:38:10

但双向通信时,运行几分钟后死机了。{:soso_e127:}

demon04551 发表于 2013-8-25 10:28:35

有测试过的吗,好用吗

葱头同学 发表于 2013-8-29 19:21:04

不知道是否可以用来作为航模的接收机和遥控器呢?比如四轴

agaonet 发表于 2013-9-22 01:56:28

mak 一下。

sangyingahua 发表于 2013-9-26 20:58:38

xpaul 发表于 2012-11-11 17:38 static/image/common/back.gif
但双向通信时,运行几分钟后死机了。

最后出来没?我最近在做双工的,一直没结果

sangyingahua 发表于 2013-9-26 20:59:46

双工的能实现吗?
最近出了点问题!

学慧放弃 发表于 2013-12-8 18:07:49

非常感谢大神,我的遥控总算有下落了

学慧放弃 发表于 2013-12-8 18:08:44

弱弱的问句那是连续性的吗??

bonarm 发表于 2014-8-24 23:52:34

可以在采集6个数据后一次以数组形式发送

雨轩 发表于 2015-5-31 11:36:54

可以控制六路继电器动作吗?
页: [1] 2
查看完整版本: NRF24L01 六通道摇控器PPM