Hi all, I am trying to build a GPS tracker using an adafruit FONA (cell phone/gps module) but I can't seem to convert the latitude and longitude from a floating integer to something I can text. I'm not great at coding and most of this is hacked together from example codes, but I keep getting the error
"invalid conversion from 'char' to 'char*' [-fpermissive]"
Messages apparently can only be one character?? A little confused
/***************************************************
This is an example for our Adafruit FONA Cellular Module (modified slightly by mrwillcreates)
Designed specifically to work with the Adafruit FONA
----> Adafruit FONA - Mini Cellular GSM Breakout uFL Version : ID 1946 : $39.95 : Adafruit Industries, Unique & fun DIY electronics and kits
----> Adafruit FONA - Mini Cellular GSM Breakout - SMA Version [v1] : ID 1963 : $44.95 : Adafruit Industries, Unique & fun DIY electronics and kits
----> Adafruit FONA 800 Shield - Voice/Data Cellular GSM for Arduino : ID 2468 : $39.95 : Adafruit Industries, Unique & fun DIY electronics and kits
----> Adafruit FONA 808 - Mini Cellular GSM + GPS Breakout : ID 2542 : $49.95 : Adafruit Industries, Unique & fun DIY electronics and kits
These cellular modules use TTL Serial to communicate, 2 pins are
required to interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
/*
THIS CODE IS STILL IN PROGRESS!
This code will receive an SMS and send location data back to the same number
For use with FONA 800 & 808, not 3G
*/
#include "Adafruit_FONA.h"
#define FONA_RX 2
#define FONA_TX 3
#define FONA_RST 4
// this is a large buffer for replies
char replybuffer[255];
// We default to using software serial. If you want to use hardware serial
// (because softserial isnt supported) comment out the following three lines
// and uncomment the HardwareSerial line
#include <SoftwareSerial.h>
SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);
SoftwareSerial *fonaSerial = &fonaSS;
// Hardware serial is also possible!
// HardwareSerial *fonaSerial = &Serial1;
Adafruit_FONA fona = Adafruit_FONA(FONA_RST);
uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0);
void setup() {
while (!Serial);
// make it slow so its easy to read!
fonaSerial->begin(4800);
if (! fona.begin(*fonaSerial)) {
Serial.println(F("Couldn't find FONA"));
while(1);
}
// Print SIM card IMEI number.
char imei[15] = {0}; // MUST use a 16 character buffer for IMEI!
uint8_t imeiLen = fona.getIMEI(imei);
if (imeiLen > 0) {
}
}
char fonaInBuffer[64]; //for notifications from the FONA
void loop() {
float latitude, longitude, speed_kph, heading, speed_mph, altitude;
// if you ask for an altitude reading, getGPS will return false if there isn't a 3D fix
boolean gps_success = fona.getGPS(&latitude, &longitude, &speed_kph, &heading, &altitude);
char* bufPtr = fonaInBuffer; //handy buffer pointer
if (fona.available()) //any data available from the FONA?
{
int slot = 0; //this will be the slot number of the SMS
int charCount = 0;
//Read the notification into fonaInBuffer
do {
*bufPtr = fona.read();
Serial.write(*bufPtr);
delay(1);
} while ((*bufPtr++ != '\n') && (fona.available()) && (++charCount < (sizeof(fonaInBuffer)-1)));
//Add a terminal NULL to the notification string
*bufPtr = 0;
//Scan the notification string for an SMS received notification.
// If it's an SMS message, we'll get the slot number in 'slot'
if (1 == sscanf(fonaInBuffer, "+CMTI: "SM",%d", &slot)) {
char callerIDbuffer[32]; //we'll store the SMS sender number in here
// Retrieve SMS sender address/phone number.
if (! fona.getSMSSender(slot, callerIDbuffer, 31)) {
}
//Send back an automatic response
//Convert floating int to char
char longitude;
if (!fona.sendSMS(callerIDbuffer, longitude)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("Sent!"));
}
// delete the original msg after it is processed
// otherwise, we will fill up all the slots
// and then we won't be able to receive SMS anymore
if (fona.deleteSMS(slot)) {
Serial.println(F("OK!"));
} else {
Serial.println(F("Couldn't delete"));
}
}
}
}