首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Arduino

Arduino+ nRF24L01 通信不稳定怎么解决?

  •  
  •   IanPeverell · 2015-08-03 14:04:41 +08:00 · 2304 次点击
    这是一个创建于 1022 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两个Arduino Uno板子分别连接两块nRF24L01进行通信,接受和发送信号很不稳定,经常打开串口监视器,无法接收到数据,是板子和nRF24L01没连接好,还是什么原因呢?

    另,是用USB hub连电脑的,会不会因为供电问题影响收发呢?
    5 回复  |  直到 2015-09-25 16:39:55 +08:00
        1
    agate   2015-08-03 14:14:11 +08:00
    我用的是 Mirf 库.
    一开始我也是这样收不到信号. 发现至少要在 setup 中打出一次 println 才能收到效果(如果 setup println 的话 loop 的 code 就没作用...) 这个是我实验下来的经验.
        2
    IanPeverell   2015-08-03 14:49:11 +08:00
    @agate 多谢

    不过又出现了一个新的问题,就是我的发送端发送了7个字节的信息,然后接受端显示的却是7个方块,不知道是现实出现了问题还是根本就没接收到信息呢?
        3
    agate   2015-08-04 10:25:33 +08:00
    你是直接打出byte么? 能贴一下你的code么
        4
    IanPeverell   2015-08-04 12:14:57 +08:00
    @agate

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

    void setup()
    {
    Serial.begin(9600);
    Mirf.spi = &MirfHardwareSpi;
    Mirf.init();
    Mirf.setRADDR((byte *)"serv1");
    Mirf.payload = 7;
    Mirf.channel = 3;
    Mirf.config();
    }

    void loop()
    {
    byte data[Mirf.payload];
    if(!Mirf.isSending() && Mirf.dataReady())
    {
    Mirf.getData(data);
    int i;
    String Temp;
    for (i = 0; i < Mirf.payload; i++)
    {
    Temp += char(data[i]);
    }
    Serial.print("Get:");
    Serial.print(Mirf.payload);
    Serial.print(" ");
    Serial.println(Temp);
    }
    }
        5
    blanboom   2015-09-25 16:39:55 +08:00
    有时候是电源的问题,可以在 nRF24L01 模块的 VCC 和 GND 之间并联一个 1~10µF 的电容。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2125 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 14ms · UTC 12:32 · PVG 20:32 · LAX 05:32 · JFK 08:32
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1