Bonjour,
Je suis en projet SIN pour le bac et je dois faire un mot de passe, seulement je suis bloqué depuis plusieurs séances et je n'y arrive plus du tout. >:(
Le problème avec ce digicode, c'est que je peux utiliser aucune librairie donc c'est bien plus dure et je suis pas très bon en arduino.
J'aimerai faire un code a 4 chiffres : 2589.
Sauf que je n'arrive pas a faire un mot de passe avec plusieurs chiffres qui se suivent.
Mon programme :
int etoile = 3;
int sept = 4;
int quatre = 5;
int un = 6;
int zero = 7;
int huit = 8;
int cinq = 9;
int deux = 10;
int diese = 11;
int neuf = 12;
int six = 13;
int trois = 2;
int phase = 0;
int code1 = 2;
int code2 = 5;
int code3 = 8;
int code4 = 9;
int pass = 0;
int save = 0;
int beta = 0;
void setup() {
Serial.begin(9600);
pinMode(etoile, INPUT);
pinMode(sept, INPUT);
pinMode(quatre, INPUT);
pinMode(un, INPUT);
pinMode(zero, INPUT);
pinMode(huit, INPUT);
pinMode(cinq, INPUT);
pinMode(deux, INPUT);
pinMode(diese, INPUT);
pinMode(neuf, INPUT);
pinMode(six, INPUT);
pinMode(trois, INPUT);
}
void loop() {
if (digitalRead(zero) == 1)
{
Serial.println("0");
save = 0 ;
phase = phase + 1;
delay (250);
}
if (digitalRead(un) == 1)
{
Serial.println("1");
save = 1 ;
phase = phase + 1;
delay (250);
}
if (digitalRead(deux) == 1)
{
Serial.println("2");
save = 2 ;
phase = phase + 1;
delay (250);
}
if (digitalRead(trois) == 1)
{
Serial.println("3");
save = 3;
phase = phase + 1;
delay (250);
}
if (digitalRead(quatre) == 1)
{
Serial.println("4");
save = 4;
phase = phase + 1;
delay (250);
}
if (digitalRead(cinq) == 1)
{
Serial.println("5");
save = 5;
phase = phase + 1;
delay (250);
}
if (digitalRead(six) == 1)
{
Serial.println("6");
save = 6;
phase = phase + 1;
delay (250);
}
if (digitalRead(sept) == 1)
{
Serial.println("7");
save = 7;
phase = phase + 1;
delay (250);
}
if (digitalRead(huit) == 1)
{
Serial.println("8");
save = 8;
phase = phase + 1;
delay (250);
}
if (digitalRead(neuf) == 1)
{
Serial.println("9");
save = 9;
phase = phase + 1;
delay (250);
}
if (digitalRead(etoile) == 1)
{
Serial.println("*");
phase = phase + 1;
delay (250);
}
if (digitalRead(diese) == 1)
{
Serial.println("#");
phase = phase + 1;
delay (250);
}
if (phase == 1)
{
if (code1 == save)
{
pass = pass + 1;
}
}
if (phase == 2)
{
if (code2 == save)
{
pass = pass + 1;
}
}
if (phase == 3)
{
if (code3 == save)
{
pass = pass + 1;
}
}
if (phase == 4)
{
if (code4 == save)
{
pass = pass + 1;
}
}
if (beta == 4 ){
Serial.println(">CODE REUSSI<");
phase = 0;
beta = 0;
pass = 0;
delay (2000);
}
if ( pass == 2 )
{
Serial.println("premier code");
beta==beta+1;
pass=0;
}
if ( pass == 5 )
{
Serial.println("deuxième code");
beta==beta+1;
pass=0;
}
if ( pass == 8 )
{
Serial.println("troisième code");
beta==beta+1;
pass=0;
}
if ( pass == 9 )
{
Serial.println("quatrième code");
beta==beta+1;
pass=0;
}
if (phase == 5)
{
phase = 0;
beta = 0;
pass = 0;
}
Serial.println (phase);
delay(50);
//Serial.println (pass);
}
hello
voici une ébauche fonctionnelle, à toi de fignoler
attention ton câblage est modifié
il faut ouvrir le moniteur en 9600bauds
//les BP seront reliés à GND et une entrée arduino
//un appui sur BP portera l'entree correspondante à GND
//contantes
//rx reserve 0//reserve com serie
//tx reserve 1//reserve com serie
const byte un = 13;//entree pour BP representant le chiffe "1"
const byte deux = 2;//entree pour BP representant le chiffe "2"
const byte trois = 3;//entree pour BP representant le chiffe "3"
const byte quatre = 4;//entree pour BP representant le chiffe "4"
const byte cinq = 5;//entree pour BP representant le chiffe "5"
const byte six = 6;//entree pour BP representant le chiffe "6"
const byte sept = 7;//entree pour BP representant le chiffe "7"
const byte huit = 8;//entree pour BP representant le chiffe "8"
const byte neuf = 9;//entree pour BP representant le chiffe "9"
const byte zero = 10;//entree pour BP representant le chiffe "0"
const byte etoile = 11;//entree pour BP representant "*"
const byte diese = 12;//entree pour BP representant "#"
//variables
byte sortie = 0;
byte k = 0;
byte f = 0;
byte ok = 0;
byte tentatives = 0;
byte code_saisi[5];
byte code_attendu[]{2,5,8,9};//c'est ici pour changer le code
void setup()
{
Serial.begin(9600);
for (f = 2;f < 14;f++){pinMode(f, INPUT_PULLUP);}
}
void loop()
{
if(tentatives>3){Serial.println("c est termine. vous avez entre 3 mauvais codes");while(1);}//le while bloque le prg pour limiter le nombre de saisies à 3
ok = 0;
for ( k = 0;k < 4;k++){balayageBP();}//saisie des 4 chiffres
ctrl_code();//controle validite
tentatives++;
if (ok == 4){Serial.println("code OK, soyez le bienvenu");}
else{Serial.println("code faux");}
}
void balayageBP()
{
sortie=15;
Serial.println("apuyez sur un BP chiffre");
do
{
for ( f = 2;f<14;f++)
{
if (!digitalRead(f)){sortie=f;}
}
}while (sortie>=15);
Serial.println("apuyez sur le BP diese");
switch (sortie)
{
case 2:code_saisi[k]= 2;break;//deux
case 3:code_saisi[k]= 3;break;//trois
case 4:code_saisi[k]= 4;break;//quatre
case 5:code_saisi[k]= 5;break;//cinq
case 6:code_saisi[k]= 6;break;//six
case 7:code_saisi[k]= 7;break;//sept
case 8:code_saisi[k]= 8;break;//huit
case 9:code_saisi[k]= 9;break;//neuf
case 10:code_saisi[k]= 0;break;//zero
case 11:code_saisi[k]=11;break;//etoile
case 12:code_saisi[k]=12;break;//diese
case 13:code_saisi[k]= 1;break;//un
default: break;
}
while(digitalRead(diese)){};delay(1000);
Serial.print("code ");Serial.print(code_saisi[k]);Serial.println(" saisi");
}
void ctrl_code()
{
for ( f = 0;f<4;f++)
{
if (code_saisi[f]==code_attendu[f])
{
ok++;
Serial.print("code ");Serial.print(f+1);Serial.println(" valide");
}
else
{
Serial.print("code ");Serial.print(f+1);Serial.println(" non valide");
}
}
}
alors:
je viens de récupérer le code que je t'avais posté
je l'ai collé dans un nouveau projet
je l'ai compilé et téléversé
j'ai ouvert le moniteur en 9600 bauds
je l'ai exécuté en suivant ce qui est écrit sur le moniteur
j'ai donc pressé le BP 2
puis le BP #
puis même chose pour 5,#,8,#,9#
voir la copie d'écran ci jointe
tu as bien revu le cablage de tes BP pour qu'il soit conforme aux déclarations dans le prg ?
Bonjour,
j'ai remodifier tous les câblages de mes BP et ca marche toujours pas,
ca m'affiche "code 1 saisi" tout le temps et a la fin ca me marque tout le temps ca :
" code 1 saisi
code 1 non valide
code 2 non valide
code 3 non valide
code 4 non valide
code faux "
Et pourtant j'ai fais les bon câblages normalement,
donc je comprend pas !
Si ça t'affiche toujours "code 1 saisi", tu prends ton multimètre et tu vérifie la tension sur l'entrée reliée au bouton 1. Tu dois avoir 5V (environ) sans appuyer et 0V en appuyant.