nRF24L01+ Problem z programem

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

nRF24L01+ Problem z programem

Post autor: cox22 » 30 mar 2014, 23:03

Witam.

Podłączyłem dwa nadajniki nRF24L01+ i komunikują się bez problemu(używam biblioteki RF24Network). I teraz mam problem jak to zakodować, co chciałbym uzyskać:
- arduino I wysyła komendę 1 lub 2
- arduino II odbiera i jeśli 1 ustawia pin w stan wysoki, jeśli 2 w stan niski
- arduino II odczytuje temp z ds18b20 i wysyła do arduino I

I teraz pytanie czy w ogóle jest możliwa obustronna komunikacja? Czy tylko jedno może odbierać drugie nadawać? Dużym problemem jest że mam jedno arduino a drugie to zwykła atmega na płytce stykowej i aby je zaprogramować muszę wyjąc chip z płytki i zaprogramować w płytce uno. Dlatego mogę debugować tylko jedno na raz co strasznie komplikuje programowanie.

Wykorzystałem przykłady z biblioteki (helloworld_rx i helloworld.tx). Na razie co mam to:

Nadajnik
Spoiler:
Odbiornik
Spoiler:
I to działa ale jeśli dodam linijkę:

Kod: Zaznacz cały

 if (char message= 2)  digitalWrite(4, LOW);
przestaje działać. O co chodzi?
Ostatnio zmieniony 31 mar 2014, 11:26 przez cox22, łącznie zmieniany 1 raz.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
wojtekizk
Starszy majsterkowicz
Posty: 311
Rejestracja: 19 lis 2013, 10:54
Lokalizacja: Bydgoszcz

Re: nRF24L01+ Problem z programem

Post autor: wojtekizk » 31 mar 2014, 07:27

Witam
Parę kwestii:

Kod: Zaznacz cały

if (char message= 2)  digitalWrite(4, LOW);
... w tym powyżej właśnie przypisałeś zmiennej message wartość 2, a chciałeś przecież sprawdzić czy jest równa 2 :-)
Musisz użyć == ( podwójne =), we wszystkich instrukcjach warunkowych operator porównania to ==.
Poza tym jesli to jest zmienna typu char to powinieneś zapytać if (message == '2') ....ale wcześniej zadeklarować char message; (umieszczanie definicji w ciele if-a ...hmmm dość ryzykowne i mało czytelne).
Jeśli w każdym "urządzeniu" do komunikacji podłączysż i nadajnik i odbiornik to będziesz miał komunikację dwustronną.
Warunek nadajnik i odbiornik muszą procować w innym paśmie lub kanale komunikacyjnym (np. na innych częstotliwościach) Parami - naprzemienne :-)
Do tego naturalnie odpowiedni kod :-)
Pozdrawiam
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

Re: nRF24L01+ Problem z programem

Post autor: cox22 » 31 mar 2014, 11:17

Świeże spojrzenie z rana i działa pierwsza funkcja.

Nadajnik

Kod: Zaznacz cały

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>

RF24 radio(9,10);
RF24Network network(radio);
const uint16_t this_node = 1;
const uint16_t other_node = 0;

// How often to send 'hello world to the other unit
const unsigned long interval = 2000; //ms

// When did we last send?
unsigned long last_sent;

struct payload_t
{
  char message;
};
char INBYTE;
char x;

void setup(void)
{
  Serial.begin(57600);
  SPI.begin();
  radio.begin();
  network.begin(/*channel*/ 90, /*node address*/ this_node);
}

void loop(void)
{
  // Pump the network regularly
  network.update();

  unsigned long now = millis();
  if ( now - last_sent >= interval  )
  {
    last_sent = now;

    Serial.print("Sending...");
    RF24NetworkHeader header(/*to node*/ other_node);
    INBYTE = Serial.read();  
    if ( INBYTE == '1' ) x = (1);
    if ( INBYTE == '2' ) x = (2);
    payload_t payload = {x};
    network.write(header,&payload,sizeof(payload));

  }
}
Nie wiem o co chodzi ale nie mogę wkleić kodu odbiornika bo wyskakuje że jest tam link?
Jeśli w każdym "urządzeniu" do komunikacji podłączysż i nadajnik i odbiornik to będziesz miał komunikację dwustronną.
Warunek nadajnik i odbiornik muszą procować w innym paśmie lub kanale komunikacyjnym (np. na innych częstotliwościach) Parami - naprzemienne :-)
To jest jasne chodziło mi o to że jeśli używam transceivera czyli odbiornika i nadajnika w jednym to czy może on jednocześnie wysyłać i odbierać. Biorąc na logikę wychodzi mi że może i nie powinno być z tym problemu, a to wyżej to było porostu głupie pytanie.
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

Re: nRF24L01+ Problem z programem

Post autor: cox22 » 3 kwie 2014, 20:08

A wiec udało mi się uzyskać to co chciałem choć nie do końca

Nadajnik
Spoiler:
Główny kod
Spoiler:
Dalej nie mogę wrzucić kodu odbiornika bo forum twierdzi ze jest tam link. Ale do rzeczy bo po przetestowaniu transmisji bezprzewodowej chciałem te nowe funkcje wrzucić do mojego projektu i co się okazuje program nie mieści się już na atmedze
Spoiler:
Wykasowałem na potrzeby testu funkcje zapisywania na karcie SD(która o dziwo zajmuje 11 000 bajtów). I po wgraniu kodu następny problem bo cały kod wykonuje się co 10 sek tzn podłączam do prądu układ nic się nie dzieje po 10 sek startuje program i znowu lag 10 sek, wykonuje program, 10 sek i tak w kółko.
Może byłby ktoś tak miły i przejrzał kod może wyłapie jakieś błędy i znajdzie przyczynę.
Arturr300
Starszy majsterkowicz
Posty: 307
Rejestracja: 16 paź 2013, 17:24

Re: nRF24L01+ Problem z programem

Post autor: Arturr300 » 6 kwie 2014, 20:44

Może dlatego że masz sporo delay'ów? One całkowicie zatrzymują wykonywanie programu. Np. w displayLCD() masz delay(3000)
cox22
Młodszy majsterkowicz
Posty: 8
Rejestracja: 17 lut 2014, 13:45

Re: nRF24L01+ Problem z programem

Post autor: cox22 » 6 kwie 2014, 21:02

Tak mam dwa delaye ale one nic nie przeszkadzają jeden jest przy wyświetlaniu ekranu powitalnego który pokazywany jest tylko raz. A drugi przy wyświetlaniu drugiego ekranu po wciśnięciu przycisku.
derrew222
Młodszy majsterkowicz
Posty: 1
Rejestracja: 30 mar 2019, 20:51

Re: nRF24L01+ Problem z programem

Post autor: derrew222 » 30 mar 2019, 20:56

Witam, może mi ktoś pomoże z nrf24network , nie ogarniam mam dwa adresy 01,02 które komunikują się z masterem00 , wiadomości które otrzymuje nakładają się na siebie , czy można w jakiś sposób rozróżnić node01, od node02 , próbowałem z tablicami itd bez większych rezultatów , zawsze otrzymuję ten sam rezultat ?
Moje wątpliwości budzi RF24NetworkHeader header; jak to działa ? czy wystarczy wywołać to tylko raz ?
ODPOWIEDZ

Strony partnerskie: