Projet Veilleuse - Gestion des appuis Long et Court avec AtTiny45 & interruption

Hello,

Le projet avec lequel je remets les mains dans le code est un projet de veilleuse basse-tension pour chambre d'enfant à base de ruban à LED.

Le principe de fonctionnement est le suivant:

Après mise sous tension du montage, il est possible de déclencher l'allumage d'une veilleuse par tranche de 10 minutes suivant le nombre d'appui sur un bouton poussoir.

Les limitations sont les suivantes:

  • Une fois le premier appui sur le bouton poussoir, les autres doivent se faire dans les 5 secondes pour être comptabiliser.
  • le temps d'allumage maximum de la veilleuse est de 60 minutes, le nombre d'appuis est donc limité à 6.
  • Il n'est pas possible de relancer un cycle de veilleuse sans faire un Power Off/On complet. Modification future: ajout d'un délais de garde avant réarmement.

Après quelques mises au point avec un Arduino Uno R3, le montage fonctionne de manière satisfaisante. Ne voulant pas intégrer un R3 dans la veilleuse pour des raisons de volume et de prix, je me suis tourné vers un AtTiny. Pour simplifier le soft, je suis passé à une programmation à base d'interruption pour déterminer si le bouton poussoir a été actionné.

De manière globale, le montage fonctionne parfaitement. Mais en réalisant quelques tests d'appuis "poussés", je me suis aperçu qu'il y a un cas pour lequel le comportement obtenu avec le Tiny n'est pas le même qu'avec le Uno R3 :

  • lorsque l'on actionne le bouton poussoir pour la première fois par un appui long, le montage prend en compte 2 appuis au lieu de un. Et le temps d'allumage est donc de 20 minutes au lieu de 10. >:(
  • En fait, c'est comme si l'appui long sur le bouton agissait comme 2 appuis courts, le premier déclenchant l'interruption, et une fois que celle-ci a terminé son traitement, re-belotte: re-interruption.

Pour information, le bouton poussoir est raccordé à un montage anti-rebond R/C de base (celui décrit dans la littérature Arduino).

J'ai déjà essayé, sans succès, de jongler avec les différents modes de déclenchement de l'interruption (front montant, descendant, changement d'état...), de diminuer la valeur d'anti-rebonds logiciel...

Le soft, commenté est en attachement. Alors, si vous avez des idées, je suis preneur.

Merci. Morgan

Mrx_Nightlight-01_ATtiny45.ino (4.13 KB)

Bonsoir,
Pas dans la bonne rubrique
Mes plus plates excuses à Morgan78.

Oh Icare, cool :grin: . C'est un produit fini, il fonctionne, la question c'est juste pour de l'amélioration :smiley: .

Il est vrai que ces derniers jours on a eu droit à une salve d'illétrés retardataires et que le pire est à venir : le mois de Mai n'est pas fini :angry:

68tjs:
... : le mois de Mai n'est pas fini :angry:

:grin:
Et Juin va surement amplifier l’accélération constatée sur Mai :sunglasses:

Bonjour a tous,

Morgan78,

2 petites choses :

  • 500mS pour un debounce, c'est beaucoup, on utilise habituellement 25mS
  • ton probleme :
unsigned long SingleDuration =300000; // Durée de l'allumage de la lampe pour 1 appui en ms (10 min)

pour moi, cela fait 5 min et pas 10 :wink:

Felicitations

Jacques

Hello,

En premier, Icare, désolé d'avoir choisi le mauvais "Forum"... Et si je plaide coupable, j'aimerais ajouter qu'on est tout "newbies un jour", enfin je crois. Mais s'il est nécessaire de le changer de Forum, no problemo.

Effectivement JMe87, la valeur de cycle de base ne correspond pas à la durée cité. C'est juste que pendant les essais, je joue avec cette valeur, pendant mes essais pour éviter d'avoir à attendre trop de temps (là 15s ou 30s c'est nickel), ou au contraire pour avoir plus de temps et faire autre chose en parallèle (je sais c'est pas bien :-* ).

Pour ce qui est de la valeur de Debounce, pendant mes investigations, j'étais parti dans l'autre sens et je l'avais donc augmentée au fur et à mesure. Pas Glop...

=> je vais donc essayer avec une valeur plus raisonnable et réaliste.

Je vous tiens donc au courant. Et Merci encore.

Morgan.