Skocz do zawartości

Problem z układem radiowym NRF24L01


solowkidamian

Pomocna odpowiedź

Witam, mam problem z przesyłaniem danych z jednego modułu arduino na drugi z dwóch joysticków, mianowicie oś x, oś y oraz przycisk s niestety przysyłają się max 3 zmienne czyli jak chce przesłać wszystko to przesyła się połowa w takiej dziwnej konfiguracji że dwie osie x i jedna y. Nie wiem co z tym zrobić będę wdzięczny za pomoc. Poniżej kod programu wydaje mi się że tu coś zawaliłem bo pierwszy raz bawię się tymi modułami.

Kod nadajnika:

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


const uint64_t pipeOut = 0xE9E8F0F0E1LL;
RF24 radio(7, 8);

void setup() {
  
  Serial.begin(9600);

  radio.begin();
  radio.openWritingPipe(pipeOut);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();

  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);

}

void loop(){
  int x = analogRead(A0);
  //int x1 = analogRead(A2);
  int y = analogRead(A1);
  //int y1 = analogRead(A3);
  byte s = digitalRead(2);
  //byte s1 = digitalRead(3);
  
  radio.write(&x, sizeof(x));
 //radio.write(&x1, sizeof(x1));
  radio.write(&y, sizeof(y));
  //radio.write(&y1, sizeof(y1));
  radio.write(&s, sizeof(s)); 
  //radio.write(&s1, sizeof(s1));
  
  Serial.print("X1: ");
  Serial.print(x);
  //Serial.print(" X2: ");
  //Serial.print(x1);
  Serial.println(".");
 
  Serial.print("Y1: ");
  Serial.print(y);
  //Serial.print(" Y2: ");
  //Serial.print(y1);
  Serial.println(".");
      
  Serial.print("SW1: ");
  Serial.print(s);
  //Serial.print(" SW2: ");
  //Serial.print(s1);
  Serial.println(".");

  delay(1000);
}

oraz kod odbiornik:

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

RF24 radio(7, 8);

const uint64_t pipeOut = 0xE9E8F0F0E1LL;
void setup() {
  
  Serial.begin(9600);
  Serial.println("START");
  delay(1000);
  
  radio.begin();
  radio.openReadingPipe(0,pipeOut);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

void loop() {
  delay(5);
  
  if (radio.available()) {
    while (radio.available()){
  
      int x = 0;
      //int x1 = 0;
      int y = 0;
      //int y1 = 0;
      byte s = 0;
     //byte s1 = 0;
     
      radio.read(&x, sizeof(x));
     //radio.read(&x1, sizeof(x1));
      radio.read(&y, sizeof(y));
     //radio.read(&y1, sizeof(y1));
      radio.read(&s, sizeof(s));
     // radio.read(&s1, sizeof(s1));
      
      Serial.print("X1: ");
      Serial.print(x);
      //Serial.print(" X2: ");
      //Serial.print(x1);
      Serial.println(".");
 
      Serial.print("Y1: ");
      Serial.print(y);
     //Serial.print(" Y2: ");
      //Serial.print(y1);
      Serial.println(".");
      
      Serial.print("SW1: ");
      Serial.print(s);
      //Serial.print(" SW2: ");
      //Serial.print(s1);
      Serial.println(".");

      delay(1000);
   }
  }
}

Będę wdzięczny za pomoc i wskazówki 🙂

Link do komentarza
Share on other sites

Bo ten moduł jest przystosowany do przesyłania całych pakietów, a nie pojedynczych zmiennych (to nie serial).

Możesz sobie przeanalizować coś podobnego tutaj: https://forbot.pl/forum/topic/18932-jawajka-na-cztery-rece/

Masz tam kody nadajnika i odbiornika, przesyłanie sygnału z joysticka (3 osie) i kilku klawiszy.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dnia 23.11.2022 o 21:55, solowkidamian napisał:

jakiś dobry poradnik tłumaczący ten temat

Ale zajrzałeś na stronę domową biblioteki, której używasz:

https://nrf24.github.io/RF24/index.html

Z opisem dla Arduino:

https://nrf24.github.io/RF24/md_docs_arduino.html

Z przykładami:

https://nrf24.github.io/RF24/examples.html

np.: z GettingStarted.ino:

https://nrf24.github.io/RF24/examples_2GettingStarted_2GettingStarted_8ino-example.html

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

@farmaceuta w sensie z tych wszystkich danych mama zrobić jedną tablicę i ją wysyłać?

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

bool wyswietlanie = true;

const byte pipeOut[6] = "0001";
RF24 radio(7, 8);

struct Data_Package {
  byte x;
  byte x1;
  byte y;
  byte y1;
  byte s;
  byte s1;
 };

 Data_Package data;
 
void setup() {
  
  if( wyswietlanie == true) {
  Serial.begin(9600);
  }
  
  radio.begin();
  radio.openWritingPipe(pipeOut);
  radio.setAutoAck(false);
  radio.setDataRate(RF24_250KBPS);
  radio.setPALevel(RF24_PA_LOW);
  radio.stopListening();

  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);

}

void loop(){
  
  data.x = map(analogRead(A0),0, 1023, 0, 255);
  data.x1 = map(analogRead(A3),0, 1023, 0, 255);
  data.y = map(analogRead(A1),0, 1023, 0, 255);
  data.y1 = map(analogRead(A2),0, 1023, 0, 255);
  data.s = digitalRead(2);
  data.s1 = digitalRead(3);
  
  radio.write(&data, sizeof(Data_Package));
  
  if( wyswietlanie == true) {
    
  Serial.print("X1: ");
  Serial.print(data.x);
  Serial.print(" X2: ");
  Serial.print(data.x1);
  Serial.println(".");
 
  Serial.print("Y1: ");
  Serial.print(data.y);
  Serial.print(" Y2: ");
  Serial.print(data.y1);
  Serial.println(".");
      
  Serial.print("SW1: ");
  Serial.print(data.s);
  Serial.print(" SW2: ");
  Serial.print(data.s1);
  Serial.println(".");
  
  delay(1000);
  }
}

Na razie zrobiłem tak, tą strukturę Data_Package i działa elegancko, przynajmniej na razie. Bo ogólnie to z tego ma być taki kontroler do wysyłania danych do np. jakiś różnych moich projektów na przyszłość. I już zlutowałem jako tako i z tego co sprawdzałem działa. Ale jeśli się da coś w programie poprawić to zawsze można tylko nie wiem dokładnie jak z tymi tablicami się obsługiwać. W sensie wiem co to ale nie umiem używać.

Link do komentarza
Share on other sites

@solowkidamian tak jak masz teraz że strukturami jest lepiej...tablice zaproponowałem tylko z tego względu że typ zmiennych mógł być taki sam i można by wszystko wysłać/odczytać jako jedna tablica...na przyszłość Ci mogę doradzić że gdybyś chciał wysyłać różne dane (nie te same w kółko) to możesz dane odbierać do bufora, w każdej strukturze pierwszy bajt ponumerować inaczej, wtedy po odebraniu paczki sprawdzasz pierwszy bajt bufora i go kopiujesz w odpowiednie wyznaczone miejsce...

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.