Bonjour, je fais un compteur de points mais j'ai un problème avec l'affichage, mes unités s'affichent bien mais le dizaine, centaine et milliers s’effacent.
Merci pour m'aider
Palou72
#include <Keypad.h>
const int COLONNES = 4;
const int LIGNES = 4;
const int C4=8;
const int C3=9;
const int C2=10;
const int C1=11;
const int L4=4;
const int L3=5;
const int L2=6;
const int L1=7;
char touches[LIGNES][COLONNES] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte BrochesLignes[LIGNES] = {7, 6, 5, 4};
byte BrochesColonnes[COLONNES] = {11, 10, 9, 8};
char touche;
unsigned int valeur;
int son= 0;
int soa= 0;
int compte = 0;
String chaine ="";
String chaine2 ="";
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
int a = 46;
int b = 44;
int c = 42;
int d = 40;
int e = 38;
int f = 36;
int g = 34;
int p = 32;
int d4 = 30;
int d3 = 28;
int d2 = 26;
int d1 = 24;
int count = 0;
long n = 0;// n représente la valeur affichée sur l'affichage LED. Par exemple, lorsque n = 0, 0000 est affiché. La valeur maximale est 9999.
int x = 100;
int del = 5;// Définit del comme 5; la valeur est le degré de réglage fin pour l'horloge
void setup()
{
Serial.begin(115200);
//régler toutes les broches de l'affichage LED en sortie
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
}
void loop()
{
while (true){
char touche = clavier.getKey();
if (touche != NO_KEY){
if (touche == 'A'){
chaine ="A";
compte = 1;
}
int valeur = touche - 48;
Serial.println(valeur);
if ((valeur>=1) && (valeur<=7)){
compte=compte+1 ;
if (chaine =="A"){
soa = soa + valeur;
n=soa;
Serial.println(soa);
}
chaine2= chaine+touche;
if (compte==2){
Serial.println(chaine2);
break;//fin while
}
}
}// no key
}//fin while
Serial.println(chaine2);
Serial.println(n);
clearLEDs();//efface l'écran d'affichage à 7 segments
pickDigit(0);//Allumez 7 segments d'affichage d1
pickNumber((n/1000));// get the value of thousand
delay(del);
clearLEDs();
pickDigit(1);
pickNumber((n%1000)/100);
delay(del);
clearLEDs();
pickDigit(2);
pickNumber((n%100)/10);
delay(del);
clearLEDs();
pickDigit(3);
pickNumber((n%10));//Get the value of single digit
delay(del);
}// fin de loop
/**************************************/
void pickDigit(int x) //allumer un affichage à 7 segments
{
// L'affichage LED à 7 segments est un écran à cathode commune. Donc, utilisez aussi digitalWrite pour régler d1 aussi haut et la LED s'éteindra
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch(x)
{
case 0:
digitalWrite(d1, LOW);//Light d1 up
break;
case 1:
digitalWrite(d2, LOW); //Light d2 up
break;
case 2:
digitalWrite(d3, LOW); //Light d3 up
break;
default:
digitalWrite(d4, LOW); //Light d4 up
}
}
//La fonction est de contrôler l'affichage LED à 7 segments pour afficher les numéros. Ici x est le nombre à afficher. C'est un nombre entier de 0 à 9
void pickNumber(int x)
{
switch(x)
{
default:
zero();
break;
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
five();
break;
case 6:
six();
break;
case 7:
seven();
break;
case 8:
eight();
break;
case 9:
nine();
break;
}
}
void clearLEDs() //clear the 7-segment display screen
{
if (chaine == "A") {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(p, LOW);
}
void zero() //l'affichage à led à 7 segments 0
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
}
void one() // 1
{
if (chaine == "A") {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
}
void two() // 2
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
}
void three() // 3
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
}
void four() // 4
{
if (chaine == "A") {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
}
void five() // 5
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
}
void six() // 6
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
}
void seven() // 7
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
}
void eight() // 8
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
}
void nine() // 9
{
if (chaine == "A") {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
}