20-05-2016, 23:10
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
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
}
}