const int buttonPins[5] = {3, 4, 5, 6}; // Broches des boutons
int buttonStates[4]; // États des boutons
const int ledPins[4] = {8,9,10,11};
int greenledPin = 12;
struct agents {
char nom[2];
int code;
};
agents tableau[16] = {
{"A", 601}, {"B", 619}, {"C", 631}, {"D", 641},
{"E", 647}, {"F", 653}, {"H", 661}, {"I", 673},
{"J", 691}, {"K", 701}, {"L", 733}, {"M", 739},
{"N", 751}, {"O", 797}, {"P", 809}, {"Q", 822},
};
void lederreur(){
int nombre = 0;
while (nombre < 3){
delay(1000);
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], LOW);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[3], LOW);
delay(1000);
digitalWrite(ledPins[0], HIGH);
digitalWrite(ledPins[1], HIGH);
digitalWrite(ledPins[2], HIGH);
digitalWrite(ledPins[3], HIGH);
nombre++;
}
}
int SECU1(){
[Link]("Etape 1 :");
if (mA1() == 1) {
[Link]("Etape 3 :");
if (mA3() == 1) {
[Link]("ouverture coffre");
}
}
}
int SECU2(){
[Link]("Etape 1 :");
if (mA1() == 1) {
[Link]("Etape 4 :");
if (mA4() == 1) {
[Link]("ouverture coffre");
}
}
}
int SECU3(){
[Link]("Etape 2 :");
if (mA2() == 1) {
[Link]("Etape 4 :");
if (mA4() == 1) {
[Link]("ouverture coffre");
}
}
}
int SECU4(){
[Link]("Etape 1 :");
if (mA1() == 1) {
[Link]("Etape 2 :");
if (mA2() == 1) {
[Link]("Etape 3 :");
if (mA3() == 1) {
[Link]("Etape 4 :");
if (mA4() == 1) {
[Link]("ouverture coffre");
}
}
}
}
}
int SECU5(){
[Link]("Etape 1 :");
if (mA1() == 1) {
[Link]("Etape 2 :");
if (mA2() == 1) {
[Link]("Etape 3 :");
if (mA3() == 1) {
[Link]("Etape 4 :");
if (mA4() == 1) {
[Link]("Etape 5 :");
if (MA5() == 1) {
[Link]("La porte s'ouvre");
}
}
}
}
}
}
void setup() {
[Link](9600);
for (int i = 0; i < 4; i++)
{
pinMode(buttonPins[i], INPUT_PULLUP);
pinMode(ledPins[i], OUTPUT); // Initialiser les broches des LEDs comme
sorties
pinMode(greenledPin, OUTPUT);
digitalWrite(ledPins[i], HIGH); // Éteindre toutes les LEDs au début
digitalWrite(greenledPin, HIGH);
}
SECU5();
}
void loop() {
// Nous somme dans le coffre, tout est dans le setup
}
int readButtons() {
int value = 0;
for (int i = 0; i < 4; i++)
{
if (digitalRead(buttonPins[i]) == LOW) {
value = i + 1;
break;
}
}
while (value == 0) {
// Attendre que l'utilisateur appuie sur un bouton
for (int i = 0; i < 4; i++)
{
if (digitalRead(buttonPins[i]) == LOW) {
value = i + 1;
break;
}
}
}
delay(200); // Anti-rebond
return value;
}
int mA1() {
int v1 = 0;
int reponse, reponse2;
[Link]("De quelle couleur est lE LOGO CESI ?");
[Link]("1: Rouge");
[Link]("2: Vert");
[Link]("3: Jaune");
[Link]("4: Blanc");
reponse = readButtons();
if (reponse == 3) {
[Link]("Comment s'appelle l'agent K ?");
[Link]("1 : Kilian");
[Link]("2 : Kirikou");
[Link]("3 : Konan");
[Link]("4 : Karl");
reponse2 = readButtons();
if (reponse2 == 4) {
[Link]("Accès autorisé");
v1 = 1;
} else {
[Link]("Accès refusé");
}
} else {
[Link]("Accès refusé");
}
return v1;
}
int mA2() {
int erreur = 0;
int v2 = 0;
int tab[4] = {1, 2, 3, 4};
int saisi;
bool ouvert = false;
while (!ouvert) {
[Link]("Veuillez entrer votre mot de passe (4 chiffres) :");
for (int i = 0; i < 4; i++) {
saisi = readButtons();
if (saisi == tab[i]) {
[Link]("Correct");
digitalWrite(ledPins[i], LOW);
} else {
[Link]("Incorrect, veuillez recommencer");
erreur = erreur + 1;
lederreur();
if (erreur == 3){
[Link]("Coffre bloqué");}
return v2;
break;
}
if (i == 3) {
ouvert = true;
digitalWrite(greenledPin, LOW);
delay(3000);
digitalWrite(greenledPin, HIGH);
for (int i = 0; i < 4; i++)
{
digitalWrite(ledPins[i], HIGH);
}
for (int j = 0; j < 4; j++)
{
tab[j] = random(1, 5); // Nouveau mot de passe aléatoire
entre 1 et 4
}
[Link]("Votre nouveau mot de passe est : ");
for (int j = 0; j < 4; j++)
{
[Link](tab[j]);
}
[Link]();
v2 = 1;
}
}
}
return v2;
}
int mA3() {
int v3 = 0;
String input;
[Link]("Veuillez présenter votre oeil (True/False) :");
while ([Link]() == 0);
input = [Link]('\n');
[Link]();
if (input == "true"){
[Link]("Valider");
v3 = 1;
}
else{
[Link]("ERREUR");}
return v3;
}
int mA4() {
int v4 = 0;
String input;
[Link]("Veuillez présenter votre main (True/False) :");
while ([Link]() == 0);
input = [Link]('\n'); // Lit l'entrée jusqu'à un saut de ligne
[Link](); // Supprime les espaces et les sauts de ligne superflus
if (input == "true") {
[Link]("Commande reçue : true");
[Link]("Valider");
v4 = 1;
} else {
[Link]("Entrée incorrecte, essayez encore.");
}
return v4;
}
int MA5() {
int v5= 0;
while (![Link]()){}
char input = [Link](); // Lire la lettre
input = toupper(input); // Assurez-vous que la lettre est en majuscule
[Link]("Lettre reçue : ");
[Link](input);
int index = -1; // Index de la lettre trouvée dans le tableau
for (int i = 0; i < 16; i++) {
if (tableau[i].nom[0] == input) {
index = i;
break;
}
}
if (index != -1) {
[Link]("Correct ! Tapez le code associé.");
while ([Link]() == 0) {
// Attente d'une saisie
}
int enteredCode = [Link](); // Lire le code entré par
l'utilisateur
if (enteredCode == tableau[index].code) {
[Link]("Code correct !");
v5 = 1;
} else {
[Link]("Erreur : Code incorrect !");
}
} else {
[Link]("Erreur : Lettre inconnue.");
}
return(v5);
}