bonjour à tous ,
Voici mon souci , qui m'échappe , je souhaite afficher une variable ''Compteur '' sur un afficheur
4 digits 7 segments ( Cathode commune ) et j'utilise 7 résitances de 470 ohms sur chaque Segments .
l'afficheur seul fonctionne , avec un code simple pour afficher un entier à 4 chiffre
Cependant quand j'utilise un code avec un module RFID , pour re créditer la variable compteur
sur le principe tt fonctionne
mais le chiffre des millièmes ( 1er digit ) éclair beaucoup plus que les 3 autres !
avez vous une piste ?
merci d'avance
bonne journée à Tous
#include <SPI.h>
#include <RFID.h>
RFID monModuleRFID(53,48); // broche pin
int UID[5]={};
int MASTERKEY[5]={233,205,0,185,157}; // code badge bleu porte clef
int tpsNote = 30 ;
int pause = 10 ;
int Bouton = A0;
int Led = 3;
int etatbouton;
long temps = 0;
const int ANTIREBOND = 60; // pour l'anti rebond
int memoire_entree = HIGH;
int Compteur = 1000; // credit
////////////////////////////////////////////////afficheur
int digit1 = 36; // digit
int digit2 = 37;
int digit3 = 38;
int digit4 = 39;
int A = 40; // segments
int B = 41;
int C = 42;
int D = 43;
int E = 44;
int F = 45;
int G = 46;
void setup()
{
SPI.begin();
monModuleRFID.init();
pinMode(Bouton,INPUT_PULLUP);
pinMode(Led, OUTPUT);
//////////////////afficheur
pinMode(digit1, OUTPUT) ;
pinMode(digit2, OUTPUT) ;
pinMode(digit3, OUTPUT) ;
pinMode(digit4, OUTPUT) ;
pinMode(A, OUTPUT) ;
pinMode(B, OUTPUT) ;
pinMode(C, OUTPUT) ;
pinMode(D, OUTPUT) ;
pinMode(E, OUTPUT) ;
pinMode(F, OUTPUT) ;
pinMode(G, OUTPUT) ;
//Désactivation de tous les digits
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
}
void loop()
{
setAfficheur(Compteur); // fonction pour afficher la variable ''compteur " sur l'afficheur 4 digits 7 segments cathode commune
etatbouton = digitalRead(Bouton);
if((etatbouton != memoire_entree) && (etatbouton == LOW) && (millis() - temps >= ANTIREBOND) && (Compteur > 0 ) )
{
temps = millis();
Compteur = Compteur - 1 ;
digitalWrite ( Led,HIGH);
delay ( 50 );
}
else {digitalWrite ( Led,LOW); }
memoire_entree=etatbouton;
/////////////////////////////////////////////////////////////////////////////////////
if (monModuleRFID.isCard()) {
if (monModuleRFID.readCardSerial()) {
for(int i=0;i<=4;i++)
{
UID[i]=monModuleRFID.serNum[i];
}
}
if (UID[0] == MASTERKEY[0]
&& UID[1] == MASTERKEY[1]
&& UID[2] == MASTERKEY[2]
&& UID[3] == MASTERKEY[3]
&& UID[4] == MASTERKEY[4])
{
Compteur = 1000; // on remet le compteur à ZERO
for ( int n=0 ; n<3; n++ ) // si c'est ok on bip 3 fois
{
tone(2, 2093);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
tone(2, 2349);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
tone(2, 2637);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
tone(2, 2794);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
tone(2, 3136);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
tone(2, 3520);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
tone(2, 3951);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
tone(2, 4186);
delay ( tpsNote ) ;
noTone ( 2 );
delay ( pause);
delay ( 100 );
}
/////////////////////////////////////////////////
}
else ///////////// sinon pas bonne carte bip grave
{
tone(2, 600);
delay ( 300 ) ;
noTone ( 2 );
delay ( 200 ) ;
}
monModuleRFID.halt();
}
delay(1);
}
/////////////////////////////////////////////////////////////////////////
// Définition des FONCTIONS
//-------------------------------
void setNumber(int nombre) {
switch (nombre) {
case 1 :
digitalWrite(A, 0) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 0) ;
break;
case 2 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 0) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 0) ;
digitalWrite(G, 1) ;
break;
case 3 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 1) ;
break;
case 4 :
digitalWrite(A, 0) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 5 :
digitalWrite(A, 1) ;
digitalWrite(B, 0) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 0) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 6 :
digitalWrite(A, 1) ;
digitalWrite(B, 0) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 7 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 0) ;
break;
case 8 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 9 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 0) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 0 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 1) ;
digitalWrite(G, 0) ;
break;
default:
digitalWrite(A, 0) ;
digitalWrite(B, 0) ;
digitalWrite(C, 0) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 1) ;
break;
break;
}
}
void setDigit(int digit, int nombre) {
switch(digit) {
case 1 :
digitalWrite(digit1, LOW) ;
digitalWrite(digit2, HIGH) ;
digitalWrite(digit3, HIGH) ;
digitalWrite(digit4, HIGH) ;
setNumber(nombre) ;
break;
case 2 :
digitalWrite(digit1, HIGH) ;
digitalWrite(digit2, LOW) ;
digitalWrite(digit3, HIGH) ;
digitalWrite(digit4, HIGH) ;
setNumber(nombre) ;
break;
case 3 :
digitalWrite(digit1, HIGH) ;
digitalWrite(digit2, HIGH) ;
digitalWrite(digit3, LOW) ;
digitalWrite(digit4, HIGH) ;
setNumber(nombre) ;
break;
case 4 :
digitalWrite(digit1, HIGH) ;
digitalWrite(digit2, HIGH) ;
digitalWrite(digit3, HIGH) ;
digitalWrite(digit4, LOW) ;
setNumber(nombre) ;
break;
}
}
void setAfficheur(int nombre) {
int M = nombre/1000, C = (nombre-M*1000)/100, D = (nombre-M*1000-C*100)/10,
U=(nombre-M*1000-C*100-D*10) ;
setDigit(4, U) ;
delay(2);
setDigit(3, D) ;
delay(2);
setDigit(2, C) ;
delay(2);
setDigit(1, M) ;
delay(2);
}