Bouton poussoir avec 4 afficheurs LED

Bonjour à tous,

[débutant]

J'ai créé un code qui malheureusement ne fonctionne pas malgré mes livres et recherche sur les forums :confused:
Mon projet: un bouton qui fait augmenter à chaque pression le chiffre inscrit sur un afficheur LED (7 segment 4 digit).

J'utilise SevSeg.h

Mon problème est que le bouton ne fonctionne pas et que l'affichage indique - -

Je joint mon croquis.

// /*
   Utilisation de la bibliothèque `SevSeg` pour incrémenter l'afficheur digital.
*/

#include "SevSeg.h"
SevSeg sevseg;
const int  buttonPin = 9; // Création d'un nom pour la broche utilisée avec le bouton poussoir

int buttonPushCounter = 0;   // variable pour compter le nombre d'appuis sur le bouton poussoir
int buttonState = 0;         //Variable pour l'état actuel du bouton poussoir
int lastButtonState = 0;     // Variable pour l'état précédent du bouton poussoir
int num = 10; // Le chiffre affiché

void setup()
{
  pinMode(buttonPin, INPUT); // Met la broche bouton poussoir en entrée
  byte numDigits = 2; // Nombre d'afficheur digit
  byte digitPins[] = {12, 13, 10}; // Indication des pins pour D1,D2,D3 et D4
  byte segmentPins[] = {2, 4, 7, 6, 5, 3, 8, 11}; // Indication des pins pour la gestion des segments par ordre alphabétique
  byte hardwareConfig = COMMON_CATHODE;
  bool resistorsOnSegments = false;

  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(30);
}




void loop()
{
  buttonState = digitalRead(buttonPin); // Bouton appuyé, le chiffre augmente de 1
  if (buttonState == HIGH)
  {
    sevseg.setNumber(num++);
    sevseg.refreshDisplay();

  }
}

.

PROJET_FINAL_COMPTEUR_Rodolphe.ino (1.38 KB)

On ne peut pas lire simplement votre code sur mobile
Postez le code directement dans le texte en utilisant les balises:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l’IDE avant de copier le code pour qu’il soit indenté correctement)

Ça peut venir de la manière dont tu as connecté ton bouton. Je te conseille un peu de lecture... Ça ne peut pas faire de mal.

Précise les branchements.

Bonjour,

J'espère qu'il y a bien une résistance de pulldown sur ton bouton.

Il faut tester le changement d'état de ton bouton, sinon ta valeur num s'incrémente très vite et excède la valeur max affichable donc sevenseg affiche --

Mets sevseg.refreshDisplay() dans la loop en dehors du if

lesept:
Ça peut venir de la manière dont tu as connecté ton bouton. Je te conseille un peu de lecture... Ça ne peut pas faire de mal.

Précise les branchements.

Bonjour et merci pour le conseil.

Effectivement je pense m'embrouiller avec le bouton, je ne sais pas trop ou le brancher!
Je vais ajouter une image de mon branchement avec TinkerCad.

Le plus simple est d'utiliser le pull-up interne de l'arduino
Tu branches comme ceci

GND - - bouton - - pin digitale

Et tu testes si le niveau est LOW pour savoir s'il est enfoncé.

... Et suis le conseil de Kamill...

Pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau

kamill:
Bonjour,

J'espère qu'il y a bien une résistance de pulldown sur ton bouton.

Il faut tester le changement d'état de ton bouton, sinon ta valeur num s'incrémente très vite et excède la valeur max affichable donc sevenseg affiche --

Mets sevseg.refreshDisplay() dans la loop en dehors du if

En mettant sevseg.refreshDisplay() en dehors du if cela a résolu un problème.
Je n'ai plus le clignotement des - - mais ils sont toujours présent.

Je vais faire des recherches sur "résistance de pulldown" et pour tester l'état de mon bouton.
Il doit me manquer quelque chose dans mon code, je vais tacher de trouver.

J-M-L:
Pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau

Merci pour le conseil.
J'ai installé la librairie et cela m'a permit de voir que mon bouton était toujours appuyé.

J'ai corrigé mon code en modifiant:

pinMode(buttonPin, INPUT); par pinMode(buttonPin, OUTPUT);

Le résultat est que le bouton réagit à la pression et que le chiffre 0 remplace les - -
Bon, j'avance :slight_smile:
Par contre quand je presse le bouton une fois le 0 est remplacé par les --

Utilisés le pullulent internet comme indiqué par lesept
Ne mets pas la ministre en sortie tu fais un court circuit en appuyant sur le bouton.

kamill:
Utilisés le pullulent internet comme indiqué par lesept
Ne mets pas la ministre en sortie tu fais un court circuit en appuyant sur le bouton.

les ravages de l'alcool, si jeune... 8) la ministre en court-circuit, j'aimerais voir une photo...

J'écrit sur ma tablette. Saloperie de correcteur orthographique automatique.
Corriger pin en ministre c'est quand même un peu fort!!

Prenez deux pattes en diagonal pour le bouton, au moins vous êtes sûr de ne pas tomber sur des broches identiques

Salut,
J'y connais rien en électronique, mais le code, il n'y a pas de problème, même si j'ai écrit mes premières ligne de C++ à l'occasion de la création d'un sketch pour mon Uno il y 2 mois.
Bref, ton programme ne pas faire ce qu tu veux car, indépendamment de ton shéma (que je n'ai pas regardé) ou tes librairies pour effectuer l'affichage (que je ne connais pas), et pour préciser ce que dit kamill, sache que "loop" est une fonction appelée en boucle très rapidement, plusieurs millions de fois par secondes. Ce que tu fais dans cette boucle est de regarder l'état du bouton et d'incrémenter un compteur de type int de manière inconditionnelle.
Déjà, pendant que tu appuie, un certain nombre de millier d’itération auront lieu. Ceci va provoquer un certain nombre de milliers de demande d'affichages et en supplément, tu va dépasser la capacité du compteur (type int) qui va faire n'importe quoi.
La bonne solution est de capter les changements d'états dans le loop :

  • si je suis à "down" et que maintenant le bouton est à "up" alors j'incrémente, j'affiche et je me mets à "up"
  • si je suis à "up" et que le bouton est à "down", je me mets à down
    C'est tout. Je te laisse le soin d'écrire ton code, car si tu voulait du code tout fait, il y en plein le net.

Par contre, pour les afficheurs, j'utilise des afficheurs 4 chiffres à 7 leds gérés par un TM1637 et la librairie TM1637.h créée par arvishop et dispo sur github, et c'est beaucoup plus facile. J'y ai même déposé une extension de la librairie qui permet encore plus facilement d'afficher beaucoup plus de choses (à téléchager dans les issues pour l'instant).

Merci à tous pour vos suggestions. J’essaie de les appliquer.
Ma tête va exploser, je dois avoir un truc qui cloche dans mon code et montage. J'ai beau chercher et tenter d'appliquer vos aides je n'arrive à rien.

Ce maudit bouton ne fait rien.
Et l'afficheur affiche n'importe quoi.

Je bug :confused:

Ton bouton est mal cablé. Comme déjà dit le plus simple est de le cabler avec le pullup interne.

pullup.png

Il faut aussi de résistances pour limiter le courant dans ton afficheur (et dans les sorties du microprocesseur).

Arrêtes de modifier ton premier post. C'était bien pour mettre ton code entre balises, mais là on ne suit plus du tout la progression du sujet.

pullup.png