极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 36585|回复: 15

NRF24L01 六通道摇控器PPM

[复制链接]
发表于 2012-11-8 23:21:48 | 显示全部楼层 |阅读模式
本帖最后由 pww999 于 2012-11-9 14:19 编辑

上次发了一个2通道PWM,

http://www.geek-workshop.com/for ... thread&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;  //加载24L01  SPI
  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---A4  328
//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;          //加载24L01  SPI
  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 | 显示全部楼层
干什么的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-9 08:28:32 | 显示全部楼层
本帖最后由 pww999 于 2012-11-9 09:13 编辑

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

使用道具 举报

发表于 2012-11-9 15:07:46 | 显示全部楼层
非常感谢LZ分享,正好要用到
回复 支持 反对

使用道具 举报

发表于 2012-11-11 17:35:36 | 显示全部楼层
学习学习,也正在做24L01+5110LCD+ARDUINO UNO作主控机,24L01+5110LCD+ARDUINO mini作客户机{:soso_e182:}
回复 支持 反对

使用道具 举报

发表于 2012-11-11 17:38:10 | 显示全部楼层
但双向通信时,运行几分钟后死机了。{:soso_e127:}
回复 支持 反对

使用道具 举报

发表于 2013-8-25 10:28:35 | 显示全部楼层
有测试过的吗,好用吗
回复 支持 反对

使用道具 举报

发表于 2013-8-29 19:21:04 | 显示全部楼层
不知道是否可以用来作为航模的接收机和遥控器呢?比如四轴
回复 支持 反对

使用道具 举报

发表于 2013-9-22 01:56:28 | 显示全部楼层
mak 一下。
回复 支持 反对

使用道具 举报

发表于 2013-9-26 20:58:38 | 显示全部楼层
xpaul 发表于 2012-11-11 17:38
但双向通信时,运行几分钟后死机了。

最后出来没?我最近在做双工的,一直没结果
回复 支持 反对

使用道具 举报

发表于 2013-9-26 20:59:46 | 显示全部楼层
双工的能实现吗?
最近出了点问题!
回复 支持 反对

使用道具 举报

发表于 2013-12-8 18:07:49 | 显示全部楼层
非常感谢大神,我的遥控总算有下落了
回复 支持 反对

使用道具 举报

发表于 2013-12-8 18:08:44 | 显示全部楼层
弱弱的问句那是连续性的吗??
回复 支持 反对

使用道具 举报

发表于 2014-8-24 23:52:34 | 显示全部楼层
可以在采集6个数据后一次以数组形式发送
回复 支持 反对

使用道具 举报

发表于 2015-5-31 11:36:54 | 显示全部楼层
可以控制六路继电器动作吗?
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 00:59 , Processed in 0.050547 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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