Bonjour tout le monde! C'est la première fois que j'écris sur ce forum mais là je suis vraiment en grosse difficulté J'ai comme projet de faire un prototype de distributeur à codes de mini-bouteilles de gel hydroalcoolique, qui pourrait par exemple être mis dans une entreprise pour les employés. Il fonctionnerait de la sorte: un keypad permet d'entrer son code (dans mon programme j'en ai référencé 3, c'est juste un prototype), si le code est bon, un moteur pas à pas de met en route, fait tourner une vis sans fin et la bouteille tombe. Cependant, vue que cela serait mis à disposition de beaucoup de personnes, il faut éviter les abus. C'est pourquoi je voudrais que quand la personne utilise son code, sa bouteille tombe mais ensuite elle doit attendre 24h avant de pouvoir le réutiliser! En fait, son code doit se "désactiver" pendant 24h, dans mon projet actuel je voudrais symboliser ces 24h par 30s. J'ai tout essayé, delay(), qui ne peut pas fonctionner car il fait une pause dans tout mon programme mais je ne peux pas car les autres "employés" dont le code n'a pas encore été utilisé dans les 30 secondes doivent encore pouvoir se servir... Pour le millis(), je n'ai également rien trouvé de concluent...
Dans le code dont je vais vous faire part, mon programme fait déjà: accepte les 3 codes définis et écrit sur mon lcd "Code:", "Code:****" lorsqu'on a tapé et ensuite "Code bon" ou "Mauvais code" avant que le lcd se clear et reviennent à "Code:".
Je vous remercie d'avance pour l'aide que vous m'apporterez :-*
#define ligne_0 2 //ici on définit sur quelle pin est branchée chaque ligne
#define ligne_1 3
#define ligne_2 4
#define ligne_3 5
#define colonne_0 8 // pareil mais pour les colonnes
#define colonne_1 9
#define colonne_2 10
#define colonne_3 11
// section lcd
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
Serial.begin(9600);
pinMode(ligne_0,OUTPUT); //on déclare que les lignes sont des sorties
pinMode(ligne_1,OUTPUT);
pinMode(ligne_2,OUTPUT);
pinMode(ligne_3,OUTPUT);
pinMode(colonne_0,INPUT_PULLUP); //on déclare que les colonnes sont des entrées avec résistance de pull-up
pinMode(colonne_1,INPUT_PULLUP);
pinMode(colonne_2,INPUT_PULLUP);
pinMode(colonne_3,INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Code:");
}
void loop()
{
int taille_codes = 4;
char code_employe1[taille_codes] = {'1','2','3','4'}; //tableau qui contient les caracts du code secret
char code_employe2[taille_codes] = {'A','B','C','D'};
char code_employe3[taille_codes] = {'*','2','3','4'};
char code_tape[taille_codes] = {0}; //tableau qui contient les caracts du code tapé
for (int nb_caract=0; nb_caract < taille_codes; nb_caract++)
{
code_tape [nb_caract] = bouton_ok();
lcd.setCursor(nb_caract +5,0);
lcd.print ('*');
}
boolean code_bon = true;
for (int caseX = 0; caseX < taille_codes; caseX++) //on va comparer les cases jumelles des 2 tableaux et voir si les mêmes caracts s'y trouvent
{
if (code_employe1[caseX] != code_tape[caseX] && code_employe2[caseX] != code_tape[caseX] && code_employe3[caseX] != code_tape[caseX])
{
code_bon = false;
break;
}
}
if (code_bon == true)
{
lcd.setCursor (4,1);
lcd.print("Code bon");
delay(1000);
lcd.clear();
lcd.print("Code:");
}
else
{
lcd.setCursor (2,1);
lcd.print("Mauvais code");
delay(1000);
lcd.clear();
lcd.print("Code:");
}
}
char bouton_ok()
{
char bouton = NULL;
do
{
bouton = bouton_appuye ();
}
while (bouton == NULL);
delay (100);
while (bouton_appuye()!= NULL);
delay (100);
return bouton;
}
char bouton_appuye()
{
const char boutons [4][4] = {'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'};
for (int ligne=0;ligne<4;ligne++)
{
digitalWrite(ligne_0, ligne == 0 ? LOW : HIGH);
digitalWrite(ligne_1, ligne == 1 ? LOW : HIGH);
digitalWrite(ligne_2, ligne == 2 ? LOW : HIGH);
digitalWrite(ligne_3, ligne == 3 ? LOW : HIGH);
int etat_colonne_0 = digitalRead(colonne_0);
int etat_colonne_1 = digitalRead(colonne_1);
int etat_colonne_2 = digitalRead(colonne_2);
int etat_colonne_3 = digitalRead(colonne_3);
if (etat_colonne_0 == LOW)
{
return boutons [ligne][0];
}
if (etat_colonne_1 == LOW)
{
return boutons [ligne][1];
}
if (etat_colonne_2 == LOW)
{
return boutons [ligne][2];
}
if (etat_colonne_3 == LOW)
{
return boutons [ligne][3];
}
}
return NULL;
}