PROJET BAC!!! ---> Vérification de code

Bonjour,
Comme indiqué dans le titre, cette question est à propos d’un projet pour le Bac, libre à vous de continuer, ou non, la lecture. Si vous continuez, merci à vous :slight_smile:

Voilà, je vous expose mon problème : Je dois effectuer une reconnaissance de code secret, à partir d’un code préenregistré, qui doit être tapé sur un clavier. Or, je voulais savoir comment faire pour effectuer cette vérification, s’il vous plaît? Je vous mets le code juste en-dessous, avec les commentaires :

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
//Inclusion des librairies pour initialiser un mot de passe, un clavier et un afficheur externe

lcd.begin(16,2);
//Initialisation du LCD avec 16 colonnes X 2 lignes

Password password = Password( "2703" );
//Déclaration du mot de passe (ici : 2703)

const byte ROWS = 4;
const byte COLS = 3;
//Définition du nombre de lignes (3) et de colonnes (4) du clavier

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
//Représentation approximative du clavier

byte rowPins[ROWS] = {8, 7, 6, 5};
byte colPins[COLS] = {4, 3, 2};
//Déclaration des broches utilisées pour connecter le clavier

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//Effectue une représentation informatique du clavier dans le système de l'arduino

void setup(){
  keypad.addEventListener(keypadEvent);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(9, OUTPUT);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);

}
//Démarre le clavier, active les broches nécessaires pour écrire

void loop(){
  keypad.getKey();
}
//Envoie la valeur des boutons pressés au système pour vérification

void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
    case PRESSED:
  switch (eKey){
    case '*': checkPassword(); password.reset(); break;
    case '#': password.reset(); break;
    default: password.append(eKey);
     }
  }
}
//Reçoit les différents octets correspondant au nombre tapé, les concatène et envoie la valeur pour comparer avec le code programmé


void checkPassword(){
  if (password.evaluate()){
    digitalWrite(11, HIGH);
    digitalWrite(9, HIGH);
    delay(500);
    digitalWrite(9, LOW);
    delay(1500);
    digitalWrite(11, LOW);
  }else{
    digitalWrite(10, HIGH);
    delay(2000);
    digitalWrite(10, LOW);
  }
}
//Compare le code tapé au code programmé

Voilà, donc comment feriez-vous, s’il vous plaît?
Merci d’avance aux personnes qui auront les capacités de m’aider :slight_smile:
Bonne journée à vous

bonjour, tu reprends l'exemple de la lib Password, donc est ce que ca fonctionne ou pas?

Voilà, donc comment feriez-vous, s'il vous plaît?

faire quoi?

infobarquee: tu reprends l'exemple de la lib Password, donc est ce que ca fonctionne ou pas?

Euh, j'avoue que je ne comprends pas, quel exemple? Parce que j'ai utilisé la librairie Password pour répondre aux exigences de mon professeur, mais je ne comprends pas votre question, désolé...

infobarquee: faire quoi?

Comment faire pour effectuer une comparaison entre le code préenregistré (ici 2703) et le code tapé sur le clavier

je reformule vu que tu reprends l'exemple de la lib Password, donc est ce que ca fonctionne ou pas?

Comment faire pour effectuer une comparaison entre le code préenregistré (ici 2703) et le code tapé sur le clavier

la comparaison se fait via la lib, donc il faut aller fouiller dedans pour comprendre

Je n'ai pas eu de message d'erreur à propos du code, donc je suppose (je n'ai pas encore la possibilité de tester le programme sur une platine) que le programme fonctionne. D'accord, donc il y a des lignes que je dois absolument connaître?

Au passage, désolé d'être un noob, mais j'ai peu de connaissances en Arduino, donc c'est assez compliqué pour moi, et par extension, pour vous aussi puisque j'ai du mal à répondre à vos questions.

Bonjour,

Comment tu peux savoir si ton programme fonctionne sans le tester? Ca parait quand même être un minimum de le tester.

Salut,

ce qui me laisse perplexe sur ta question c'est que le code que tu nous a montré ne fonctionnes pas. Ce n'est que le début de quelque chose. Cela m'étonnerais beaucoup que tu ai même réussi à simplement le vérifier comme tu le dis. Ou alors ce que tu as posté n'est pas le bon code.

Je n'ai pas eu de message d'erreur à propos du code,

Pour information tu peux vérifier le code avec l'IDE même si tu n'as pas de platine correspondante (c'est le premier icône en haut ou bien Ctrl R ou bien menu Croquis/Vérifier). Chez moi ç’a plante à la première ligne d’où ma remarque.

Sinon il semble bien que tu as là tous les morceaux (lignes) pour faire ce que tu veux.

D'accord, donc il y a des lignes que je dois absolument connaître?

Je dirais qu'il te faut connaitre toutes les lignes. Mais comme je ne sais pas lesquelles tu ne comprends pas difficile de t'aider.

PROJET BAC!!! ---> Vérification de code

ca veut dire qu'il y a un soucis.

alors qu'en fait, ut n'as pas testé le code, donc tu ne sais pas si ca fonctionne ou non. le mieux est d'avoir le matériel et de tester pour comprendre

landid: Salut,

ce qui me laisse perplexe sur ta question c'est que le code que tu nous a montré ne fonctionnes pas. Ce n'est que le début de quelque chose. Cela m'étonnerais beaucoup que tu ai même réussi à simplement le vérifier comme tu le dis. Ou alors ce que tu as posté n'est pas le bon code.

Pour information tu peux vérifier le code avec l'IDE même si tu n'as pas de platine correspondante (c'est le premier icône en haut ou bien Ctrl R ou bien menu Croquis/Vérifier). Chez moi ç’a plante à la première ligne d’où ma remarque.

J'ai effectué cette opération, et je n'ai eu aucun message d'erreur, mais je n'ai pas eu la possibilité de tester sur une platine car étant arrivé en cours d'année, je n'ai pas encore le matériel dont j'ai besoin, donc je dois faire "à l'aveugle".

landid: Sinon il semble bien que tu as là tous les morceaux (lignes) pour faire ce que tu veux. Je dirais qu'il te faut connaitre toutes les lignes. Mais comme je ne sais pas lesquelles tu ne comprends pas difficile de t'aider.

Décidément je m'exprime mal, mais je voulais dire : y a-t-il des lignes que je n'ai pas intégrées dans le programme, que je dois absolument connaître?

infobarquee: ca veut dire qu'il y a un soucis.

alors qu'en fait, ut n'as pas testé le code, donc tu ne sais pas si ca fonctionne ou non. le mieux est d'avoir le matériel et de tester pour comprendre

Par "Vérification de code", je ne parle pas de vérifier le programme, mais bel et bien le code secret qui sera tapé sur le clavier. Comme expliqué plus haut dans le message, je suis arrivé dans l'établissement il y a peu et je n'ai pas encore le matériel, donc je ne peux pas tester.

Je suis en train de tester, et malgré le fait qu'il n'y ait aucune erreur dans le code, eh bien...rien ne se produit, hormis l'initialisation de l'afficheur, mais quand je tape sur le clavier, rien ne se produit... Donc effectivement, ç'aurait été avantageux que le matériel suive plus vite, parce que je vais devoir finir ça en moins de 3 jours... Vous me disiez donc qu'il n'y avait que le début de quelque chose, mais (sans demander le code entier), quelles étapes manquent à l'appel?

Donc effectivement, ç’aurait été avantageux que le matériel suive plus vite, parce que je vais devoir finir ça en moins de 3 jours…

c’est super de se réveiller quelques jours avant l’exam :slight_smile:
donc tu prends l’exemple de la lib et tu teste.

infobarquee: c'est super de se réveiller quelques jours avant l'exam :)

Bah, comment dire qu'avec le déménagement, j'ai appris 10min avant le dernier post que je passais plus tôt :-/

infobarquee: donc tu prends l'exemple de la lib et tu teste.

Juste avant, je vais devoir régler le problème de montage, et je fais un rapport juste après

1 Like

Bon, rapport : je n'arrive toujours pas à m'en sortir avec les branchements entre les entrées, les sorties et compagnie, et j'ai beau chercher sur internet, il n'y a presque que des claviers 4*4 et des LCDs 80 caractères (à savoir que j'ai uniquement un clavier 3*4 et un LCD 2*16)

Bonjour,

A mon avis tu n'a pas bien cherché. Des scémas de connecxion lcd 16x2 il y en a pléthore par exemple ici en français. Pour le clavier il suffit de regarder sur arduino playground.

J'ai réussi les branchements, mais maintenant j'ai un message d'erreur avec le lcd.begin(16,2) Le message d'erreur est : " 'lcd' does not name a type" exit status 1 'lcd' does not name a type

Quoi qu'est-ce? Pourquoi il ne s'affichait pas avant?

mets ton code entre balise code </>
vérifies que tu as bien la lib installée

#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
//Inclusion des librairies pour initialiser un mot de passe, un clavier et un afficheur externe

lcd.begin(16,2);
//Initialisation du LCD avec 16 colonnes X 2 lignes

Password password = Password( "2703" );
//Déclaration du mot de passe (ici : 2703)

const byte ROWS = 4;
const byte COLS = 3;
//Définition du nombre de lignes (3) et de colonnes (4) du clavier

char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
//Représentation approximative du clavier

byte rowPins[ROWS] = {8, 7, 6, 5};
byte colPins[COLS] = {4, 3, 2};
//Déclaration des broches utilisées pour connecter le clavier

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//Effectue une représentation informatique du clavier dans le système de l'arduino

void setup(){
  keypad.addEventListener(keypadEvent);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(9, OUTPUT);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);

}
//Démarre le clavier, active les broches nécessaires pour écrire

void loop(){
  keypad.getKey();
}
//Envoie la valeur des boutons pressés au système pour vérification

void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
    case PRESSED:
  switch (eKey){
    case '*': checkPassword(); password.reset(); break;
    case '#': password.reset(); break;
    default: password.append(eKey);
     }
  }
}
//Reçoit les différents octets correspondant au nombre tapé, les concatène et envoie la valeur pour comparer avec le code programmé


void checkPassword(){
  if (password.evaluate()){
    digitalWrite(11, HIGH);
    digitalWrite(9, HIGH);
    delay(500);
    digitalWrite(9, LOW);
    delay(1500);
    digitalWrite(11, LOW);
  }else{
    digitalWrite(10, HIGH);
    delay(2000);
    digitalWrite(10, LOW);
  }
}
//Compare le code tapé au code programmé

heuuu

lcd.begin(16,2);

ca se mettrait pas dans le void setup? :)

lcd n'est pas déclaré lcd.begin() doit être dans setup voir http://www.arduino.cc/en/Tutorial/HelloWorld

Je reviens, je vais me mettre en PLS pendant quelques minutes :’(

Plus sérieusement, merci pour l’indication, j’y aurais jamais pensé :-/