Mot de passe (digicode KB12C)

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);
    
}

Merci d’avance pour votre aide !

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");
        }
    }
 }

Bonjour,
j'ai tester votre programme et je n'arrive pas a le faire marché,
et il y a beaucoup de ligne que je comprend pas.
Merci d'avance ! :slight_smile:

tu suis les indications sur le moniteur
tu appuies sur un bp ==> exemple 2
et tu valides par un appui sur le BP#

la meme manip 4 fois
si le code est ok, tu as gagné un mistral

Désoler mais j'ai essayer de plusieurs façon et j'y arrive toujours pas ! :confused:

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 ?

digicode.PNG

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 ! :confused:

Bonjour,

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.