Close

Jednoduchá komunikace nRF24L01

Úvodní stránka Fórum Vaše projekty Arduino Jednoduchá komunikace nRF24L01

Označeno štítky: 

  • Toto téma obsahuje celkem 11 odpovědí. Do diskuze (3 diskutující) se naposledy zapojil uživatel Jerry a poslední změna proběhla před 5 roky a 11 měsíci.
Aktuálně je na stránce zobrazeno 12 příspěvků - 1. až 12. (celkem z 12)
  • Autor
    Příspěvky
  • #9372
    Jerry
    Účastník

    Dobrý den

    Jsem v podstatě začátečník. Potřeboval bych jednoduché zapojení a kód pro zapnutí a vypnutí led přes NRF24L01. Děkuji

    #9460

    Zdravím Jardo, k NRF24L01 je toho na netu hodně. To je možná důvod, proč tady zatím nikdo neodpověděl. Doporučuji začít například tady:

    nRF24L01+ Basic Control LED (Arduino)


    a pak pokračovat volně dál až do chvíle, než vše zvládnete a bude vám to fungovat.

    Komunikujeme bezdrátově s NRF24L01 – 1. část – zapojení


    http://shanes.net/simple-nrf24l01-with-arduino-sketch-and-setup/
    http://www.instructables.com/id/Wireless-Remote-Using-24-Ghz-NRF24L01-Simple-Tutor/



    Pokud vám to funguje ale cítíte, že jste něco přeskočil, doporučuju stáhnout ebook zdarma o Arduinu a projít si i věci na kterých to celé stojí. Nebo si přes vánoce lehnout s naší knížkou 🙂
    Hodně úspěchů s Arduinem!
    Oldřich 🙂

    #9461
    Jerry
    Účastník

    Děkuji

    #9473
    Jerry
    Účastník

    Ahoj
    V prvním příspěvku mi při kompilaci kódu pro RX na řádku „done = radio.read(msg, 1);“ vypisuje chybu. Nemůžu přijít na to ke to je.
    Děkuji

    #9481
    posjirka
    Účastník

    předpokládám chyhu v knihovnách. Stáhni si ty z instructables.com

    http://www.instructables.com/id/Wireless-Remote-Using-24-Ghz-NRF24L01-Simple-Tutor/?ALLSTEPS

    a nainstaluj si je.
    Někdy je na vině i samotné Arduino IDE a je třeba jej přeinstalovat nebo alespoň pročistit instalované knihovny.

    Podle ohlasů na istructable je na vině knihovna RF24 …

    #9484
    Jerry
    Účastník

    mám 1.6.12 tak nevím jestli je to špatně

    #9485
    Jerry
    Účastník

    Asi takhle

    Attachments:
    #9487
    Jerry
    Účastník

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    int msg[1];
    RF24 radio(9,10);
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    int LED1 = 3;

    void setup(void){
    Serial.begin(9600);
    radio.begin();
    radio.openReadingPipe(1,pipe);
    radio.startListening();
    pinMode(LED1, OUTPUT);}

    void loop(void){
    if (radio.available()){
    bool done = false;
    while (!done){
    done = radio.read(msg, 1);
    Serial.println(msg[0]);
    if (msg[0] == 111){delay(10);digitalWrite(LED1, HIGH);}
    else {digitalWrite(LED1, LOW);}
    delay(10);}}
    else{Serial.println(„No radio available“);}}

    #9488
    posjirka
    Účastník

    tak já už chybu našel a není tvoje 🙂
    Nevím proč, ale používají radio.read() jako funkci s návratovou hodnotou ( done = …).
    Tato funkce ale žádnou návrtotvou hodnotu nepodporuje a tudíž nemůže ani fungovat while …

    Ve výsledku zkus tuto verzi:

    
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    int msg[1];
    RF24 radio(9,10);
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    int LED1 = 3;
    
    void setup(void){
      Serial.begin(9600);
      radio.begin();
      radio.openReadingPipe(1,pipe);
      radio.startListening();
      pinMode(LED1, OUTPUT);
    }
    
    void loop(void){
      if(radio.available()){
        //bool done = false;
        //while (!done){
        while (radio.available()){
          radio.read(msg, 1);
          Serial.println(msg[0]);
          if (msg[0] == 111){
            delay(10);
            digitalWrite(LED1, HIGH);
          } else {
            digitalWrite(LED1, LOW);
          }
          delay(10);
        }
      } else {
        Serial.println("No radio available");
      }  
    }
    

    a pro vkládání kodu používej párové značky CODE (předposlední tlačítko při psaní odpovědi) jinka se ti to rozhází, přepíšou se ti dvojité úvozovky atd.

    #9513
    Jerry
    Účastník

    Myslím, že původní kód pro vysílač není úplný. Trochu jsem tápal (jako začátečník) a po úpravě to začalo fungovat. Před tím jsem musel měnit proměnnou msg 0 a 1
    Takhle už to funguje

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    int msg[1];
    RF24 radio(9,10);
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    int SW1 = 7;

    void setup(void){
    Serial.begin(9600);
    radio.begin();
    radio.openWritingPipe(pipe);}

    void loop(void){
    if (digitalRead(SW1) == HIGH){
    msg[0] = 111;
    radio.write(msg, 1);}
    else
    radio.write(msg, 0);}

    #9514
    Jerry
    Účastník

    Už to funguje

    #9515
    Jerry
    Účastník
Aktuálně je na stránce zobrazeno 12 příspěvků - 1. až 12. (celkem z 12)
  • Pro reakci na toto téma se musíte přihlásit.