LED Debounce qui clignote lorsque l'on reste appuyer.

Salut tous le monde ! :slight_smile:

Alors voila je travail dans un petit bureau d'étude et on ma confié un petit sujet annexe qui est :

Faire en sorte que lorsque l'on touche le socle en inox d'une lampe celle-ci s'allume.

Jusque la tout va bien grace a une resistance de pullup je réussis a détecter si quelqu'un ose toucher ma précieuse lampe.
Je recois 1 si personne ni touche et 0 si il y'a contact.

Hors voila si j'appuie juste une fois tout ce passe bien et pareil si plusieur fois ... a part quand je clique plus vite que le delay ou si je reste appuyez la ... c'est la cata la LED clignote à la frequence du délais ...
J'ai tout essayé interupt modification de la frequence de la carte ect ...

J'ai appeller deux collegues ingénieur rien n'y fais on séche tous ....

Voici le code ( squellette) il fais le minimum, à savoir allumer puis éteindre au contact.
Quelqu'un pourrais me donner la partis "Gestion du cas ou un petit malin ose rester appuyer sur ma précieuse lumiére" ? Ou une piste s'il vous plait .)

Merci d'avance a ceux qui en prendront le temps bonne journée / soirée à vous.

int Test = 9;          // La ou est relier ma partis en inox( C'est mon entrer le fameux 0 ou 1)
int Led = 8;           // LA led et oui :)
int Relais = 10;       // On s'en fiche un peu de lui mais je le met au cas ou je doit m'adapter a des tension plus forte

#define LedToggle digitalWrite (Led, !digitalRead(Led))
#define RelaisToggle digitalWrite (Relais, !digitalRead(Relais))

void setup() {
  pinMode(Test, INPUT);
  pinMode(Led, OUTPUT);
  pinMode(Relais, OUTPUT);
  Serial.begin(9600);
}

void loop() {

    if (digitalRead(Test) == LOW)           // SI contact de type humain
    {
      LedToggle;                           // on inverse la LED
      RelaisToggle;                        // Pareil avec le Relais
      delay(150);                          // Le délais que je trouve le mieux adapter
    }
}

Bonjour,

Il suffit que tu mémorises l'état précédent et que tu testes si l'entrée à changé d'état.
Je suis quand même un peu étonné que tes deux collègues ingénieur sèchent sur un problème si simple et si courant.

Ahah le probléme c'est que la carte lit les valeurs plus vite qu'elle ne fais tourner le programme ce qui fais que ton idée ne marche pas crois moi je l'ai ronger stockage de l'état multiple compteur et comparateur ...

J'ai fais un programme du genre :

if ( Entrer == HIGH)
{
if ( Entrer == LOW)
{
Serial.println("problemo");
}
}

et ... problemo est apparus sur l'écrans tu vois le soucis ?

Apres pour leur défense nous sommes surcharger donc on est un peu pris partout :slight_smile:

De quelle carte tu parles?

essaies ceci

void loop() {
  static byte etatPrecedent=HIGH;
  byte etat=digitalRead(Test);
  if (etat!=etatPrecedent && etat==LOW)           // SI contact de type humain
  {
    LedToggle;                           // on inverse la LED
    RelaisToggle;                        // Pareil avec le Relais
  }
  etatPrecedent=etat;
  delay(10);          // anti rebond (optionnel)
}

La c'est une Nano mais j'ai des uno mega Max32 ShieldBuddy TC275 :stuck_out_tongue:
Mais je veux que ce soit miniature alors la uno me parait pas mal .)

Je teste ca tout de suite merci :slight_smile:

Alors le probléme est le même la Led clignote quand on reste appuyer mais juste plus vite car delay = 10 aux lieux de 150 :confused:

A tu une autre idée ?

Oui en faite comme notre corps conduit un tout petit peu l'éléctricité cela suffit à être visible avec un arduino et une pullup :slight_smile:

Tenez pour plus de détail j'ai trouver ca durant ma recherche :

Zeratic:
Alors le probléme est le même la Led clignote quand on reste appuyer mais juste plus vite car delay = 10 aux lieux de 150 :confused:

Je ne comprend pas. Tu as bien recopié le programme tel quel et tu n'as pas modifié en particulier static dans la définition de etatPrecedent?
Sinon, ça voudrait dire que l'état n'est pas stable.

Oui je suis tout a fais daccord et c’est la conclusion que nous avons eu les valeurs ne sont pas propre et cela releve du coup de chance , mais avais vous une idée pour parvenir a faire ce fameux systéme de socle par un autre moyen ? :slight_smile:

Car la on ne peux pas en faire un produit et l’installer dans nos lampes du coup … :confused:

L’entrée recois bien 1 lorsque rien n’est en contact et 0 si contact mais j’ai l’impression que la carte lis trop vite les valeurs … par exemple sur le serial tout parait nikel …