【解析新特性】300W单路输出工业电源>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 用arduino做的一个模拟无线倒车雷达

共1条 1/1 1 跳转至

用arduino做的一个模拟无线倒车雷达

菜鸟
2015-03-16 21:35:42    评分

用到了两块arduino板,两块nrf24l01。一个超声波测距模块。

发射端:

发射

接收端:

测试

发射测试


电脑串口显示:

电脑显示


/*
nRF24L01 Arduino发送端

Ansifa
2015/3/7

引脚接法:
nRF24L01   Arduino UNO
VCC	<->	3.3V
GND	<->	GND
CE	<->	D9
CSN	<->	D10
MOSI<->	D11
MISO<->	D12
SCK	<->	D13
IRQ	<->	不接
*/

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

#include "SR04.h"
#include <Stepper.h>
#define TRIG_PIN 2
#define ECHO_PIN 3

SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
void setup()
{
    Serial.begin(9600);
    SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);//超声波
    
    
    Mirf.cePin = 9;		//设置CE引脚为D9
    Mirf.csnPin = 10;	//设置CE引脚为D10
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();  //初始化nRF24L01		

	//设置接收标识符"Sen01"
    Mirf.setRADDR((byte *)"Sen01");
    //设置一次收发的字节数,这里发一个整数,写sizeof(unsigned int),实际等于2字节
    Mirf.payload = sizeof(unsigned int);
    //发送通道,可以填0~128,收发必须一致。
    Mirf.channel = 3;
    Mirf.config();

	//注意一个Arduino写Sender.ino,另一个写Receiver.ino。
	//这里标识写入了Sender.ino
    Serial.println("I'm Sender...");
}
unsigned int adata = 0;
void loop()
{
	//读取A0值到adata
    //adata = analogRead(A0);
    a=sr04.Distance();
    adata=int(a);

    //由于nRF24L01只能以byte单字节数组形式发送Mirf.payload个数据,
    //所以必须将所有需要传输的数据拆成byte。
    //下面定义byte数组,存放待发数据,因为Mirf.payload = sizeof(unsigned int);
    //实际下面等于byte data[2];
    byte data[Mirf.payload];

    //adata是unsigned int双字节数据,必须拆开。
    //将adata高低八位拆分:
    data[0] = adata & 0xFF;		//低八位给data[0],
    data[1] = adata >> 8;		//高八位给data[1]。

    //设置向"serv1"发送数据
    Mirf.setTADDR((byte *)"Rec01");
    Mirf.send(data);
    //while死循环等待发送完毕,才能进行下一步操作。
    while(Mirf.isSending()) {}
    delay(20);
}

 

/*
nRF24L01 Arduino Receiver接收端

Ansifa
2015/3/7

引脚接法:
nRF24L01   Arduino UNO
VCC <-> 3.3V
GND <-> GND
CE  <-> D9
CSN <-> D10
MOSI<-> D11
MISO<-> D12
SCK <-> D13
IRQ <-> 不接
*/

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

    //定义一个变量adata存储最终结果,oldadata存储旧结果,防止相同结果刷屏。
    unsigned int adata = 0, oldadata = 0;

void setup()
{
    Serial.begin(9600);

    //---------初始化部分,不可随时修改---------
    Mirf.cePin = 9;     //设置CE引脚为D9
    Mirf.csnPin = 10;   //设置CE引脚为D10
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();  //初始化nRF24L01

    //---------配置部分,可以随时修改---------
    //设置接收标识符"Rev01"
    Mirf.setRADDR((byte *)"Rec01");
    //设置一次收发的字节数,这里发一个整数,
    //写sizeof(unsigned int),实际等于2字节
    Mirf.payload = sizeof(unsigned int);
    //发送通道,可以填0~128,收发必须一致。
    Mirf.channel = 3;
    Mirf.config();

    //注意一个Arduino写Sender.ino,另一个写Receiver.ino。
    //这里用来辨别写入了Receiver.ino程序
    Serial.println("I'm Receiver...");
}

void loop()
{
    //定义一个暂存数组,大小为Mirf.payload。
    byte data[Mirf.payload];
    if(Mirf.dataReady())    //等待接收数据准备好
    {
        Mirf.getData(data);    //接收数据到data数组
        //data[1]<左移8位与data[0]并,重组数据。
        adata = (unsigned int)((data[1] << 8) | data[0]);

        //与上一次结果比较,避免相同结果刷屏,降低串口流量
        if(adata != oldadata)
        {
            oldadata = adata; //本次结果作为历史结果。
            //Serial.print输出数据
            
            Serial.print(adata);
            Serial.println("cm");
            //也可以输出双字节数据
            //Serial.write(data[1]);
            //Serial.write(data[0]);
        }

    }
}

 




关键词: arduino     nrf24l01     sr04    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]