• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Dwa moduły nrf24l01 jedno arduino
#1
Cześć, chcę podpiąć dwa moduły nrf24 na jednym arduino. 
Zamysł jest taki : Wciskam przycisk, wtedy jeden moduł nadaje do drugiego. Przy odbiorze danych chcę zmieniać stan diody. 
Napisałem kod ale program się zawiesza bądź bez przerwy wisi w pętli z odbiorem danych.

Może ktoś znajdzie błąd Smile

Moduły są sprawne (sprawdzałem), połączenia przycisku i diody też są ok

Kod:
#include <SPI.h> //biblioteka standradowa obsługa spi
#include "nRF24L01.h"
#include "RF24.h" // biblioteki do obsługi nrf'a

int msg1[1];
int msg2[1]; // tablice do przesyłania odbierania/danych
       //CE, CSV
RF24 radio_nadajnik(7,6);
RF24 radio_odbiornik(4,5); // tworzymy obiekty dla nrf'ów (definicje pinów CS i CSV - Chip Select , CSV - tryb pracy układu)

byte addresses[][6] = {"1Node"};  //adres dla potoku (oba układy muszą mieć ten sam)

int LED1 = 3; // pin diody
int przycisk = 2;
int prev = 0;
int state = 0; // 1 - on, 0 - off

//wykrywanie obsługi przycisku

void setup(){ // instrukcje wykonywane przy starcie programu
 Serial.begin(115200); //prędkość portu szeregowego (debugowania)
 
 radio_odbiornik.begin();      //załączenie radia0 - odbiornik
 radio_odbiornik.setChannel(108);
 radio_odbiornik.openReadingPipe(1,addresses[0]); // otwarcie kanału
 radio_odbiornik.startListening();        //załączenie odbiornika

 radio_nadajnik.begin();                 //załączenie radia2 - nadajnik
 radio_nadajnik.setChannel(108);
 radio_nadajnik.setPALevel(RF24_PA_MAX);
 radio_nadajnik.openWritingPipe(addresses[0]);   //otwarcie kanału
 /* DEFINICJE PINÓW*/
 pinMode(LED1, OUTPUT); //led
 pinMode(przycisk, INPUT_PULLUP); //przycisk
}

void loop(){ // pętla główna

if (digitalRead(przycisk) == HIGH) //jeżeli jest niewciśniety
 {
   prev = 0; //stan poprzedni o
   Serial.println("Przycisk nie wcisniety"); //wysyłamy na debug że jest niewciśnięty
  }
 
 if (digitalRead(przycisk) == LOW )//&& prev == 0) //jeżeli wciśnięty i stan poprzeni 0
 {
         delay(200); //czekamy 0,2s  (drgania styków)
         prev = 1; //stan poprzedni jako 1
         state = !state; //zmieniamy wartość stanu dla leda
         Serial.println("przycisk wcisniety");
        // Serial.println(state); //wysyłamy sobie ten stan na konsole
     
       if (state == 1)
           {
             msg1[0] = 111; // wsadź do tej naszej tablicy pomocniczej 111
             radio_nadajnik.write(msg1, sizeof(msg1)); //wyślij na radio2 msg1
             Serial.println("msg1=111");
           }
       else
           {
             msg1[0] = 0; // wpiszemy 0
             radio_nadajnik.write(msg1, sizeof(msg1));//wysyłamy 0
             Serial.println("msg1=0");
           }
 
 }

 
 if (radio_odbiornik.available()) //Sprawdźmy czy są dane do odczytania
   {
     if(radio_odbiornik.available())
     {
         radio_odbiornik.read(msg2, sizeof(msg2)); //czytamy co nadajnik do niego nadał
         Serial.println("Niby mamy jakieś dane"); //plujemy tym po debugu
         if (msg2[0] == 111){//jeżeli wiadomość odebrarna jest 111
           digitalWrite(LED1, HIGH); //ustaw leda na wysoki (świeci)
           }
         else {
           digitalWrite(LED1, LOW);
           Serial.println("Tylko że tu jest 0");
           } //ustaw na niski
      }
   }
}//main loop
 
Odpowiedź
#2
Kolego poczytaj o transmisji isp i układach master slave trochę pomysł wykonalny ale nie z ta biblioteka ponieważ ona nadaje bufor od początku do końca a ty nie dasz rasy nadawać i odbierać przez jedno isp jak już tak chcesz to kup mege albo cortexa one maja isp1 isp2 wtedy ci się uda (ogólnie pomysł bez żadnego sensu ale ok) w normalnym działaniu to używasz przerwań jak nadaje jeden lub odbiera drugi jest zablokowany prze sygnał cs
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
Szybciej udało mi się napisać kod na stm'a niż w tym arduino próbować to rozwiązać :/
Dzięki za zainteresowanie !
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości