bonjour
bon, désolé pour le "ce soir" j'ai pas eu le temps de répondre à temps
alors voila quelques trames :
$GPZDA,071308.00,17,01,2020,00,00*6C
$GPRMC,071309.00,V,,,,,,,170120,,,N*74
$GPZDA,071309.00,17,01,2020,00,00*6D
$GPRMC,071310.00,V,,,,,,,170120,,,N*7C
$GPZDA,071310.00,17,01,2020,00,00*65
$GPRMC,071311.00,V,,,,,,,170120,,,N*7D
$GPRMC,072030.00,A,4234.86458,N,00225.59691,E,0.111,,170120,,,A*73
$GPZDA,072030.00,17,01,2020,00,00*67
$GPRMC,072031.00,A,4234.86457,N,00225.59697,E,0.111,,170120,,,A*7B
$GPZDA,072031.00,17,01,2020,00,00*66
trames obtenues ainsi :
if (gps.available()) {
char c=gps.read();
Serial.write(c);
if(gpzda.traiterCar(c))
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(gpzda.heureUTC());
lcd.print(":");
lcd.print(gpzda.minuteUTC());
lcd.print(":");
lcd.print(gpzda.secondeUTC());
}
}
sauf que le second if n'est jamais validé. Si je le vire, j'ai bien des valeurs qui semblent correctes qui s'affichent (vite ! ) au fur à mesure du décodage, mais c'est la validation du checksum qui ne fonctionne pas
pourtant à force de le lire et le relire, j'ai fini par comprendre ton système, du moins il me semble.
déjà je suppose que la séparation en deux plutôt que de lire toute la valeur de la trame c'est pour éviter une variable globale de plus, j'ai bon ?
Ensuite il me semble aussi avoir compris la technique, le décalage de >>4 c'est pour virer l'unité (en hexa) et garder la "seizaine" pour faire la première comparaison, le+1c'est pour être sûr que la comparaison soit fausse si on n'a rien lu, j'ai toujours bon ?
En revanche pour la seconde partie, le & 15 je pige pas pourquoi ça vire la "seizaine" c'est équivalent à faire
uint8_t demi1 = _chk - (_chk >> 4); finalement ?
bref quoi qu'il en soit y'a par contre un truc que j'ai pas pigé c'est pourquoi démarrer la lecture à l'index 2 et non 1 comme dans les autres cas ?
merci