confrontare latitudine e longitutine con dei valori prestabiliti

Salve a tutti, sto cercando di realizzare una sorta di antifurto tramite il modulo sim808 e arduino.
In sostanza il modulo in questione è in grado di acquisire i dati GPS di latitudine e longitudine, vorrei trovare il modo di confrontarli con dei parametri fissati da me in modo tale che se il gps rileva dei valori diversi da quelli prestabiliti mi avvisi.

In sostanza io leggo lat e long dal modulo e se non è compresa tra i valori che decido io mi da un messaggio di allarme.

Ho trovato lo sketch per misurare latitudine log che però vengono acquisite come "char" come faccio a confrontarle con i valori che voglio impostare io in maniera aritmetica? (latitudine e log hanno valori di 8 cifre 2 interi e 6 decimali, es 45.813876 )

Esempio

char latx[15];
float latA =45.813876
float latB =45.815629
Boolean furto=false

//il valore latx viene misurato e assegnato  tramite un altra parte di codice che non trascrivo per rapidità

void setup() {
Serial.begin(9600);
if (latA < latx && latB > latx)  { furto =false;
Serial.println("\ tutto ok");
}
else { furto =true;
Serial.println("\ attenzione!");
};
}

Grazie mille spero di essermi spiegato bene

float latA =45.813876
float latB =45.815629

Arduino UNO non ha la precisione per memorizzare una numero di 8 cifre in una veriabile float

Usa una variabile long moltiplicando il valore per 1000000 per non avere decimali.

La funzione ATOL() converte un array di cifre in una variabile long. Toglio la virgola e come ultimo carattere devi aggiungere dopo le cifre un 0 (zero).
vedi C library function - atol()

Ciao Uwe

>ilteo85: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice (... anche se di poche righe) all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [/i][code] _il _tuo_ codice_ [/code][i] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo[/i]

uwefed:
Arduino UNO non ha la precisione per memorizzare una numero di 8 cifre in una veriabile float
Usa una variabile long moltiplicando il valore per 1000000 per non avere decimali.

Aggiungo anche che i calcoli con i float sono comunque molto "pesanti" per il povero Arduino, per cui lavorare con interi è sempre preferibile.

Toglio la virgola e come ultimo carattere devi aggiungere dopo le cifre un 0 (zero).

No, questa non l'ho capita neanche io (cit. Benvenuti al Sud) :wink:
Togliere la virgola ok, ma che è questo zero da aggiungere? :slight_smile: Se parli del terminatore di stringa ok ma l'hai descritto male :wink: anche perché dipende da "come" togli la virgola.

Io piuttosto mi assicurerei di avere sempre esattamente 6 decimali, se lui avesse la latitudine 45.813876 riceverebbe quindi la stringa "45.813876", tolgo il punto "45813876" che quindi in long diventa 45813876, che è corretto (dividendo per 1000000 torna il valore) ma se la latitudine fosse 45.813 avrei "45813" che convertito diventa 45813 ossia una latitudine di 0.045813! Io prima di fare "atol" dovrei aggiungere zeri per arrivare ai 6 decimali quindi "45813" -> "45813000".

Per cui io farei così (metalinguaggio):

// Cerco la posizione del punto decimale
// Se dopo il punto decimale ho meno di 6 caratteri
// Aggiungo degli zeri in coda (strcat)
// Tolgo il punto decimale (devo avere almeno 7 caratteri)
// Converto con atol() in un long che rappresenta i milionesimi di grado

Grazie infinite ragazzi per la pronta risposta!
Da quello che ho capito le coordinate
per la zona che mi interessa sono sempre composte da 8 cifre (2 interi e 6 decimali)
quindi non dovrebbe esserci bisogno di aggiungere zeri in cosa giusto?

Posso chiedervi come fare per togliere il punto decimale dalla mia variabile char?
E' un operazione che faccio sull' array prima di "convertirlo" con atol?

Se non e' una cosa complicata posso chiedervi la stringa di codice per togliere la virgola che sono alle prime armi cosi lo capisco :slight_smile:

Grazie mille ancora!

ilteo85:
Da quello che ho capito le coordinate
per la zona che mi interessa sono sempre composte da 8 cifre (2 interi e 6 decimali)
quindi non dovrebbe esserci bisogno di aggiungere zeri in cosa giusto?

Se sei certo che ti dia sempre 6 decimali anche se non necessari (come detto, 41.324 diventa "41.324000"??) si. Ma già se dici "da quello che ho capito" non mi pare una cosa sicura al 100%...:wink:

Ed infatti, ragionandoci meglio, dato che hai parlato di modulo SIM808 collegato ad Arduino, non è che questa informazione la leggi da una stringa o dalla seriale ma dall'oggetto con cui gestisci il SIM808!

Nel sorgente della libreria DFRobot_sim808 leggo infatti:

...
public:
	struct gspdata{
		uint16_t year;
		uint8_t month;
		uint8_t day;
		uint8_t hour;
		uint8_t minute;
		uint8_t second;
		uint8_t centisecond;
		float lat;
		float lon;
		float speed_kph;
		float heading;
		float altitude;
	}GPSdata;

...
   float latitude = atof(latp);
   float longitude = atof(longp);

GPSdata.lat = latitude/100;

   // convert longitude from minutes to decimal  
GPSdata.lon= longitude/100;
...

Per cui se stai usando direttamente un SIM808 puoi vedere che lui memorizza latitudine (GPSdata.lat) e longitudine (GPSdata.lon) come "float" e come tali devi confrontarli, lascia perdere punti decimali, char array, stringhe e altre cose del genere.

E prima di scrivere codice (o di chiedere ad altri) leggi sempre i reference (ed esempi) delle librerie che usi... :wink:

E magari metti a posto il post 1

No, questa non l'ho capita neanche io (cit. Benvenuti al Sud)

presumo che il To riceva una sequenza di caratteri dal modulo GPS. percui lo deve mettere in un array, togliere la virgola spostando gli altri caratteri e aggiungere al termine della stringa di caratteri di numeri un \0 per trasformare la stringa con atol() in un nurero del tipo long.

Ciao Uwe

docdoc:
Per cui se stai usando direttamente un SIM808 puoi vedere che lui memorizza latitudine (GPSdata.lat) e longitudine (GPSdata.lon) come "float" e come tali devi confrontarli, lascia perdere punti decimali, char array, stringhe e altre cose del genere.

E prima di scrivere codice (o di chiedere ad altri) leggi sempre i reference (ed esempi) delle librerie che usi... :wink:

Hai ragionissima mi spiace ma son davvero alle prime armi e ho lavorato solo con lo sketch d'esempio fornito dalla library

#include "SIM900.h"
#include <SoftwareSerial.h>
//#include "inetGSM.h"
//#include "sms.h"
//#include "call.h"
#include "gps.h"

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to start a connection as client.

//InetGSM inet;
//CallGSM call;
//SMSGSM sms;
GPSGSM gps;

char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];

char stat;
char inSerial[20];
int i=0;
boolean started=false;

void setup()
{
     //Serial connection.
     Serial.begin(9600);
     Serial.println("GSM Shield testing.");
     //Start configuration of shield with baudrate.
     //For http uses is raccomanded to use 4800 or slower.
     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          gsm.forceON();	//To ensure that SIM908 is not only in charge mode
          started=true;
     } else Serial.println("\nstatus=IDLE");

     if(started) {
          //GPS attach
          if (gps.attachGPS())
               Serial.println("status=GPSREADY");
          else Serial.println("status=ERROR");

          delay(20000);	//Time for fixing
          stat=gps.getStat();
          if(stat==1)
               Serial.println("NOT FIXED");
          else if(stat==0)
               Serial.println("GPS OFF");
          else if(stat==2)
               Serial.println("2D FIXED");
          else if(stat==3)
               Serial.println("3D FIXED");
          delay(5000);
          //Get data from GPS
          gps.getPar(lon,lat,alt,time,vel);
          Serial.println(lon);
          Serial.println(lat);
          Serial.println(alt);
          Serial.println(time);
          Serial.println(vel);
     }
};

void loop()
{
     //Read for new byte on serial hardware,
     //and write them on NewSoftSerial.
     serialhwread();
     //Read for new byte on NewSoftSerial.
     serialswread();
};

void serialhwread()
{
     i=0;
     if (Serial.available() > 0) {
          while (Serial.available() > 0) {
               inSerial[i]=(Serial.read());
               delay(10);
               i++;
          }

          inSerial[i]='\0';
          if(!strcmp(inSerial,"/END")) {
               Serial.println("_");
               inSerial[0]=0x1a;
               inSerial[1]='\0';
               gsm.SimpleWriteln(inSerial);
          }
          //Send a saved AT command using serial port.
          if(!strcmp(inSerial,"TEST")) {
//      Serial.println("BATTERY TEST 1");
//      gps.getBattInf(msg1,msg2);
//      Serial.println(msg1);
//      Serial.println(msg2);
//      Serial.println("BATTERY TEST 2");
//      gps.getBattTVol(msg1);
//      Serial.println(msg1);
               stat=gps.getStat();
               if(stat==1)
                    Serial.println("NOT FIXED");
               else if(stat==0)
                    Serial.println("GPS OFF");
               else if(stat==2)
                    Serial.println("2D FIXED");
               else if(stat==3)
                    Serial.println("3D FIXED");
          }
          //Read last message saved.
          if(!strcmp(inSerial,"MSG")) {
               Serial.println(msg1);
          } else {
               Serial.println(inSerial);
               gsm.SimpleWriteln(inSerial);
          }
          inSerial[0]='\0';
     }
}

void serialswread()
{
     gsm.SimpleRead();
}

Qui le variabili sono salvate come char.. perché??????
Come faccio a avere il mio valore? devo dichiarare una variabile float all interno del mio codice
e assegnargli il valore?

float latitudieok = GPSdata.lat

grazie e scusa ancora per le domande "banali"
(però ho scritto il mio primo post giusto con citazioni e codice :wink: :smiley: )

ilteo85:
Hai ragionissima mi spiace ma son davvero alle prime armi e ho lavorato solo con lo sketch d'esempio fornito dalla library

#include "SIM900.h"

#include <SoftwareSerial.h>
//#include "inetGSM.h"
//#include "sms.h"
//#include "call.h"
#include "gps.h"

...

Scusa, ma qualcosa ancora non mi torna. tu parli di SIM808 e poi usi la libreria SIM900? Se hai un SIM808 dovresti usare la DFRobot_sim808... La SIM900 poi mi pare sia uno shield, d'altronde anche nel codice che hai postato si legge:
//GSM Shield for Arduino
Quindi è una shield con SIM900, o una SIM808?

A questo punto prima di tutto devi dirci ESATTAMENTE quale modulo hai (almeno una foto, ma meglio se un link all'esatto oggetto che hai acquistato) e quali librerie hai installato (nome e versione). Cose che comunque sarebbe meglio fare SEMPRE quando ci sono problemi di gestione e libreria...

Come faccio a avere il mio valore? devo dichiarare una variabile float all interno del mio codice
e assegnargli il valore?

float latitudieok = GPSdata.lat

Si, una cosa del genere. Ma prima devi chiarire meglio cosa stai usando e quale libreria, il resto verrà successivamente appena avremo chiarito.

Un'alternativa è misurare la distanza tra le coordinate attuali e quelle "corrette" tramite la formula di Vincenty, e vedere che sia inferiore ad un tot.

C'è sempre il problema della precisione, ma la mia esperienza dice che l'implementazione di TinyGPS si comporta abbastanza bene.

Ho dato un'occhiata anche a quella libreria per SIM900, di fatto "maschera" i comandi seriali mandati al SIM e relative risposte, solo che la SIM900 non fa altro che fare il parse della risposta al comando "AT+CGPSINF" che, confermo, restituisce sempre una stringa con 6 decimali (quindi, diciamo, come formato è "#0.000000").
Ma se usassi la libreria dell'esatto device è meglio, partiamo da lì.

docdoc:
A questo punto prima di tutto devi dirci ESATTAMENTE quale modulo hai (almeno una foto, ma meglio se un link all'esatto oggetto che hai acquistato) e quali librerie hai installato (nome e versione). Cose che comunque sarebbe meglio fare SEMPRE quando ci sono problemi di gestione e libreria...

Il modulo è questo https://www.aliexpress.com/item/SIM808-instead-of-SIM908-module-GSM-GPRS-GPS-Development-Board-IPX-SMA-with-GPS-Antenna-available/32819888609.html?spm=a2g0s.9042311.0.0.6fc94c4dNTZIC5

e ho seguito le istruzioni di AZdelivery che allego qui sotto.. a pagina 5 dice che le librerie sono compatibili e ne consiglia una..ma effettivamente ieri ho fatto i primi test e mi da anche dei dati di longitutide e latitudine sbagliati.. forse val la pena provare con la sua library.. stasera faccio un tentativo..
Intanto grazie ancora!

sim808 ita.pdf (910 KB)

docdoc:
Ho dato un'occhiata anche a quella libreria per SIM900, di fatto "maschera" i comandi seriali mandati al SIM e relative risposte, solo che la SIM900 non fa altro che fare il parse della risposta al comando "AT+CGPSINF" che, confermo, restituisce sempre una stringa con 6 decimali (quindi, diciamo, come formato è "#0.000000").
Ma se usassi la libreria dell'esatto device è meglio, partiamo da lì.

Grazie mille si questa sera provo a installare la sua library ne ho trovata una appena aggiornata.. SIM808 - Arduino Libraries

A dopo Grazie! :slight_smile: :smiley:

ilteo85:
Il modulo è questo

Ok, allora non è SIM900 ma come dicevi all'inizio SIM808, comunque sia è pure possibile che siano tra loro compatibili visto che di fatto usano i comandi "AT" ma ti consiglio di provare l'altra libreria (che tra l'altro mi pare fatta meglio), anche se sarebbe pure possibile lasciar stare librerie e usare direttamente il comando "AT+CGPSINF=0"... :wink:

ma effettivamente ieri ho fatto i primi test e mi da anche dei dati di longitutide e latitudine sbagliati..

Ma sbagliati in che senso? Se hai usare il programmino di test che hai postato qui per ultimo, puoi postare qui quali valori lon e lat hai ricevuto (copia/incolla dell'output della seriale)?

In ogni caso tu puoi anche fare qualche prova "manuale" perché risponde ai comandi AT. ti basta semplicemente collegare il SIM ad Arduino via seriale software (es. collegando i pin 10 e 11 rispettivamente al TX e RX del SIM, ovviamente oltre a GND) e con questo programmino che ti scrivo sotto, che mette in comunicazione la softwareserial con la seriale USB, puoi caricare il monitor seriale (o putty se lo conosci) e dare i comandi a mano ossia il comando "AT+CGPSINF=0", e riporta qui la relativa risposta. QUI trovi informazioni sul comando (e gli altri).

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  Serial.println("Serial ready");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

ilteo85:
Qui le variabili sono salvate come char.. perché??????

il modulo manda i dati in forma stringa in formato MNEA NMEA 0183 - Wikipedia come stringa ( i numeri sono dei caratteri) che vengono ricevute una a una e messe in un array (buffer) per essere elaborate.

Un array di char é la forma piú semplice in c per memorizzare delle stringhe.

Ciao Uwe

uwefed:
il modulo manda i dati in forma stringa in formato MNEA NMEA 0183 - Wikipedia come stringa

Si ma li manda così perché è la comunicazione è seriale di tipo testuale con i comandi AT, poi sta al programma (o la libreria) farci quello che risulta più comodo. Nel caso del nostro amico credo che quella libreria DFRobot_sim808 che converte lei in float sia la più comoda da usare.

docdoc:
Ma sbagliati in che senso? Se hai usare il programmino di test che hai postato qui per ultimo, puoi postare qui quali valori lon e lat hai ricevuto (copia/incolla dell'output della seriale)?

Ciao intanto grazie a tutti ancora per l'aiuto :slight_smile: .. inizio postando il risultato che mi da con lo sketch che avevo postato

21:24:31.171 -> GSM Shield testing.
21:24:31.315 -> ATT: OK
21:24:31.348 -> RIC: 
21:24:31.348 -> OK
21:24:31.348 -> 
21:24:32.332 -> DB:ELSE
21:24:33.476 -> ATT: OK
21:24:33.515 -> RIC: 
21:24:33.515 -> OK
21:24:33.515 -> 
21:24:34.480 -> DB:ELSE
21:24:35.644 -> ATT: OK
21:24:35.644 -> RIC: 
21:24:35.682 -> OK
21:24:35.682 -> 
21:24:36.666 -> DB:ELSE
21:24:37.810 -> ATT: OK
21:24:37.810 -> RIC: 
21:24:37.843 -> OK
21:24:37.843 -> 
21:24:38.814 -> DB:CORRECT BR
21:24:38.966 -> ATT: OK
21:24:38.966 -> RIC: 
21:24:39.000 -> OK
21:24:39.000 -> 
21:24:40.133 -> ATT: OK
21:24:40.172 -> RIC: 
21:24:40.172 -> OK
21:24:40.172 -> 
21:24:40.280 -> ATT: OK
21:24:40.316 -> RIC: ATE0

21:24:40.316 -> OK
21:24:40.316 -> 
21:24:40.421 -> ATT: OK
21:24:40.455 -> RIC: 
21:24:40.455 -> OK
21:24:40.455 -> 
21:24:40.558 -> ATT: OK
21:24:40.596 -> RIC: 
21:24:40.596 -> OK
21:24:40.596 -> 
21:24:40.702 -> ATT: OK
21:24:40.740 -> RIC: 
21:24:40.740 -> ERROR
21:24:40.740 -> 
21:24:41.354 -> ATT: OK
21:24:41.387 -> RIC: 
21:24:41.387 -> ERROR
21:24:41.387 -> 
21:24:42.027 -> ATT: OK
21:24:42.027 -> RIC: 
21:24:42.027 -> ERROR
21:24:42.027 -> 
21:24:42.665 -> ATT: OK
21:24:42.665 -> RIC: 
21:24:42.703 -> ERROR
21:24:42.703 -> 
21:24:43.336 -> ATT: OK
21:24:43.336 -> RIC: 
21:24:43.370 -> ERROR
21:24:43.370 -> 
21:24:43.475 -> ATT: OK
21:24:43.475 -> RIC: 
21:24:43.510 -> ERROR
21:24:43.510 -> 
21:24:44.146 -> ATT: OK
21:24:44.146 -> RIC: 
21:24:44.183 -> ERROR
21:24:44.183 -> 
21:24:45.312 -> ATT: +CPMS:
21:24:45.312 -> RIC: 
21:24:45.312 -> ERROR
21:24:45.312 -> 
21:24:46.957 -> ATT: +CPMS:
21:24:46.957 -> RIC: 
21:24:46.991 -> ERROR
21:24:46.991 -> 
21:24:48.610 -> ATT: +CPMS:
21:24:48.610 -> RIC: 
21:24:48.643 -> ERROR
21:24:48.643 -> 
21:24:50.272 -> ATT: +CPMS:
21:24:50.272 -> RIC: 
21:24:50.272 -> ERROR
21:24:50.309 -> 
21:24:51.922 -> ATT: +CPMS:
21:24:51.958 -> RIC: 
21:24:51.958 -> ERROR
21:24:51.958 -> 
21:24:53.573 -> ATT: +CPMS:
21:24:53.606 -> RIC: 
21:24:53.606 -> ERROR
21:24:53.606 -> 
21:24:55.256 -> ATT: +CPMS:
21:24:55.256 -> RIC: 
21:24:55.256 -> ERROR
21:24:55.256 -> 
21:24:56.917 -> ATT: +CPMS:
21:24:56.917 -> RIC: 
21:24:56.917 -> ERROR
21:24:56.917 -> 
21:24:58.562 -> ATT: +CPMS:
21:24:58.562 -> RIC: 
21:24:58.562 -> ERROR
21:24:58.598 -> 
21:25:00.221 -> ATT: +CPMS:
21:25:00.221 -> RIC: 
21:25:00.259 -> ERROR
21:25:00.259 -> 
21:25:00.368 -> ATT: OK
21:25:00.407 -> RIC: 
21:25:00.407 -> ERROR
21:25:00.407 -> 
21:25:01.059 -> ATT: OK
21:25:01.059 -> RIC: 
21:25:01.059 -> ERROR
21:25:01.059 -> 
21:25:01.690 -> ATT: OK
21:25:01.724 -> RIC: 
21:25:01.724 -> ERROR
21:25:01.724 -> 
21:25:02.379 -> ATT: OK
21:25:02.379 -> RIC: 
21:25:02.379 -> ERROR
21:25:02.379 -> 
21:25:03.022 -> ATT: OK
21:25:03.056 -> RIC: 
21:25:03.056 -> ERROR
21:25:03.093 -> 
21:25:03.194 -> ATT: SHUT OK
21:25:03.194 -> RIC: 
21:25:03.232 -> ERROR
21:25:03.232 -> 
21:25:03.853 -> ATT: SHUT OK
21:25:03.853 -> RIC: 
21:25:03.890 -> ERROR
21:25:03.890 -> 
21:25:04.493 -> ATT: SHUT OK
21:25:04.527 -> RIC: 
21:25:04.527 -> ERROR
21:25:04.527 -> 
21:25:05.170 -> ATT: SHUT OK
21:25:05.170 -> RIC: 
21:25:05.170 -> ERROR
21:25:05.203 -> 
21:25:05.812 -> ATT: SHUT OK
21:25:05.850 -> RIC: 
21:25:05.850 -> ERROR
21:25:05.850 -> 
21:25:06.358 -> 
21:25:06.358 -> status=READY
21:25:06.607 -> ATT: OK
21:25:06.607 -> RIC: 
21:25:06.607 -> OK
21:25:06.607 -> 
21:25:06.643 -> +CREG: 0,0
21:25:06.643 -> 
21:25:06.643 -> OK
21:25:06.677 -> 
21:25:06.677 -> ATT: OK
21:25:06.677 -> RIC: 
21:25:06.677 -> OK
21:25:06.677 -> 
21:25:06.677 -> +CREG: 0,0
21:25:06.711 -> 
21:25:06.711 -> OK
21:25:06.711 -> 
21:25:06.820 -> ATT: OK
21:25:06.820 -> RIC: 
21:25:06.820 -> OK
21:25:06.859 -> 
21:25:08.024 -> ATT: OK
21:25:08.024 -> RIC: 
21:25:08.024 -> OK
21:25:08.061 -> 
21:25:09.026 -> status=GPSREADY
21:25:29.410 -> ATT: OK
21:25:29.410 -> RIC: 
21:25:29.410 -> +CGPSSTATUS: Location 3D Fix
21:25:29.444 -> 
21:25:29.444 -> OK
21:25:29.444 -> 
21:25:29.444 -> ATT: Unknown
21:25:29.480 -> RIC: 
21:25:29.480 -> +CGPSSTATUS: Location 3D Fix
21:25:29.514 -> 
21:25:29.514 -> OK
21:25:29.514 -> 
21:25:29.514 -> ATT: unknown
21:25:29.514 -> RIC: 
21:25:29.547 -> +CGPSSTATUS: Location 3D Fix
21:25:29.580 -> 
21:25:29.580 -> OK
21:25:29.580 -> 
21:25:29.580 -> ATT: Not
21:25:29.580 -> RIC: 
21:25:29.580 -> +CGPSSTATUS: Location 3D Fix
21:25:29.613 -> 
21:25:29.613 -> OK
21:25:29.613 -> 
21:25:29.647 -> ATT: 2D
21:25:29.647 -> RIC: 
21:25:29.647 -> +CGPSSTATUS: Location 3D Fix
21:25:29.680 -> 
21:25:29.680 -> OK
21:25:29.680 -> 
21:25:29.680 -> ATT: 2d
21:25:29.713 -> RIC: 
21:25:29.713 -> +CGPSSTATUS: Location 3D Fix
21:25:29.747 -> 
21:25:29.747 -> OK
21:25:29.747 -> 
21:25:29.747 -> ATT: 3D
21:25:29.747 -> RIC: 
21:25:29.747 -> +CGPSSTATUS: Location 3D Fix
21:25:29.780 -> 
21:25:29.780 -> OK
21:25:29.780 -> 
21:25:29.814 -> 3D FIXED
21:25:35.321 -> ATT: OK
21:25:35.357 -> RIC: 
21:25:35.357 -> +CGPSINF: 0,4531.845200,911.737100,172.800000,20190530192535.000,0,8,0.277800,128.199997
21:25:35.428 -> 
21:25:35.462 -> OK
21:25:35.462 -> 
21:25:35.462 -> ATT: OK
21:25:35.462 -> RIC: 
21:25:35.462 -> +CGPSINF: 0,4531.845200,911.737100,172.800000,20190530192535.000,0,8,0.277800,128.199997
21:25:35.564 -> 
21:25:35.564 -> OK
21:25:35.564 -> 
21:25:35.564 -> 4531.845200
21:25:35.598 -> 911.737100
21:25:35.598 -> 172.800000
21:25:35.598 -> 20190530192535.000
21:25:35.631 -> 0.277800

come posizione ho provato a inserirla scrivendo 45.318452 91.173710 ma risulta malesya.. poi ho provato mettendo i gradi come indicato nel manuale di azdelivery ma mi dice che la posizione non esiste..

ho provato anche a caricare la library per sim808 ma mi da errore

Arduino:1.8.9 (Mac OS X), Scheda:"Arduino/Genuino Uno"

In file included from /Applications/Arduino.app/Contents/Java/libraries/SIM808-2.0.0/src/SIM808.h:3:0,
                 from /Applications/Arduino.app/Contents/Java/libraries/SIM808-2.0.0/examples/AcquireGPSPosition/AcquireGPSPosition.ino:5:
/Applications/Arduino.app/Contents/Java/libraries/SIM808-2.0.0/src/SIMComAT.h:4:24: fatal error: ArduinoLog.h: No such file or directory
 #include <ArduinoLog.h>

                        ^
compilation terminated.
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Mi manca una library "ArduinoLog.h"?

Ora provo con lo sketch di docdoc e vi dico :slight_smile:

docdoc:
In ogni caso tu puoi anche fare qualche prova "manuale" perché risponde ai comandi AT. ti basta semplicemente collegare il SIM ad Arduino via seriale software (es. collegando i pin 10 e 11 rispettivamente al TX e RX del SIM, ovviamente oltre a GND) e con questo programmino che ti scrivo sotto, che mette in comunicazione la softwareserial con la seriale USB, puoi caricare il monitor seriale (o putty se lo conosci) e dare i comandi a mano ossia il comando "AT+CGPSINF=0", e riporta qui la relativa risposta. QUI trovi informazioni sul comando (e gli altri).

Purtroppo anche con il codice di docdoc risultano sbagliat (uguali a quelle che mi da l' altro sketch)..

21:57:13.962 -> SeriSerial ready
21:57:43.755 -> 
21:57:43.755 -> +CGPSINF: 0,4531.854300,911.743600,160.500000,20190530195742.000,0,13,0.037040,134.490005
21:57:43.856 -> 
21:57:43.856 -> OK

ilteo85:
Mi manca una library "ArduinoLog.h"?

E infine ho installato la library ArduinoLog.h e ho caricato lo sketch della
library di sim808

22:19:05.794 -> ⸮⸮⸮	⸮

Peggio ancora.. ma qui forse ho sbagliato io a attaccare i pin..