Arduino Polska Forum

Pełna wersja: NRF 24l01 problem z komunikacją
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam!
Proszę o pomoc w rozwiązaniu mojego problemu z komunikacją dwóch Uno za pomocą nRf 24.
Zwiedziłem już wiele stron, testowałem wiele gotowych programów i dalej nic. Cały czas coś nie gra, albo odbieram puste pola (cały czas enter), albo dziwne znaczki albo liczby 0 i 224 (zastanawia mnie też dlaczego akurat 224?).
Posiadam dwa Arduino uno R3, i nRf 24 z antenami, podłączyłem Nrf pod osobne zasilanie, wpiąłem dodatkowo do nich po 2 kondensatory 10uF, lecz nic to nie dało. Zmieniałem już również biblioteki wielokrotnie, zmieniałem prędkości i nic. Nie wiem, gdzie leży przyczyna moich niepowodzeń. Do wykonania mojego projektu muszę połączyć ze sobą  te arduino za pomocą tych nrf, więc wymiana na wi-fi, czy coś innego nie wchodzi w gre. Nie potrafię sobie sam z tym poradzić dlatego zwracam się z prośbą do was. 

nrf - unno
ce -    7
csn -   8
sck -   13
mosi - 11
miso - 12

Biblioteka, z której obecnie korzystam :   https://github.com/nRF24/RF24
Dodaje też screen z programu i monitor portu.
Proszę o pomoc  Undecided
Patrząc sie na sam screen sam loop już zrąbany, wysyłka ok ale odbiór to kiszka to nie ma prawa działać...

Dane odebrane trzeba po bajcie odczytać wiec użyj funkcji "While" albo "for" ale nie if

Tu masz zagadnienia do Serial ale zasada taka sama.

https://forum.arduino.cc/index.php?topic=396450.0
Nie pisałem nigdy programów na te moduły, ale mam podejrzenie graniczące z pewnością, że adres potoku to się nie zapisuje jako string, tylko zwykłą liczbę. A jeśli to musi być tablica, to w takich nawiasach { 0x1 }.
@furcus
Jak wstawiasz kod to wklejaj go jako tekst w code w pełnej edycji, komuś się może będzie chciało odtworzyć Twój problem na swoim sprzęcie, nikomu nie będzie się chciało przepisywać.
Kondensatory mogą pomóc, ale najpierw dodaj 100n ceramiczny, potem ewentualnie drugi elektrolit.
Mam moduły bez elektrolitów, czy kondensatorów w ogóle i działają, można obniżyć moc - RF24_PA_MIN.
Przykłady są OK, przecież są z biblioteki, potok zapisany jako napis jest tablicą char/bajtów, skoro tak chcą w bibliotece to jest tylko prościej. Oczywiście nie jest "000001" == 1.
Przykładowy kod, przetestowany, dla nadajnika:
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";
char text[20];

void setup() {
 radio.begin();
 radio.openWritingPipe(address);
 radio.setPALevel(RF24_PA_MIN);
 radio.stopListening();
}
void loop() {

 static uint16_t licznik=0;
 
 sprintf(text,"Hello World %03d", licznik++);
 //albo po dodaniu zmiennych i przeliczeniu na minuty/godziny sprintf(napis,"%03d:%02d:%02d",godziny,minuty,sekundy);
 radio.write(&text, sizeof(text));
 delay(1000);
}
i odbiornika:

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);
 }
}

Nie zadziała to zmień moduł na inny, wymień kabelki. Może masz inną bibliotekę, sprawdź w swojej kto tworzył przykłady - dlatego wkleiłem całość ze wstępem.
Dziękuje za pomoc, wszystko działa już jak należy. Wgrałem na nowo biblioteki, zastosowałem się do rad "kaczakat" iw końcu mogę przesyłać Smile