#include <TimerOne.h>
// Broches de l'afficheur 7 segments pour le premier afficheur
#define A_1 22
#define B1 23
#define C1 24
#define D1 25
#define E1 26
#define F1 27
#define G1 28
#define DP1 29 // Point décimal 1
// Broches de l'afficheur 7 segments pour le deuxième afficheur
#define A_2 30
#define B2 31
#define C2 32
#define D2 33
#define E2 34
#define F2 35
#define G2 36
#define DP2 37 // Point décimal 2
// Broches des capteurs
#define pinCapteur1 14
#define pinCapteur2 15
long n1 = 0; // Nombre pour le premier afficheur
long n2 = 0; // Nombre pour le deuxième afficheur
bool lastState1 = HIGH; // État précédent du capteur 1
bool lastState2 = HIGH; // État précédent du capteur 2
#define a 5
#define b 6
#define c 7
#define d 8
#define e 9
#define f 10
#define g 11
#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4
long n = 0;
int x = 100;
int count = 0;
void setup() {
{
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(A0, INPUT);
Timer1.initialize(100000);
Timer1.attachInterrupt(add);
}
{
// Initialisation des broches pour le premier afficheur
pinMode(A_1, OUTPUT);
pinMode(B1, OUTPUT);
pinMode(C1, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(E1, OUTPUT);
pinMode(F1, OUTPUT);
pinMode(G1, OUTPUT);
pinMode(DP1, OUTPUT);
// Initialisation des broches pour le deuxième afficheur
pinMode(A_2, OUTPUT);
pinMode(B2, OUTPUT);
pinMode(C2, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(F2, OUTPUT);
pinMode(G2, OUTPUT);
pinMode(DP2, OUTPUT);
// Configuration des capteurs en entrée avec résistance de tirage
pinMode(pinCapteur1, INPUT_PULLUP);
pinMode(pinCapteur2, INPUT_PULLUP);
// Initialisation du temporisateur avec une période de 100 ms
Timer1.initialize(100000);
Timer1.attachInterrupt(add);
}
}
void loop() {
while (digitalRead(A0) == LOW) {
clearLEDs();
pickDigit(0);
pickNumber((n / 1000));
delay(5);
clearLEDs();
pickDigit(1);
pickNumber((n % 1000) / 100);
delay(5);
clearLEDs();
pickDigit(2);
pickNumber(n % 100 / 10);
delay(5);
clearLEDs();
pickDigit(3);
pickNumber(n % 10);
delay(5);
}
if (digitalRead(A0) == HIGH) {
n = 0;
count = 0;
}
}
void pickDigit(int x) {
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch (x) {
case 0: digitalWrite(d1, LOW); break;
case 1: digitalWrite(d2, LOW); break;
case 2: digitalWrite(d3, LOW); break;
default:
digitalWrite(d4, LOW);
break;
}
}
// Fonction pour choisir quel chiffre afficher sur le premier afficheur
void pickNumber1(int x) {
switch (x) {
case 0: zero(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 1: one(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 2: two(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 3: three(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 4: four(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 5: five(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 6: six(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 7: seven(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 8: eight(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
case 9: nine(A_1, B1, C1, D1, E1, F1, G1, DP1); break;
}
}
// Fonction pour choisir quel chiffre afficher sur le deuxième afficheur
void pickNumber2(int x) {
switch (x) {
case 0: zero(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 1: one(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 2: two(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 3: three(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 4: four(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 5: five(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 6: six(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 7: seven(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 8: eight(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
case 9: nine(A_2, B2, C2, D2, E2, F2, G2, DP2); break;
}
}
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() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void zero() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void one() {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void two() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void three() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void four() {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void five() {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void six() {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void seven() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void eight() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void nine() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// Fonction pour éteindre tous les segments de l'afficheur
void clearLEDs12() {
digitalWrite(A_1, HIGH);
digitalWrite(B1, HIGH);
digitalWrite(C1, HIGH);
digitalWrite(D1, HIGH);
digitalWrite(E1, HIGH);
digitalWrite(F1, HIGH);
digitalWrite(G1, HIGH);
digitalWrite(DP1, HIGH);
digitalWrite(A_2, HIGH);
digitalWrite(B2, HIGH);
digitalWrite(C2, HIGH);
digitalWrite(D2, HIGH);
digitalWrite(E2, HIGH);
digitalWrite(F2, HIGH);
digitalWrite(G2, HIGH);
digitalWrite(DP2, HIGH);
}
// Fonctions pour afficher les chiffres sur les afficheurs
void zero(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void one(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void two(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void three(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void four(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void five(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void six(int A, int B, int C, int D, int E, int F, int G, int DP) {
// void six(byte A, byte B, byte C, byte D, byte E, byte F, byte G, byte DP) {
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void seven(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void eight(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void nine(int A, int B, int C, int D, int E, int F, int G, int DP) {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, HIGH);
}
void add()
{
bool currentState1 = digitalRead(pinCapteur1); // Lire l'état actuel du capteur 1
bool currentState2 = digitalRead(pinCapteur2); // Lire l'état actuel du capteur 2
if (currentState1 == LOW && lastState1 == HIGH) { // Vérifier si le capteur 1 vient d'être activé
n1++;
if (n1 > 9) {
n1 = 0; // Revenir à 0 après 9
}
}
lastState1 = currentState1; // Mettre à jour l'état précédent du capteur 1
if (currentState2 == LOW && lastState2 == HIGH) { // Vérifier si le capteur 2 vient d'être activé
n2++;
if (n2 > 9) {
n2 = 0; // Revenir à 0 après 9
}
}
lastState2 = currentState2; // Mettre à jour l'état précédent du capteur 2
// Mettre à jour le chiffre affiché sur le premier afficheur
clearLEDs();
pickNumber1(n1);
// Mettre à jour le chiffre affiché sur le deuxième afficheur
pickNumber2(n2);
count++;
if (count == 10) {
count = 0;
n++;
if (n == 10000) { n = 0; }
}
}