• 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
Sad 
Witam,
mam problem z moimi modułami nrf24l01 z góry chce zaznaczyć, że używam zewnętrznego zasilania do arduino.
Problem polega na tym, że gdy nadajnik pobiera dane do wysłania to robi to tylko 1 lub 2 razy,
a potem cisza... nic nie wysyła. Próbowałem już wyrzucać pewne rzeczy sprawdzać inne programy itd...
Nie wiem co jest nie tak. Zwracam się do was z tym problemem.
Tutaj wrzucam kod do nadajnika i odbiornika który jest przerobionym kodem z tej str
http://www.mikrokontroler.pl/content/bez...01-arduino
Kod:
//nadajnik
#include <Wire.h>
#include <BMP180.h>
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

#define ONE_WIRE_BUS 2
int indicatorLed = 13;
BMP180 barometer;


void setup()
{
 pinMode(13, OUTPUT);  
Serial.begin(9600);
   Mirf.csnPin = 10;              
 Mirf.cePin = 9;      
   Wire.begin();
    pinMode(indicatorLed, OUTPUT);
  barometer.SoftReset();
 barometer.Initialize();
   barometer = BMP180();

 
 Mirf.spi = &MirfHardwareSpi;       // konfiguracja SPI do użycia z biblioteką MIRF
 Mirf.init();                       // Inicjalizacja MIRF
 Mirf.setRADDR((byte *)"67890");    // Ustawienie adresu do odbioru
 Mirf.setTADDR((byte *)"12345");    // ustawienie adresu do nadawania
 Mirf.payload = sizeof(float);      // Maksymalny przesył przez moduły radiowe ustawiony na wielkośc zmiennej FLOAT (4 bajty)
 Mirf.config();                     // Konfiguracja biblioteki MIRF
float tempr = 0;  
}




void loop()
{
   float tempr = barometer.GetTemperature();
        Serial.print(tempr);
     Serial.println();

Mirf.send((byte *)&tempr);            // Nadanie zmiennej przez moduł nRF24L01
                   
         while(Mirf.isSending()){             // Zapętlenie programu do czasu zakończenia wysyłania danych
 }
   
 digitalWrite(13,HIGH);                // Mignięcie diody, sygnalizujące zakończenie nadawania
 delay(300);
 digitalWrite(13,LOW);                              // Suma opóźnień w całym programie wynosi około 2s - jest to także okres pomiaru.
  delay(3000);  
}
 
 

Kod:
//odbiornik
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define BACKLIGHT_PIN 3

LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7);


void setup(){
 Serial.begin(9600);
lcd.begin (16,2);
  lcd.clear();  
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);

 Mirf.csnPin = 10;                 // Konfiguracja pinu CSN biblioteki MIRF inaczej, niż domyślnie
 Mirf.cePin = 9;                  // Konfiguracja pinu CE biblioteki MIRF inaczej, niż domyślnie
 Mirf.spi = &MirfHardwareSpi;     // Wykorzystanie SPI do komunikacji pryz użyciu modułów nRF24L01
 Mirf.init();                     // Inicjalizacja modułu MIRF
 Mirf.setTADDR((byte *)"67890");  // ustawienie adresu do nadawania
 Mirf.setRADDR((byte *)"12345");  // Ustawienie adresu do odbioru
 Mirf.payload = sizeof(float);    // Maksymalny przesył przez moduły radiowe ustawiony na wielkośc zmiennej FLOAT (4 bajty)
 Mirf.config();                   // Konfiguracja biblioteki MIRF
 
}


void loop(){
float data;    //zmienna data typu FLOAT
  if(Mirf.dataReady())  // Warunek wykonywany tylko, gdy coś zostanie odebrane

 {

   lcd.setCursor(15,0);  //Kursor na ostatniej pozycji pierwszej linii
   lcd.write("*");        // Wyświetlenie gwiazdki symbolizującej odebranie danych
   delay(300);
   lcd.setCursor(15,0);
   lcd.write(" ");        // Nadpisanie gwiazdki pustym polem
   Mirf.getData((byte *) &data);  // Odbiór zmiennej data przy pomocy modułu nRF24L01
 
  lcd.setCursor(0,0);      // Kursor na początku
   lcd.write("Temp: ");
   
   lcd.setCursor(6,0);
   lcd.print(data);     // Wyświetlenie zmiennej FLOAT (temperatura podawana w postaci XX.XX lub XXX.XX,a także ze znakiem "-")
  lcd.write(0xDF);      // Znak stopnia
   lcd.write("C  ");    

  Serial.print(data);      // Wystawienie zmiennej na UART
   Serial.print(" ; ");      // Rozdzielenie
  Serial.println(millis());   // Wystawienie wartości instrukcji MILLIS(), zwięszanej automatycznie od czasu uruchomienia płytki Arduino
   
   
 }
}
 
Odpowiedź
#2
dałeś kondensator 1uf-10uf równolegle do zasilania w nadajniku i odbiorniku bo bez tego nie będzie ci działał sam siedziałem 3 nocki nad tym tematem
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
Z tego co czytałem to dając zewnętrzne zasilanie kondensatory są już nie potrzebne.
Ale spróbuje i poinformuje czy coś się poprawiło.
 
Odpowiedź
#4
rożnie bywa
a próbowałeś wgrać jakiś przykład dla testu
https://github.com/TMRh20/RF24
sprobuj tej bibloteki
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości