Bonjour, je me fait embêter avec un truc pourtant tout simple...
Je dois comparer deux tableau de caractères pour vérifier qu'ils soient égaux. Mais je n'y arrive pas et mon programme retourne l'équation forcément mauvaise... Une idée ?
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char code_Ouv[5] = {'6', '3', '6', '6', 'A'};
char code_Act[5] = {0};
int index = 0;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5};
byte colPins[COLS] = {6, 7, 8, 9};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey && (code_Ouv != code_Act) && index != 5){
code_Act[index] = customKey;
Serial.println(code_Act[index]);
index++;
}
else if (index == 5 && (code_Ouv == code_Act))
{
Serial.println("Code bon !");
index = 0;
}
else if (index == 5 && (code_Ouv != code_Act))
{
Serial.println("Code mauvais !");
index = 0;
}
}
gcjr
October 31, 2022, 11:20am
2
consider
output
12345 no-match
67890 no-match
6366A match
6366B no-match
code
const char *code_Ouv = "6366A";
const char *strA = "12345";
const char *strB = "67890";
const char *strC = "6366A";
const char *strD = "6366B";
// -----------------------------------------------------------------------------
bool
match (
const char *s )
{
Serial.print (" ");
Serial.print (s);
if (! strncmp (s , code_Ouv, strlen (code_Ouv))) {
Serial.println (" match");
return true;
}
Serial.println (" no-match");
return false;
}
void setup()
{
Serial.begin(9600);
match (strA);
match (strB);
match (strC);
match (strD);
}
void loop()
{
}
J-M-L
October 31, 2022, 1:45pm
3
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ je l'ai déplacé vers le forum francophone.
Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”
la fonction memcmp() permet de comparer deux tableaux
J'ai un mon petit tuto sur la gestion de données asynchrone avec un bout de code applicable à un keypad
mchardonnay:
code_Ouv != code_Act
On ne compare pas le contenu de tableau comme cela. Il faut soit
utiliser strncmp comme proposé par @gcjr
faire une boucle qui balaye la suite des cases des tableaux pour faire la comparaison
faire la comparaison au vol dans le if (customKey && (code_Ouv != code_Act) && index != 5){
A chaque valeur entrée s'il y a égalité avec la case code_Ouv[index] on met +1 dans une variable. Lorsqu'index == 5 si la variable vaut 5 alors on a le bon code sinon on remet tout = 0 pour une nouvelle saisie.
J-M-L
October 31, 2022, 2:19pm
5
fdufnews:
utiliser strncmp comme proposé par @gcjr
attention dans ce cas il faut terminer la chaîne par un caractère nul
et dans les possibilités on peut aussi (comme dit plus haut) utiliser memcmp() qui n'a pas besoin du caractère nul en fin de chaîne
system
Closed
April 29, 2023, 2:20pm
6
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.