A dire il vero la moltiplicazione per 1000000 io l'avrei eseguita all'inizio, proprio per evitare l'uso dei float.
Paolo.
Conversione stringhe Gps
Moderatore:
Paolino
41 messaggi
• Pagina 3 di 5 • 1, 2, 3, 4, 5
2
voti
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
Così dovrebbe essere giusto:
Adesso sto provando ad usare la funzione sprintf() ma non riesco a capire la specifica di conversione che devo usare;
Dov'è cha sbalgio.
Grazie per l'aiuto.
Marcello.
- Codice: Seleziona tutto
void conversione(void){
unsigned int coordinata[]={1,4,5,4,9,0,2,9,1,7};
unsigned int risultato=0;
unsigned long risultato1=0;
unsigned long risultato2=0;
unsigned long risultato3=0;
unsigned long risultato5=0;
unsigned long parteintera=0;
unsigned long partedecimale=0;
//4549.2917,N
//45 + (49.2917/60)= 45,821528333
risultato=(coordinata[1]*10)+coordinata[2];// -> 45
risultato1=((coordinata[3]*10)+coordinata[4])*10000000;// -> 490000000
risultato2=(coordinata[6]*1000)+(coordinata[7]*100)+(coordinata[8]*10)+(coordinata[9]);// ->2917
risultato3= risultato1+risultato2;// -> 492917000
risultato5= risultato3/60;// -> 8215283
parteintera=(risultato5/10000000)+risultato;// -> 45
partedecimale=risultato5-parteintera;// ->8215283
}
Adesso sto provando ad usare la funzione sprintf() ma non riesco a capire la specifica di conversione che devo usare;
- Codice: Seleziona tutto
unsigned int coordinata_finale[10];
sprintf(coordinata_finale,"%s",parteintera);
Dov'è cha sbalgio.
Grazie per l'aiuto.
Marcello.
2
voti
prova con:
Dovrai mettere i nomi esatti delle variabili, io ho messo ParteIntera e ParteDecimale.
Attenzione: tra %02d e %l c'è un segno di punto (.). Serve per separare parte intera da quella decimale, nella visualizazione, così che hai 45.123456
Ho un dubbio, sul %l... devo controllare la formattazione.
Paolo.
- Codice: Seleziona tutto
char *CoordinataFinale;
sprintf(CoordinataFinale,"%02d.%l",ParteIntera, ParteDecimale);
Dovrai mettere i nomi esatti delle variabili, io ho messo ParteIntera e ParteDecimale.
Attenzione: tra %02d e %l c'è un segno di punto (.). Serve per separare parte intera da quella decimale, nella visualizazione, così che hai 45.123456
Ho un dubbio, sul %l... devo controllare la formattazione.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
Ciao, ho provato ad usare la funzione sprintf() come mi hai indicato tu ma non riesco ad interpretare il risultato.
Sto provando con mplab e il debugger MPLAB SIM ma l'array coordinatafinale, composta da 20 caratteri, dopo la funzione
Questo è il codice completo.
Ti posto l'immagine della schermata :

Grazie.
Marcello.
Sto provando con mplab e il debugger MPLAB SIM ma l'array coordinatafinale, composta da 20 caratteri, dopo la funzione
- Codice: Seleziona tutto
sprintf(coordinatafinale,"%02d.%l",parteintera, partedecimale);
- Codice: Seleziona tutto
coordinatafinale[0] -> 48
coordinatafinale[1] -> 48
coordinatafinale[2] -> 46
coordinatafinale[3] -> 37
coordinatafinale[4] -> 0
coordinatafinale[5] -> 0
coordinatafinale[6] -> 0
coordinatafinale[8] -> 0
coordinatafinale[9] -> 1
e tutti gli altri a 0.
Questo è il codice completo.
- Codice: Seleziona tutto
void conversione(void){
unsigned int coordinata[]={1,4,5,4,9,0,2,9,1,7};
unsigned char coordinatafinale[20];
unsigned int risultato=0;
unsigned long risultato1=0;
unsigned long risultato2=0;
unsigned long risultato3=0;
unsigned long risultato5=0;
unsigned long parteintera=0;
unsigned long partedecimale=0;
risultato=(coordinata[1]*10)+coordinata[2];// -> 45
risultato1=((coordinata[3]*10)+coordinata[4])*10000000;// -> 490000000
risultato2=(coordinata[6]*1000)+(coordinata[7]*100)+(coordinata[8]*10)+(coordinata[9]);// ->2917
risultato3= risultato1+risultato2;// -> 492917000
risultato5= risultato3/60;// -> 8215283
parteintera=(risultato5/10000000)+risultato;// -> 45
partedecimale=risultato5-parteintera;// ->8215283
sprintf(coordinatafinale,"%02d.%l",parteintera, partedecimale);
}
Ti posto l'immagine della schermata :

Grazie.
Marcello.
2
voti
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
Ciao, ho provato con la modifica suggerita e il risultato é questo:
Non riesco a postarti un'immagine perché sono fuori casa e la connessione internet c'é
l'ho solo sul tablet.
Grazie per l'aiuto.
Marcello
- Codice: Seleziona tutto
Value. Hex. Decimal. Char
coordinatafinale[0] -> 0x3030. 0x3030. 12336. '00'
coordinatafinale[1] -> 0x252E. 0x252E. 9518. '%.'
coordinatafinale[2] -> tutto a zero
coordinatafinale[3] -> tutto a zero
coordinatafinale[4] -> 0x0100. 0x0100. 256. '..'
Tutto il resto a zero...
Non riesco a postarti un'immagine perché sono fuori casa e la connessione internet c'é
l'ho solo sul tablet.
Grazie per l'aiuto.
Marcello
1
voti
Mi sono dimenticato di dirti di inserire:
Più tardi guardo con calma.
Paolo.
- Codice: Seleziona tutto
#include <stdio.h>
Più tardi guardo con calma.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
1
voti
Allora,
ho simulato con MPLAB C18 ed è venuto fuori qualche cosa di interessante.
Il codice è il seguente:
Quello che ottengo è coordinatafinale = "45.8166"
Ora, la cosa curiosa è che il %l (l= elle) è ben documentato e indica variabili long int o unsigned long int, però sembra non funzionare.
Dimmi se così può andare.
Paolo.
ho simulato con MPLAB C18 ed è venuto fuori qualche cosa di interessante.
Il codice è il seguente:
- Codice: Seleziona tutto
unsigned int coordinata[]={1,4,5,4,9,0,2,9,1,7};
char coordinatafinale[20];
unsigned int risultato=0;
unsigned long risultato1=0;
unsigned long risultato2=0;
unsigned long risultato3=0;
unsigned long risultato5=0;
unsigned long int parteintera=0;
unsigned long int partedecimale=0;
risultato=(coordinata[1]*10)+coordinata[2];// -> 45
risultato1=((coordinata[3]*10)+coordinata[4])*10000000;// -> 490000000
risultato2=(coordinata[6]*1000)+(coordinata[7]*100)+(coordinata[8]*10)+(coordinata[9]);// ->2917
risultato3= risultato1+risultato2;// -> 492917000
risultato5= risultato3/60;// -> 8215283
parteintera=(risultato5/10000000)+risultato;// -> 45
partedecimale=risultato5-parteintera;// ->8215283
sprintf(coordinatafinale,"%02d.%04d",(int)parteintera, (unsigned int)(partedecimale/1000));
Quello che ottengo è coordinatafinale = "45.8166"
Ora, la cosa curiosa è che il %l (l= elle) è ben documentato e indica variabili long int o unsigned long int, però sembra non funzionare.
Dimmi se così può andare.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
Ciao Paolo, ti chiedo l'ennesimo piacere.
Siccome posso navigare solo con il tablet e non é compatibile con flash player non riesco a scorrere la finestra dove mi hai scritto il codice perciò visualizzo solo la prima parte.
Riesci e copiarmi il codice senza peró inserirlo nei tag "code".
Grazie mille per tutto l'aiuto che mi stai dando.
Ciao Marcello.
Siccome posso navigare solo con il tablet e non é compatibile con flash player non riesco a scorrere la finestra dove mi hai scritto il codice perciò visualizzo solo la prima parte.
Riesci e copiarmi il codice senza peró inserirlo nei tag "code".
Grazie mille per tutto l'aiuto che mi stai dando.
Ciao Marcello.
41 messaggi
• Pagina 3 di 5 • 1, 2, 3, 4, 5
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 12 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)
