J'ai créé un code qui malheureusement ne fonctionne pas malgré mes livres et recherche sur les forums
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();
}
}
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)
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
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.
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
Par contre quand je presse le bouton une fois le 0 est remplacé par les --
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.