Bonjour à tous,
Je cherche une solution assez précise concernant un de mes projets.
J’ai créé un boitier fonctionnant grace à un arduino nano.
Le principe souhaité : un “precode” est envoyé par l’utilisateur et un code définitif lui est remis en retour.
Le fonctionnement est le suivant actuellement :
J’ai un écran LCD 2 lignes comme interface proposé à l’utilisateur et un clavier 4x3 permettant de faire une saisie.
Voici le code complet actuel :
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
const char bouton = 2;
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'-','0','+'}
};
byte rowPins[ROWS] = {9, 4, 5, 7}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 10, 6};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int compteur=0;
int lettre=0;
char cle='A';
char clea = 0;
char cleb = 0;
char clec= 0;
char precode[4];
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Precode: ----");
lcd.setCursor(0,1);
lcd.print("Code : ----");
pinMode(bouton,INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key=='-'||key=='+')
{
if (key=='-')
{
if(lettre==1||lettre==0)
{lettre=26;}
else {lettre--;}
}
else if (key=='+')
{
if(lettre==26)
{lettre=1;}
else {lettre++;}
}
if(lettre==1){cle='A';}
else if(lettre==2){cle='B';}
else if(lettre==3){cle='C';}
else if(lettre==4){cle='D';}
else if(lettre==5){cle='E';}
else if(lettre==6){cle='F';}
else if(lettre==7){cle='G';}
else if(lettre==8){cle='H';}
else if(lettre==9){cle='I';}
else if(lettre==10){cle='J';}
else if(lettre==11){cle='K';}
else if(lettre==12){cle='L';}
else if(lettre==13){cle='M';}
else if(lettre==14){cle='N';}
else if(lettre==15){cle='O';}
else if(lettre==16){cle='P';}
else if(lettre==17){cle='Q';}
else if(lettre==18){cle='R';}
else if(lettre==19){cle='S';}
else if(lettre==20){cle='T';}
else if(lettre==21){cle='U';}
else if(lettre==22){cle='V';}
else if(lettre==23){cle='W';}
else if(lettre==24){cle='X';}
else if(lettre==25){cle='Y';}
else if(lettre==26){cle='Z';}
lcd.setCursor(12,0);
lcd.print(cle);
}
else if ( key != NO_KEY)
{
if (compteur==0)
{
clea=key;
lcd.setCursor(13,0);
lcd.print(clea);
compteur++;
}
else if (compteur==1)
{
cleb=key;
lcd.setCursor(14,0);
lcd.print(cleb);
compteur++;
}
else if (compteur==2)
{
clec=key;
lcd.setCursor(15,0);
lcd.print(clec);
compteur=0;
}
}
if (digitalRead(bouton)==HIGH)
{
delay(50);
char precode[]={cle,clea,cleb,clec};
printf(precode,"%s.%s.%s.%s",precode[0],precode[1],precode[2],precode[3],precode[4]);
}
}
Le but jusqu’ici étant d’enregistrer une chaine de 4 caracteres saisie par l’utilisateur comprenant lettre et chiffres. Jusqu’à présent tout va bien !
Du moins je le pense : tout fonctionne comme je le souhaite et comme je l’imaginais.
la saisie au clavier permet d’afficher en temps réel le precode alliant lettre et chiffre.
Un bouton de validation permet de conserver la saisie de l’utilisateur.
Mon problème :
Le but est de comparer cette chaine de caractere au fichier precode.txt enregistrée sur carte SD dont le format est le suivant :
"
A100
A200
…
"
pour récupérer la chaine de caractere à la ligne correspondante sur un fichier code.txt enregistrée sur cette meme carte SD avec un format similaire évidemment
"
0895
4587
…
"
Le but final étant évidemment de permettre à l’utilisateur de saisir son “precode” et de lui afficher en retour son “code” d’accès final sur l’afficheur.
Je découvre l’utilisation des cartes SD avec Arduino : et j’ai beau chercher, je ne parvient pas à trouver une solution.
Je sais ce que vous me direz : pourquoi ne pas créer un tableau pour effectuer cette comparaison ?
Tout simplement la taille : il existe environ 25000 combinaisons possibles qui renvoient toutes à un code parfaitement aléatoire, d’où l’intérêt d’utiliser une mémoire externe pour stocker ces données.
Vous remerciant par avance pour toute suggestion ou pour une aide
Bien cordialement,