• 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
komunikacja nrf 24l01
#1
Witam, potrzebuję pomocy z kodem , arduina nie komunikują się ze sobą,nie mogę znaleźć błędu a próbuję to ogarnąć już 2 dzień. Moduły są na 100% sprawne,korzystam z osobnego zasilania,przeczytałem że arduino ma problemy z zasileniem nadajnika,dla pewności odbiornik też jest na osobnym zasilaniu.Używam arduino uno.

kod nadajnika:
Kod:
#include "RF24.h"
#include "printf.h"
#include <SPI.h>
RF24 radio(9,10);
int potst = A5;
int potn = A1;
byte addresses[][6] = {"1Node","2Node"};

struct dataStruct {
int st;
int sn;
  bool switchOn; 
} mojeDane;

void setup() {
Serial.begin(115200);
radio.begin();
radio.setChannel(108);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.openWritingPipe(addresses[0]);

printf_begin();
radio.printDetails();
radio.startListening();
delay(100);
radio.stopListening();
}
void loop() {

mojeDane.st =  analogRead(potst);
mojeDane.sn =  analogRead(potn);
delay(1);
radio.write( &mojeDane, sizeof(mojeDane) );
Serial.print(mojeDane.st);
Serial.print("       ");
Serial.println(mojeDane.sn);
delay(10);
}
wynik z serial nadajnika
   

kod odbiornika:
Kod:
#include "RF24.h"
#include "printf.h"
#include <SPI.h>
#include <Servo.h>

RF24 radio(9,10);
Servo servol;
Servo servop;


byte addresses[][6] = {"1Node","2Node"};


struct dataStruct {
int st;
int sn;
  bool switchOn; 
} mojeDane;

void setup() {
Serial.begin(115200);
servop.attach(10);
servol.attach(9);
radio.begin();
radio.setChannel(108);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.openReadingPipe(1, addresses[0]);
printf_begin();
radio.printDetails();
radio.startListening();
}
void loop() {
  digitalWrite(7,HIGH);
if ( radio.available() )              
  {
      radio.read( &mojeDane, sizeof(mojeDane) );
      delay(1);
  }
int pozServol  = mojeDane.st;
int naped      = mojeDane.sn;
   Serial.print(pozServol);
    Serial.print("       ");
    Serial.println(naped);
  }

wynik z serial odbiornika
   
kiedyś już napisałem działający program,teraz próbowałem go przerobić i się zakopałem a poprzedniej wersji programu już nie mam-moja głupota niestety,chodzi mi o tylko o to żeby odebrać te same liczby co wysyłam,bo odbieram same 0. Będę bardzo wdzięczny za jakiekolwiek wskazówki
Edit: usunąłem mapowanie w odbiorniku aby program i otrzymane wyniki były bardziej przejrzyste
 
Odpowiedź
#2
Zacznij od działających przykładów, dodania kondensatorów, przeklej odpowiednio radio.setPALevel(RF24_PA_LOW); bo w przykładach tego chyba brakuje i sprawdź czy radia na początek dobrze działają. Coś Ci dawało zmniejszenie prędkości do 250kbps? Zerknij też tu https://forum.arduinopolska.pl/watek-ard...kacj%C4%85 , tematów na forum jest sporo i nawet coś zatytułowane poradnik.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Przykładowe programy też nie działają jak i te przykładowe z internetu,kondensatorki włożyłem dokładnie ceramiczny 0.1uF i elektrolita 470uF,prędkość od począdku mam ustawioną na 250 kbps,a nadajnik i odbiornik są w odległości około 50 cm od siebie.Masy oczywiście od początku połączone ze sobą
 
Odpowiedź
#4
Zobacz jeszcze to, działa  u mnie i komuś też to wrzuciełem na forum z potwierdzeniem, że działa.
Nadajnik
Kod:
/*
* Arduino Wireless Communication Tutorial
*     Example 1 - Transmitter Code
*               
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}
void loop() {
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  delay(1000);
}


Odbiornik
Kod:
/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*               
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
void setup() {
  Serial.begin(115200);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN); //pomaga bez kondensatora
  radio.startListening();
}
void loop() {
  if (radio.available()) {
    char text[32] = {0};
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
}

Jak to nie zadziała to szukaj problemów w sprzęcie, zasilaniu i kabelkologii.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Niestety nie działa,do programu dodałem jeszcze taką pętlę 
Kod:
   if (!radio.available()) {
    Serial.println("Fail");
  }
 
i komunikat "FAIL" na serial,dzięki wielkie za pomoc ,wiem przynajmniej gdzie szukać,plusik polaciał do Ciebie Kaczakat
 
Odpowiedź
#6
No to niestety nie jest dobry pomysł. Jak już nawet zacznie działać to w ciągu 1s wydrukujesz mln komunikatów FAIL i jeden Hello World, którego nie zauważysz. Jak chcesz widzieć, że program działa na Arduino to możesz co 1s drukować na serial zmienna++ lub migać ledem (oba bez delay).
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#7
zanim tego spróbowałem uruchomiłem program bez jakichkolwiek moich poprawek,asem nie jestem i nie jestem pewny poprawności moich kodów,bez żadnej poprawki też nie działało,do kablelkologii usiądę w niedzielę,jak dojdę co było nie tak opiszę problem tutaj aby innym było łatwiej
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości