Bonjour cher Forum Arduino,
J'ai créé un bout de code pour un système de badges avec crédit qui fonctionne très bien actuellement.
Je n'arrive pas à simplifier le code en utilisant un tableau pour les crédits, afin de remplacer "credit_B1","credit_B2",...,"credit_B10" dans une seule variable.
Merci d'avance pour l'aide que vous pourrez m'apporter
voici le bout de code :
//Déclaration des Librairies et PIN....
// Déclaration des constantes liées au délai
unsigned long previousMillis = 0;
// Déclaration des constantes liées au bouton et au crédit
int credit_min = 0; // Variable crédit minimum
byte tagok = 0; // Variable pour différencier les types de Badge
int credit_B1 = 5; // Nombre de crédit Badge 1
int credit_B2 = 5; // Nombre de crédit Badge 2
int credit_B3 = 5; // Nombre de crédit Badge 3
//etc.... jusqu'à 10 badges différents....
//------------------------------------------------------------------------------------//
//------------------------------ DEFINITION DES VARIABLES --------------------------//
//------------------------------------------------------------------------------------//
//Permet d'afficher les chiffres sur le 7 segment
const byte digit[11] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11100110, // 9
B00000000 // clean
};
//---------------------------------------------------//
// Code des Badges
unsigned long sernum[13] = {0, //poste 0 N° badge lue
1669386246, //Badge 1
3009123561, //Badge 2
3009327833, //Badge 3
0, //Badge 4
0, //Badge 5
0, //Badge 6
0, //Badge 7
0, //Badge 8
0, //Badge 9
0, //Badge 10
0, //Badge 11
2778220336}; //Carte Master(12)
//------------------------------------------------------------------------------------//
//---------------------- INITIALISATION DE LA CARTE ET DES SORTIES -------------------//
//------------------------------------------------------------------------------------//
void setup()
{
Serial.begin(9600); // Initialiser communication avec le serial
//.......
Serial.println("Présentez votre badge sur le lecteur ...");
}
//------------------------------------------------------------------------------------//
//-------------------------------- PROGRAMME ---------------------------------------//
//------------------------------------------------------------------------------------//
void loop()
{
// Détecte la présence d'un badge devant le RFID
if ( ! rfid.PICC_IsNewCardPresent()) {
return; }
// Lecture du badge pour réccupérer son UID
if ( ! rfid.PICC_ReadCardSerial()) {
return; }
//Afficher l'UID sur le moniteur série
Serial.print("UID Badge [");
String content= "";
for (byte i = 0; i < rfid.uid.size; i++)
{ //Converti UID Binaire en Hexa
content.concat(String(rfid.uid.uidByte[i], HEX));
}
//Compare le UID lu avec ceux du tableau de codes déjà enregistré
sernum[0] = *((unsigned long *)rfid.uid.uidByte);
Serial.print(sernum[0]);
Serial.print("] ");
tagok = 0;
for (byte i = 1; i < 12; i++) {
if (sernum[0] == sernum[i]) tagok = 1; // badge reconnue dans le tableau
}
if (sernum[0] == sernum[12]) tagok = 255; // carte master reconnue
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII BADGE NON RECONNU IIIIIIIIIIIIIIIIIIIIIIIIIIIIII//
if (tagok == 0)
{
Serial.println("Bagge INCONNU");
Serial.println();
LED_Rouge(); //void pour allumer led rouge+Buzzer
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII BADGE RECONNU IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII//
if (tagok == 1 )
{
Serial.print("Badge OK");
previousMillis = millis(); //RESET le temps pour la boucle while
//00000000000000000000000000000000 sernum[1] 00000000000000000000000000000000//
if (sernum[0] == sernum[1]) { // Affiche Nom du Badge et Crédit sur Moniteur
Serial.println(" - Badge 1 ");
Serial.print("Credits= ");
Serial.println(credit_B1); // Affiche le crédit lié au badge 1
byte chiffre = digit[credit_B1]; // Affiche Crédit restant du badge sur le 7 segment
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, chiffre);
digitalWrite(latchPin, HIGH);
LED_Verte(); //void pour allumer led verte+Buzzer
if (credit_B1==0) { //Si credit vide alors erreur
LED_Rouge();
}
else {
// Attend appui sur le bouton pour décompter
while ((sernum[0] == sernum[1]) && (millis() - previousMillis < 10000)) {
if(digitalRead(bouton_play)==HIGH){
if (credit_B1!=credit_min){
credit_B1--; //si appui sur le bouton alors décompte crédit badge 1
// Affiche Nouveau Crédit restant sur le badge
Serial.print("New credits= ");
Serial.println(credit_B1);
byte chiffreMoins = digit[credit_B1]; // Affiche New Crédit restant du badge sur le 7 segment
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, chiffreMoins);
digitalWrite(latchPin, HIGH);
LED_Bleu(); //void pour allumer led bleu+Buzzer
break;
}
}
if ((digitalRead(bouton_play)==LOW) && (millis() - previousMillis > 10000)){
break;
} } } }
//00000000000000000000000000000000 sernum[2] 00000000000000000000000000000000//
//idem.....
//00000000000000000000000000000000 sernum[3] 00000000000000000000000000000000//
// idem.....
//00000000000000000000000000000000 sernum[4] 00000000000000000000000000000000//
//idem.....
//etc......
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII CARTE MASTER IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII//
if (tagok == 255)
{
if (sernum[0] == sernum[12]) Serial.println("- Carte MASTER");
//Allume LED VERTE puis BLEU + Double Buzzer son OK + ...
}
delay(2000);
clean_7seg(); // on éteint le 7 segment
}