Sketch clock_sevenseg_gps problème d'affichage à partir de 1h00 du matin

Bonjour,

Je ne suis pas nouveau sur ce Forum, mais mon ancien identifiant ne fonctionne plus, et mes demandes de reset password ne retournent aucun email (même dans les spams)... J'ai donc recréé un compte.

Cela fait plusieurs années que j'utilise l'Horloge "clock_sevenseg_gps" avec l'afficheur 7 segments Adafruit.

Et je rencontre toujours le même soucis à partir de 00h59, je n'ai jamais l'affichage de 1h du matin. A la place j'ai un décompte toutes les minutes -:99 et lorsque le décompte atteint -:40 l'affichage passe à bien à 2:00 du matin.
J'ai testé en mode 24h ou 12h le problème est identique...

J'ai fait des recherches pour voir si d'autres utilisateurs avaient rencontrés ce problème ou si le Sketch de l'horloge avait reçu une modification pour corriger ce problème, mais rien... J'en perd mon Latin ^^

Si j'arrive à joindre la photo qui affiche ce problème, l'affichage est -:74 alors que l'affichage correcte devrait être 1h26 (soit 100 - 26 = 74) Dingue ... :confused:

Il faut dire que je suis loin d'être un spécialiste du Python, donc j'aurais besoin de quelques lumières de spécialistes de ce Langage...

Je n’ai pas joint le Sketch de l'horloge qui se situe dans les Exemples --> Adafruit LED Backpack Library.

J'utilise la dernière version de IDE Arduino 1.8.12 et les bibliothèques sont à jours...

J'utilise le module GPS Adafuit, mais j'ai également testé avec celui de Neo, même résultat...

Cela serait vraiment super si quelqu'un pouvait m'expliquer pourquoi; le 1h00 du matin disparait pendant une heure :o

D'avance merci.

Jacky

tropiques747:
Il faut dire que je suis loin d'être un spécialiste du Python, donc j'aurais besoin de quelques lumières de spécialistes de ce Langage...

Je n’ai pas joint le Sketch de l'horloge qui se situe dans les Exemples --> Adafruit LED Backpack Library.

Bonjour,
Oui alors, il n'y a pas de Python par ici. l'IDE Arduino permet de développer en C++.
Le sketch ce serait bien de le joindre parce les intervenants n'ont pas nécessairement installé la librairie Adafruit LED Backpack, et peut-être qu'ils n'ont a pas envie de l'ajouter.

Tu es situé en France métropolitaine?

Bonjour,

Ok je vais poster le Sketch...

Oui pour l'instant je suis coincé en France métropolitaine... Car les avions restent au sol jusqu'à nouvel ordre...
Comme je l'avais expliqué dans mon ancien compte je suis pilote de 747 400.

Pas facile de poster avec les limitations... :frowning:

Les limitations s'appliquent sur les premiers posts.

Oui c'est ce que j'ai compris, c'est assez handicapant au début...

Je retente l'envoi du Sketch et de la photo...

clock_sevenseg_gps.ino (5.55 KB)

La photo :

Je ne sais pas si le problème vient de là, mais ici :

 if (hours > 23) {
    hours = 24-hours;
  }

j'aurais mis

hours = hours - 24;

De même, je pense qu'il faut ôter le + ici

#define HOUR_OFFSET       +2

car cette ligne

int hours = gps.hour + HOUR_OFFSET;

devient

int hours = gps.hour + +2;

C'est peut-être valide ... ou pas ...?

As-tu essayé de changer la valeur de l'offset ? Si tu mets 3 par exemple, ton problème arrive-t-il à 2h du matin ? Si oui, c'est un problème lié à la conversion de format au passage de minuit, qui doit être mal fait.

EDIT : oui çà doit être lié à cette soustraction à l'envers.
Tu as un offset de +2 heures et ton problème arrive à 1h du matin. Disons que tu doives afficher 1h26. Sans l'offset, le GPS envoie 23h26. hours contient alors 23+2 = 25. Le test :

  if (hours > 23) {
    hours = 24-hours;
  }

fait que hours contient ensuite 24-25 = -1

 int displayValue = hours*100 + minutes;

displayValue vaut alors -100+26 = 74 ! On trouve bien la valeur affichée !

Avec

hours = hours - 24;

tu auras 126 comme prévu.

:grinning:

Si ça marche, tu me dois un vol en 747 8)

Le Sketch n'est pas de moi, mais de Adafruit.

Le +2 c'est que actuellement nous sommes à +2 par rapport à GMT (heure d'été)

Lorsque je test avec +3 cela décale simplement le fuseau horaire, et lorsque j'arrive à 00:59, il se passe une minute avec l'affichage -1:00 puis -:99 qui se décompte...

Je vais essayer les autres pistes que tu m'indiques...

Dans tous les cas : merci d'avoir répondu.

Où places tu exactement le hours = hours - 24; dans le sketch ???

Écoutes tu es un as !!! 8) Car cela fonctionne, tu as bien trouvé le bug, qui me pourrit la vie depuis pas mal de temps....

Pour l'accompagnement en 747, cela serait vraiment avec plaisir, mais depuis quelques années les contrôles sont complètement dingues, impossible d'avoir un invité en cockpit, alors qu'il n'y avait aucun soucis avant la période d'attentats...

C'est vraiment super sympa de m'avoir aidé, car je suis vraiment nul en prog.

A bientôt et encore merci... 8)

Jacky

Bonjour "lesept",

j'ai rajouté dans "the header" du fichier "clock_sevenseg_gps.ino" le texte suivant :

//Bug display 00:59 fixed by "lesept" Tesla Member Forum Arduino CC , on April 02, 2020.

Car il y a quelques années j'avais écris à Tony DiComa, le créateur du Sketch pour Adafruit, pour lui signaler ce bug, et il m'avait répondu après plusieurs mois que son Sketch ne comportait aucun Bug, qu'il fallait que je vérifie mon montage :o

Encore merci et bonne journée.

Jacky

Merci, bonne continuation...

@lesept,

Si un jour tu aperçois un complément pour ce Sketch permettant le passage heure d'été/heure d'hiver, je serai intéressé....
Mais bon, sinon ce n'est pas trop contraignant de reprogrammer l'horloge 2 fois par an :wink:

Il n'y a pas un paramètre dans la trame GPS qui indique ça ?
Sinon, je crois que Bricoleau a fait une bibliothèque qui gère les heures d'été et d'hiver. C'est pour une RTC, mais tu as du temps : tu peux la disséquer et trouver les lignes qui gèrent ça... :smiley: bloqué sur le plancher des vaches...

Merci pour le lien.
Oui comme tu dis "bloqué sur le plancher des vaches" Cela commence à être un peu long... :stuck_out_tongue_closed_eyes:

Je viens de regarder le travail de "Bricoleau" Le confinement devra durer longtemps pour que j'arrive à repérer les bonnes lignes, pour les intégrer dans le Sketch de l'horloge GPS ...

Je ne connais pas le langage, donc j'ai du mal avec la logique des termes employés

Il y a des chances que je revienne vers toi, pour quelques conseils...

Bonne nuit.

Je vais étudier ça...

J'ai extrait la fonction qui calcule le passage à l'heure d'été : elle renvoie un booléen qui est à 0 pour l'heure d'hiver et 1 pour l'heure d'été (ou true et false, c'est pareil):

bool heureEte(uint8_t anneeUTC, uint8_t moisUTC, uint8_t jourUTC, uint8_t heureUTC)
{
  //En France métropolitaine :
  //Passage de l'heure d'hiver à l'heure d'été le dernier dimanche de mars à 1h00 UTC (à 2h00 locales il est 3h00)
  //Passage de l'heure d'été à l'heure d'hiver le dernier dimanche d'octobre à 1h00 UTC (à 3h00 locales il est 2h00)
  //Soyons propres :
  const uint8_t MARS = 3;
  const uint8_t OCTOBRE = 10;
  if (moisUTC == MARS)
  {
    uint8_t dernierDimancheMars = 31 - ((5 + anneeUTC + (anneeUTC >> 2)) % 7); //Pas évidente à trouver celle-là
  return jourUTC > dernierDimancheMars || (jourUTC == dernierDimancheMars && heureUTC != 0);
  }
  if (moisUTC == OCTOBRE)
  {
    uint8_t dernierDimancheOctobre = 31 - ((2 + anneeUTC + (anneeUTC >> 2)) % 7);
  return jourUTC < dernierDimancheOctobre || (jourUTC == dernierDimancheOctobre && heureUTC == 0);
  }
  return MARS < moisUTC && moisUTC < OCTOBRE;
}

void setup(){
  Serial.begin(115200);
  Serial.println(heureEte(20,3,28,10)?"ete":"hiver"); // 28 mars 2020, 10 heures UTC
  Serial.println(heureEte(20,3,29,10)?"ete":"hiver"); // 29 mars
  Serial.println(heureEte(20,7,14,10)?"ete":"hiver"); // 14 juillet
  Serial.println(heureEte(20,10,24,10)?"ete":"hiver"); // 24 octobre
  Serial.println(heureEte(20,10,25,10)?"ete":"hiver"); // 25 octobre
  Serial.println(heureEte(20,12,31,10)?"ete":"hiver"); // 31 décembre
}

void loop() {}

Les arguments d'entrée sont l'année ("20" pour 2020), le mois et le jour du mois, et l'heure UTC. Je pense que c'est l'heure donnée directement par ton GPS. Attention, ça ne marche que pour la France.

On pourrait pas faire un petit tour de 747 au dessus de Paris un de ce jours, ni vu ni connu, juste tous les deux ? :-*

Vraiment un immense merci pour ta collaboration, car je suppose que tu n'as pas que ça à faire....
Ok c'est bon pour que la France, l'horloge étant en France.

Ouais !!! Ton idée de survoler Paris en 747 400 à 600 pieds, n'est pas mauvaise :wink: :smiley: Nous allons même passer à la Télé, avant d'être enfermés... :grinning: :wink:
Tu as raison; soyons fous...