Hi guys, I am trying to send some sensor data with a gps longtitude&latitude info. I can send the sensor’s data but when I try to add GPS data, It sends only “1” time then serial monitor and program freeze. I’m using 2 arduino nanos + 2 nrf24l01 here are the codes and the screenshot where it is freezes.(Sorry for bad English pls help)
Transmitter:
#include <SPI.h>
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <DHT11.h>
#include <Wire.h>
#include <SFE_BMP180.h>
#include <HMC5983.h>
HMC5983 compass;
int pin = 5;
DHT11 dht11(pin);
SFE_BMP180 pressure;
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
#define ALTITUDE 33.5 // Altitude of SparkFun's HQ in Boulder, CO. in meters
char hata[1];
RF24 radio(7,8);
byte addresses[][6] = {"1Node", "2Node"};
unsigned long simdiki_zaman;
boolean sureasimi;
unsigned long cevap_beklemeye_basla;
struct dataStruct {
unsigned long zaman;
int humi;
int basinc;
int sicak ;
int yuksek;
int yon;
float enlem;
float boylam;
int uydu;
int kalite;
int hiz;
} telemetri;
void setup(void){
Serial.begin(9600);
compass.begin();
pressure.begin();
ss.begin(GPSBaud);
radio.begin();
radio.setChannel(107); //cogu wifi frenkansinin ustunde 2.508GHz
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop(void){
radio.stopListening();
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected: check wiring."));
while(true);
}
}
void displayInfo()
{
Serial.print(F("Location: "));
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
float gpslat = gps.location.lat();
float gpslong = gps.location.lng();
int uydu = gps.satellites.value();
int kalite =gps.hdop.value();
int hiz = gps.speed.kmph();
delay(200); //DELAAAAAY
float c = -999;
c = compass.read();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
char status;
double T,P,p0,a;
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getPressure(P,T);
if (status != 0)
{
p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
a = pressure.altitude(P,p0);
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
delay(100); // Pause for 5 seconds.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
float sicaklik, nem, yon;
//dht11.read(nem, sicaklik);
telemetri.sicak = T;
telemetri.humi = nem;
telemetri.basinc = P;
telemetri.yuksek = a;
telemetri.yon = c;
telemetri.enlem =gpslat;
telemetri.boylam = gpslong;
telemetri.uydu = uydu;
telemetri.kalite = kalite;
telemetri.hiz = hiz;
delay(200); //DELAAAAAY
telemetri.zaman = micros();
Serial.print(F("Simdi Gonderliyor - "));
if (!radio.write( &telemetri , sizeof(telemetri))){
Serial.println(F("Gonderi Basarisiz."));
}
radio.startListening();
cevap_beklemeye_basla = micros();
sureasimi = false;
radio.available();
// while ( ! radio.available() ) {
// if (micros() - cevap_beklemeye_basla > 200000 ) {
// sureasimi = true;
// break;
// }
// }
//
// if ( sureasimi )
// {
// Serial.println(F("Cevap sure asimi"));
//
// }
//
// else
// {
// Grab the response, compare, and send to Serial Monitor
radio.read( &telemetri, sizeof(telemetri) ); // alicidan gelen veri okundu
simdiki_zaman = micros(); // verinin okundugu an
Serial.print(F("Cevap Gonderildi "));
Serial.print(telemetri.zaman); // verinin alicidan gonderilis zamani
Serial.print(F(", Cevap alindi "));
Serial.print(simdiki_zaman); // verinin okundugu an
Serial.print(F(", Gidis-gelis Gecikmesi "));
Serial.print(simdiki_zaman - telemetri.zaman);
Serial.println(F(" mikrosaniye "));
// }
Serial.print(F(" Sicaklik(C) = "));
Serial.print(telemetri.sicak);
delay(10);
Serial.print(F(" Nem(%) = "));
Serial.print(telemetri.humi);
delay(10);
Serial.print(F(" Basinc(mb) = "));
Serial.println(telemetri.basinc);
Serial.print(F(" Yukseklik = "));
Serial.println(telemetri.yuksek);
Serial.print(F(" Magnetometre(YON) = "));
Serial.println(telemetri.yon);
Serial.print(F(" ENLEM = "));
Serial.println(telemetri.enlem);
Serial.print(F(" BOYLAM = "));
Serial.println(telemetri.boylam);
Serial.print(F(" Uydu Sayisi = "));
Serial.println(telemetri.uydu);
Serial.print(F(" HDOP = "));
Serial.println(telemetri.uydu);
Serial.print(F(" HIZ (KM/S) = "));
Serial.println(telemetri.hiz);
delay(100);
Serial.end();
Serial.begin(9600);
}
Serial.println();
}
Receiver:
#include <SPI.h>
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
RF24 radio(7,8);
byte addresses[][6] = {"1Node", "2Node"};
int humi_gelen;
int humi_pozisyon;
int basinc_gelen;
int basinc_pozisyon;
int sicak_gelen;
int sicak_pozisyon;
int yuksek_gelen;
int yon_gelen;
float enlem_gelen;
float boylam_gelen;
struct dataStruct {
unsigned long zaman;
int humi;
int basinc;
int sicak;
int yuksek;
int yon;
float enlem;
float boylam;
} telemetri;
void setup(void){
Serial.begin(9600);
radio.begin();
radio.setChannel(107);
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1, addresses[0]);
radio.startListening();
}
void loop(){
if (radio.available())
{
while (radio.available())
{
radio.read( &telemetri, sizeof(telemetri) );
}
radio.stopListening();
radio.write( &telemetri, sizeof(telemetri) );
radio.startListening();
Serial.print(F("Veri alindi - Cevap gonderildi "));
Serial.println(telemetri.zaman);
}
humi_gelen = telemetri.humi;
basinc_gelen = telemetri.basinc;
sicak_gelen = telemetri.sicak;
yuksek_gelen = telemetri.yuksek;
yon_gelen = telemetri.yon;
enlem_gelen = telemetri.enlem;
boylam_gelen = telemetri.boylam;
Serial.print(F(" Sicaklik(C) = "));
Serial.println(sicak_gelen);
Serial.print(F(" Nem(%) = "));
Serial.println(humi_gelen);
Serial.print(F(" Mutlak Basinc (mb, inHg) = "));
Serial.print(basinc_gelen);
Serial.print(F(", "));
Serial.println(basinc_gelen*0.0295333727,2);
Serial.print(F(" Yukseklik(m) = "));
Serial.println(yuksek_gelen);
Serial.print(F(" MagnetoMetre(YON) = "));
Serial.println(yon_gelen);
Serial.print(F(" ENLEM = "));
Serial.println(enlem_gelen, 6);
Serial.print(F(" BOYLAM = "));
Serial.println(boylam_gelen, 6);
delay(400);
}