#include <Wire.h>
#include <EEPROM.h> // bibliothèque pour gérer la mise en mémoire
#include <Bounce2.h>
/* GESTION DE 4 74HC595 en série par Arduino */
const byte data_Pin = 10; // Pin de donnée (DS)
const byte verrou_Pin = 11; // Pin de verrouillage (ST_CP)
const byte horloge_Pin = 12; // Pin de l'horloge (SH_CP)
const byte Nombre_74hc595 = 1; // Nombre de 74HC595 en série
const byte numOfRegisterPins = Nombre_74hc595 * 8;
boolean Registres[numOfRegisterPins];
/* ========================================= */
/* pour gérer les servos */
#include <Servo.h>
Servo servoAiguillage;
/* ===================== */
/* POUR LE CLAVIER NUMERIQUE */
Bounce BPclavier = Bounce();
const int dureeAntiRebond = 20;
int CompteurLoop = 0;
/* ======================== */
void setup() {
// Initialiser les pins comme sorties
pinMode(data_Pin, OUTPUT);
pinMode(verrou_Pin, OUTPUT);
pinMode(horloge_Pin, OUTPUT);
BPclavier.attach(22, INPUT_PULLUP);
BPclavier.interval(dureeAntiRebond);
/* Tests des 74HC595 */
for (int i = 0; i < numOfRegisterPins; i++) {
ecritRegistres(i, HIGH);
}
delay(2000);
for (int i = 0; i < numOfRegisterPins; i++) {
ecritRegistres(i, LOW);
}
/* ================= */
// Reset tous les pins du 74HC595
razRegistres();
/* ========================== */
}
void loop() {
// Incrémenter le compteur de boucle
CompteurLoop++;
if (CompteurLoop == numOfRegisterPins) { CompteurLoop = 0; }
// Allumer et éteindre la LED correspondante
ecritRegistres(CompteurLoop, HIGH);
delay(100);
ecritRegistres(CompteurLoop, LOW);
delay(100);
}
void razRegistres() {
// Place tous les pins du 74HC595 à l'état "OFF"
for (int i = 0; i < numOfRegisterPins; i++) {
Registres[i] = LOW;
}
// Met à jour les registres avec les valeurs initialisées
majRegistres();
} // Fin de void razRegistres()
void ecritRegistres(int index, int value) {
// Enregistrer la valeur dans le registre
Registres[index] = value;
// Met à jour les registres avec la nouvelle valeur
majRegistres();
} // Fin de ecritRegistres(int index, int value)
void majRegistres() {
// Mettre à jour et afficher les valeurs dans le registre
digitalWrite(verrou_Pin, LOW);
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
digitalWrite(horloge_Pin, LOW);
digitalWrite(data_Pin, Registres[i]);
digitalWrite(horloge_Pin, HIGH);
}
digitalWrite(verrou_Pin, HIGH);
} // Fin de majRegistres()