0

I have a u-blox gps module and I use TinyGPS (http://arduiniana.org/libraries/tinygpsplus/) to get out the lat + lng.

If i write...

Serial.println(gps.location.lat(), 6); 

...out in the log I get the correct latvalue. Right now I however work with a BLE (https://www.adafruit.com/product/1697) and when I try to print it like this:

BTLEserial.print (gps.location.lat()`, 6); 

I get a error: no matching function for call to 'Adafruit_BLE_UART::print(double, int)'

If I do this instead, the code runs...

BTLEserial.print ((gps.location.lat(),6)); 

But I do not get the correct lat, instead I get this value 6.00000000

I have tried to store the lat like this:

double myLat;

myLat = (gps.location.lat(), 6);
BTLEserial.print (myLat);

But with that myLat also has a value of 6.00000000 which is not correct.

I tried this as well:

char sValueOne[16], sValueTwo[16];
char sBuffer[33];

strcpy(sBuffer,dtostrf(((gps.location.lat(),6)), 15, 8, sValueOne));
strcat(sBuffer,",");
strcat(sBuffer,dtostrf(((gps.location.lng(),6)), 15, 8, sValueTwo));

BTLEserial.write((uint8_t *)sBuffer, strlen(sBuffer));

But with that I still get 6.00000000. I am starting to run out of ideas now to make this work. I have tried to send it both directly and store it but nothing works successfully.

So how can I adjust the code to be able to print (or store) gps lat, lng value (TinyGPS++) with Bluetooth BLE nRF8001?

Appreciate every help and tips!

6
  • 6.000000 is the value of ((gps.location.lat(),6)) where 6 is the last item in the list. C/C++ is a strange language. Remove all the extra () and things will look better. – Mikael Patel Jan 7 '17 at 1:22
  • If i do BTLEserial.print (gps.location.lng(),6); i get a error: no matching function for call to 'Adafruit_BLE_UART::print(double, int)' – Martman Jan 7 '17 at 1:32
  • Add links to the libraries you are using. – Mikael Patel Jan 7 '17 at 1:42
  • myLat = (gps.location.lat(), 6); gives the value 6.0000 as explained above. It is not a list with the two values or a double with 6 digits. – Mikael Patel Jan 7 '17 at 1:45
  • For gps i use TinyGPS++, this: arduiniana.org/libraries/tinygpsplus and for my BLE i use this where you can see sample code also: learn.adafruit.com/… – Martman Jan 7 '17 at 1:45
1

The Arduino Stream/Print classes may sometime need some extra attention.

BTLEserial.println(gps.location.lat()`, 6); 

The member function is available in the class Print but gets "hidden". You can help the compiler to find it with a prefix:

BTLEserial.Print::println(gps.location.lat()`, 6); 

Cheers!

7
  • Hey! Thanks for this answer. Will try it in an hour – Martman Jan 7 '17 at 10:35
  • Hi! I get the correct value. However, it seems like it sends one number at a time. So when I recieve this on the app the value gets chopped up. So for example if the latitude is: 32.123456, it comes like this to the app: 3, new row, 2, new row etc. – Martman Jan 7 '17 at 14:33
  • I do not use println btw, instead print – Martman Jan 7 '17 at 14:40
  • That is a new question! Acknowledge the answer and ask a new one. I can help you with that :) – Mikael Patel Jan 7 '17 at 14:42
  • Ok Mikael! I will create a new thread regarding that issue. Thanks a lot for your example above to get the first part of the problem fixed. Will accept your answer and of course also upvote it! – Martman Jan 7 '17 at 14:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.