GPS NEO6 vers Maps

PieM

Senior Member
Bonjour,

Ce programme n’est qu’une partie d’un ensemble plus important, système de télécommande, détection d’alarme et fonction de traker.

Afin de ne pas polluer le post de pdevisme, je préfère ouvrir un nouveau post concernant uniquement l’aspect GPS , assurant la compatibilité avec une transmission via GSM pour l’ouverture de Google Maps sur un smartphone.

Ce programme est développé sur un 28X2, en raison du grand nombre d’E/S de mon module, mais de fait, il peut être implanté sur un petit Picaxe. Le choix d’un X2 a été uniquement dicté pour pouvoir utiliser une réception en tache de fond des ordres du GSM non développé ici.

Cela explique aussi le choix un peu bizarre des variables, qui sont restées celles de mon programme général.

Le programme scrute le GPS avec une fréquence modifiable, s’assure que les données sont validées, (sans aller jusqu’au contrôle de cheksum) et met les données sous forme d’une chaîne pouvant être émise via un SMS.

Il est possible de transmettre les données brutes, mais mon choix ici a été d’obtenir des données sous forme décimales afin de pouvoir éventuellement faire des calculs de déplacement.
 

PieM

Senior Member
Rich (BB code):
;****************************************
;*********** GPS NEO6M  ***************
; extraction trame RMC si validation
; longitude et latitude en décimal signé
; (compatible avec Google Maps pour GSM
;  et calcul de déplacement possible)
; 2020- PieM
;****************************************
#Picaxe 28X2
#Terminal 9600
#No_Data
#No_Table
#define Led_on high C.2
#define Led_off low C.2
;symbol=============================
symbol baud_GPS = T4800_8     'com GPS
symbol UART_in = C.0
symbol point_RMC = 60         'pointeur debut chaine RMC
symbol periode = 4      ; periode d'interrogation du GPS en s
;variables =========================
symbol valid = bit16
symbol Var_temp = b5
symbol mem_bptr = b6
symbol sign_latitude = b37
symbol deg_lat = b38
symbol min_lat = b39
symbol dec_min_lat = w20

symbol sign_longitude = b43
symbol deg_long = b44
symbol min_long = b45
symbol dec_min_long = w23
'==================================
setfreq m8
settimer t1s_8 ;base de tps timer 1s

led_on
pause 2000
led_off

main:;=========================================================
do
      Var_temp = timer // periode  ;Frequence de lecture du GPS
if Var_temp=0 then 
      gosub Recep_RMC
    gosub detect_AV ; detection validite
      if valid = 1 then  ; si reception correcte
            gosub affich_RMC ; pas nécessaire
            gosub decode_RMC 
            gosub Affich_coor; pas nécessaire
            gosub Chaine_GPS
   endif
      pause 1000
endif
loop

'=================================================================
detect_AV:
bptr= point_RMC
      do :inc bptr : loop until @bptr = "V" or @bptr = "A"
      If @bptr = "A" then
      valid = 1 : Led_on :pause 200:      Led_off
      else
      valid = 0 : Led_on :pause 1000:     Led_off
      endif ' etat reception (A si validation)

mem_bptr = bptr+2 ' memorisation pointeur début coordonnees
return
'=================================================================

Recep_RMC:

bptr= point_RMC 
serin UART_in, baud_GPS,("RMC,"),@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc
      
return
 
Last edited:

PieM

Senior Member
suite...
Rich (BB code):
decode_RMC:  'en valeurs decimales signees
bptr= mem_bptr 'init du pointeur au debut longitude

deg_lat = @bptrinc-48*10 + @bptrinc-48
min_lat = @bptrinc-48*10 + @bptrinc-48
inc bptr ' saut de la ","
dec_min_lat = @bptrinc-48*10 + @bptrinc-48*10 + @bptrinc-48*10 + @bptrinc-48
inc bptr  ' saut de la ","
sign_latitude = @bptrinc
inc bptr ' saut de la ","
deg_long = @bptrinc-48*10 + @bptrinc-48*10 + @bptrinc-48
min_long = @bptrinc-48*10 + @bptrinc-48
inc bptr ' saut de la ","
dec_min_long = @bptrinc-48*10 + @bptrinc-48*10 + @bptrinc-48*10 + @bptrinc-48
inc bptr
sign_longitude = @bptrinc

if sign_latitude = "N" then 
      sign_latitude = "+"
else sign_latitude = "-"
      endif

if sign_longitude = "E" then 
      sign_longitude = "+"
else sign_longitude = "-"
      endif

return
'=================================================================

affich_RMC: 
bptr= mem_bptr  'init du pointeur au debut longitude
do
      sertxd(@bptrinc)
loop until @bptr = "W" or @bptr = "E" ' lit toutes les coordonnées
sertxd(@bptrinc, cr)

return
Affich_coor:

sertxd ("Latitude :",sign_latitude)
sertxd(#deg_lat,"d ", #min_lat,".", #dec_min_lat, "min",cr)
sertxd ("Longitude :",sign_longitude)
sertxd(#deg_long,"d ", #min_long,".", #dec_min_long, "min",cr)

return
'=================================================================

Chaine_GPS:

sertxd ("http://maps.google.com/maps?q=",sign_latitude,#deg_lat,"%20",#min_lat,".",#dec_min_lat,",",sign_longitude,#deg_long,"%20",#min_long,".",#dec_min_long)
sertxd (cr,lf)
return
 
Last edited:
Top