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

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

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

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

    不过又出现了一个新的问题,就是我的发送端发送了7个字节的信息,然后接受端显示的却是7个方块,不知道是现实出现了问题还是根本就没接收到信息呢?
    agate
        3
    agate  
       2015-08-04 10:25:33 +08:00
    你是直接打出byte么? 能贴一下你的code么
    IanPeverell
        4
    IanPeverell  
    OP
       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);
    }
    }
    blanboom
        5
    blanboom  
       2015-09-25 16:39:55 +08:00
    有时候是电源的问题,可以在 nRF24L01 模块的 VCC 和 GND 之间并联一个 1~10µF 的电容。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.