• 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
nrf24L01+
#1
Witam, 
 proszęo pomoc, mam problem z komunikacją pomiędzy nadajnikiem i odbiornikiem z modułami nrf24L01. Przesyłam aktualną temperaturę czyli jedną liczbę. Problem polega na tym, że co 0,3s powinienem otrzymać informację o temeraturze, niestety informacje docierają w różnych odstępach czasu (0,3s 1s 2s 0,5s...). Używam arduino NANO. Pomiędzy 3V3 i GND nrf24L011 wstawiłem kondensator 4u7, ale nie pomogło. Poniżej wstawiam kod nadajnika i odbiornika: 
Kod:
//Nadajnik
#include <OneWire.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 3
RF24 radio(9, 10);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const uint64_t rfAddr = 0xE8E8F0F0E1LL;

void setup()
{
 Serial.begin(9600);
 sensors.begin();
 radio.begin();
 radio.setChannel(80);
 radio.setPALevel(RF24_PA_MAX);
 radio.setRetries(2,15);
  radio.stopListening();
 radio.openWritingPipe(rfAddr);
}

void loop()
{
 int c=0;
 int cislo[1];
 sensors.requestTemperatures();
 c=(sensors.getTempCByIndex(0)*100);
 c=c/10;
 cislo[0]=c;
 radio.write(&cislo, sizeof(cislo));
 Serial.print("Teplota: ");
   Serial.print(cislo[0]);
   Serial.println("_C");
 
 delay(300);
}

Kod:
//Odbiornik
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(9, 10);

const uint64_t rfAddr = 0xE8E8F0F0E1LL;

void setup()
{
 while (!Serial);
 Serial.begin(9600);
 radio.begin();
 radio.setChannel(80);
 radio.setPALevel(RF24_PA_MAX);
 radio.setRetries(2,15);
 radio.openReadingPipe(1, rfAddr);
 radio.startListening();
}

void loop()
{
   if (radio.available())
   {
     int cislo[1] = {0};
     radio.read(&cislo, sizeof(cislo));
     Serial.println(cislo[0]);
     
   }
 
}
 
Odpowiedź
#2
Jak usuniesz odczyt temperatury to jest ok?
W przykładach masz pingpair. Co pokazuje terminal(opóźnienie).
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
(28-02-2017, 12:00)namok napisał(a): Jak usuniesz odczyt temperatury to jest ok?
W przykładach masz pingpair. Co pokazuje terminal(opóźnienie).

Napisałem drugi program (uproszczony), który wysyła tylko jedną liczbe a po wysłaniu czeka 0,3s dodaje do liczby +1 i znowu wysyła. Oto on: 
Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


RF24 radio(9, 10);


const uint64_t rfAddr = 0xE8E8F0F0E1LL;

void setup()
{
 Serial.begin(9600);
 radio.begin();
 radio.setChannel(80);
 radio.setPALevel(RF24_PA_MAX);
 radio.setRetries(2,15);
  radio.stopListening();
 radio.openWritingPipe(rfAddr);
}

void loop()
{
 int cislo[1];
 for(int b=0;b<300;b++)
 {
  cislo[0]=b;
  radio.write(&cislo, sizeof(cislo));
  delay(300);
 }
}

Poniżej wkładam ciąg liczb po przesłaniu:
62
64
73
74
77
78
81
85
86
88
89
92
94
96
100
102
104
110

Przerwy są troszke mniejsze niż w przypadku wysyłania temperatury, ale ciągle występują. Może to być zpowodowane zasilaniem z Arduino?
 
Odpowiedź
#4
Problem rozwiązany, RF moduł podłączyłem pod zasilanie zewnętrzne (3V3 pobierałem wprost z Arduino NANO).
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości