[Arduino] Keypad / clavier 16 boutons avec Arduino. (2/2) - Protéger un message par un code secret.
ฝัง
- เผยแพร่เมื่อ 15 พ.ย. 2024
- Seconde vidéo sur le clavier 16 boutons avec Arduino.
On va dans un premier temps créer les fonctions permettant de récupérer le bouton qui a été appuyé. Ensuite, on fera un programme permettant d'afficher un message secret si le code est correct.
Le message d'erreur :
Vous n'avez pas dit le mot magique ( • Vous n'avez pas dit le... )
Le message secret :
,
, ;:._.-`''.
;.;'.;` _ `.
',;` ( \ ,`-.
`:.`, (_/ ;\ `-.
';: / `. `-._
`;.;' `-,/ . `-.
';;' _ `^` `.
';; ,'-' `--._ ;
': `;; ,; `. ':`,,.__,,_ /
`;`:;`;:` ,; '. ;, ';';':';;`
.,; ' '-._ `':.;
.:; ` '._ `';;,
;:` ` :'`' ',__.)
`;:;:.,...;'`'
';. '`'::'`'' .'`'
,' `';;:,..::;`'`'
, .;` `'::''`
,`;`.
• Jurassic Park helicopt...
Le code :
#define ligne_0 2
#define ligne_1 3
#define ligne_2 4
#define ligne_3 5
#define colonne_0 8
#define colonne_1 9
#define colonne_2 10
#define colonne_3 11
void setup() {
// put your setup code here, to run once:
// Initialise le port série
Serial.begin(9600);
// On configure les lignes en sorties
pinMode(ligne_0, OUTPUT);
pinMode(ligne_1, OUTPUT);
pinMode(ligne_2, OUTPUT);
pinMode(ligne_3, OUTPUT);
// On configure les colonnes en entrées avec pull-up
pinMode(colonne_0, INPUT_PULLUP);
pinMode(colonne_1, INPUT_PULLUP);
pinMode(colonne_2, INPUT_PULLUP);
pinMode(colonne_3, INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
int taille_du_code_secret = 4;
char code_secret[taille_du_code_secret] = {'D', 'A', '0', '4'};
char code_tape[taille_du_code_secret] = {0};
for(int nbr_caracteres_tapes = 0 ; nbr_caracteres_tapes < taille_du_code_secret ; nbr_caracteres_tapes++ ) {
code_tape[nbr_caracteres_tapes] = bouton_appuye_et_relache();
Serial.print("*");
}
boolean code_juste = true;
for(int index=0; index < taille_du_code_secret; index++) {
// Si on a pas le même caractère à l'index
if(code_secret[index] != code_tape[index]) {
code_juste = false;
break;
}
}
// Si le code est juste
if(code_juste == true) {
Serial.print("
");
Serial.println("Le message secret est :");
Serial.print("
");
affiche_image_secrete();
Serial.print("
");
}
// sinon
else {
Serial.print("
");
Serial.println("Vous n'avez pas dit le mot magique (th-cam.com/video/BAHtStfZZWg/w-d-xo.html)");
Serial.print("
");
}
}
char bouton_appuye_et_relache() {
char bouton = NULL;
// On attend l'appui sur un bouton
do {
bouton = bouton_presse();
} while(bouton == NULL);
delay(100);
// On attend que l'utilisateur relache le bouton
while(bouton_presse() != NULL);
delay(100);
// On retourne le bouton qui a été pressé
return bouton;
}
char bouton_presse() {
const char boutons[4][4] = {'1','2','3','A',
'4','5','6','B',
'7','8','9','C',
'*','0','#','D'};
for(int ligne=0;ligne
stp
fonctionne a moitié , 7,8,9,C et *,0,#,D ne fonctionne pas... peut tu m'aider?
Merci pour cette vidéo. Très instructif!
simple et efficace ! Rarement vu une video aussi clair ! Merci
C super bien expliqué , plus clair que ça tu meurs hhhh merci bcp, on attend tjrs d'avantage de vidéo sur arduino
ouuaaaais trooop bieeeen !!!!!! geniaaaaal
tres bonne explication ! continu tjr avec d'autre tuto. comme un clavier avec un esp32
Comment puis-je récupérer le code pour utiliser le clavier 16 touches. Merci d’avance.
Merci sa aide
C'EST SUPER
Très bonnes vidéos! je débute en codage et ça aide énormément! Est-ce possible de nous donner le code final?
Je viens de le mettre dans le commentaire épinglé.
Bonjour et merci pour ces explications plutôt clair pour un débutant comme moi.
J'aurais cependant une question, je souhaiterais que lorsque le code est tapé il s'affiche à l'écran. Car vous proposez des "*" mais je voudrais que les personnes puissent voir ce qu'ils tapent.
Pourriez-vous m'aider?
Merci
Bonjour, je réponds un peu tard à votre message mais peut-être que ma réponse vous aidera tout de même.
Il suffit de remplacer "Serial.print("*");" par "Serial.print(code_tape[nbr_caracteres_tapes]);" dans la boucle for.
Bien à vous, Nicolas
BRAVO
peut tu m aider stp," lorsque je change mon mot de passe je voudrais recevoir un message suivant qui me demande de le confirmer " comment doit je faire
Pour une raison que j'ignore, je n'ai pas de retour à la ligne dans la fenêtre "moniteur série". j'ai donc ajouté un retour chariot "
" à cette ligne et tout va bien!
Serial.print(" est pressé
");
je précise que j'ai bien sélectionné "les deux, NL et CR" au bas de ma fenêtre série.
Merci pour cette vidéo super qui est trop peu vue! (256 en ce moment)
il faut ecrire la commande "println" pour passer a la ligne
@@jeromeviale4111 Merci Jérôme!
Un commentaire et un pouce bleu ?
Comment afficher ça sur un écran LCD ?
@@kevintalahfo2877 Si ça t'intéresse je peux t'envoyer mon code que j'ai modifié avec deux led (verte et rouge ) et un écran LCD avec un module I2C
Super vidéo, très bien expliqué et clair, écrire le code et le commenté en même temps c'est vraiment un super moyen d'apprendre et de comprendre rapidement ! Félicitation ! J'ai pu modifié ton code pour y intégrer un écran LCD et bientôt un module Wifi pour un contrôle de lumière. En revanche j'ai un léger soucis sur ma variable "char code_secret[taille_du_code_secret] = {'D','A','0','4'}; " tout fonctionnait normalement mais lorsque j'ai voulu changer le code secret une erreur "variable-sized object 'code_secret' may not be initialized " s'affiche et je n'arrive pas à la résoudre puisque même avec des Crt + Z pour revenir au même code ça ne fonctionne pas. Si tu as le temps, merci de ton aide ;-)
Finalement problème résolu, sur une carte Arduino Uno, le code fonctionne très bien mais sur des ESP ou NodeMCU, le compilateur veut une constante pour son tableau, il faut alors rajouter un "const" au "int taille_du_code_secret = 4;"
Peut on avoir le programme en entier
Je viens de le mettre dans le commentaire épinglé.
svp code texte