|
本帖最后由 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);
} |
|