Tout d'abord joyeuse Pâques a toute la communauté !!!!!
J ai une question (comme toujours ).
Je voulais savoir si l on pouvait dans le même programme comparer deux tableaux, c'est a dire je défini un tableau avec des valeurs constante prédéfinies genre un code a 4 chiffres et si le deuxième tableaux est remplie avec les même valeur que le premier j allume une LED ou autre.
Biensur si c est possible pourriez vous me donne la syntaxe de ce procédé ou une piste un tuto par exemple.
Merci d'avance et bonne soirée a tous!!!! ;D
Si le tableau 1 contient les valeurs 3, 9, 5, 11 et le tableau 2 contient les valeurs 3, 9, 5, 11
On peut considérer qu'ils sont égaux
Mais d'après ta question
si le tableau 1 contient les valeurs 3, 9, 5, 11 et le tableau 2 contient les valeurs 3, 11, 5, 9
faut-il les considérer égaux ?
effectivement c est dans le cas d un code , mot de passe comme un digicode par exemple.
le but est qu il y est un clavier de 0 à 9 , je défini un code mot de passe dans le premier tableau par exemple 4321 et l utilisateur doit rentrer le bon code qui s inscrira dans un deuxième tableau et les deux seront comparé pour actionner un relais ou autre.
je précise que je n'ai jamais utilisé de tableau, c'est pour cela que je pose surment des questions plutôt idiote je m en excuse.
l avantage des tableaux si j ai bien compris , c'est que je puisse changer le mot de passe par exemple pendant le setup si a l allumage de la carte je reste appuyé sur une touche je rentre en programmation d un nouveau mot de passe qui s inscrirait dans le premier tableau puis une fois fait, il faut la redémarrer sans appuyer biensur et le code resterai inscrit dans la mémoire de l arduino.
il n y aura plus qu a taper le bon mot de passe pour activer un relais ou LED.
en gros je cherche a reproduire le fonctionnement d un clavier de système d alarme ou un digicode.
voila tout j espère avoir été plus clair je continu mes recherches sur le net en parallèle.
acedar:
juste une petite question encore quelle est la fonction du "break" je croyais qu on ne pouvait que l utiliser dans un "switch case"???
break permet aussi de sortir d'une boucle en cours de route
Sinon pour comparer 2 tableaux de taille connue, vous avez la fonction [url=http://www.cplusplus.com/reference/cstring/memcmp/]memcmp()[/url] qui est en standard. Voici un petit exemple d'utilisation
La comparaison avec cette fonction se fait octet par octet, donc va fonctionner avec tout type de données, il suffit de dire combien d'octets on veut comparer. (on compare bien des tableaux, pas des cstrings)
et si vous avez un keypad ou utilisez le port série pour entrer votre code, mon petit tuto Ecouter le Port Série ou un keypad pourrait vous être utile
après plusieurs heure d essais ainsi que des heures de forum et tuto, j ai pas avancé d un micron.
il doit y avoir d innombrable erreur dans ce code mais je suis un arduiniste amateur et ultra noob.
je vous joint mon pseudo code et si quelqu un pouvait me dire si j inscrits bien le valeur voulues dans mon second tableau.
je ne maitrise pas vraiment les tableaux mais il est possible que mon erreur soit ailleurs que dans les tableaux voila donc ce code qui me rend fou >:(
j ai bien conscience que ce morceau de code doit vous donner mal a la tête et qu il est bourré d erreur sauf que je suis incapable de les trouver.
merci pour vos précieuse remarques et conseils
Sérieusement - dans méchanceté aucune - il faut vous pencher sur un cours de C - laissez tomber les projets compliqués pour le moment - apprenez la base de la programmation et vous pourrez ensuite revenir à votre projet
En effet, sans être un cador de la programmation en C, je pense qu'il y a pas mal d'erreurs dans ces quelques lignes :
if (bouton1,bouton2,bouton3,bouton4 != etatBouton);{
delay(100);
indexTableau ++;
motDePasseTaper[indexTableau];
Le if avec des virgules : ça doit être un raccourci un peu rapide. C'est pour tester si les 4 variables sont toutes différentes de etatBouton ? Si oui, il vaut mieux utiliser le &&
Je ne suis pas sûr que le ++ s'emploie comme ça : il faudrait plutôt écrire
indexTableau +=1;
Enfin la dernière ligne n'est pas terminée : si c'est une affectation, il faut dire à quelle valeur elle est affectée.
#include <Keypad.h>
int i=0;
char motdepassetaper[]={'0','0','0','0'};
char motdepasse [] ={'4','3','2','1'};
const byte ROWS = 2; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','4'},
{'5','6','7','8'},
};
byte rowPins[ROWS] = {7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
motdepassetaper[i]=customKey; // j inscris la touche appuyée dans une case du tableau
i++;// j incremente i pour me deplacer de case dans le tableau
}
if ( i == 4){//quand il y a eu 4 appui, je compare mes deux tableaux
if (memcmp(motdepasse, motdepassetaper, sizeof(motdepasse)) == 0){// si mes deux tableau sont identique
Serial.println("code bon");// j'ecris code bon
}
else{Serial.println ("mauvais code");}//sinon j ecris mauvais code
}
}
bonjour,
après des maux de tête pas croyable et des heures d errance sur des tuto des forum et biensur avec tout les info que vous m'avez fourni et une persévérance qui a failli détruire mon couple , j'ai enfin un début de code fonctionnel qui fait ce que je veux.
vous allez me dire c'est pas grand chose mais pour moi c'est comme aller sur la lune en vélo.
en fait mon souci était que je comprenais pas pourquoi le programme écrivait toujours "mauvais code".
il y avait plusieurs erreurs:
premiere: char motdepasse [] ={'4','3','2','1'}; je n avais pas mis les '
deuxieme: motdepassetaper*=customKey;*
i++;*
j'avais inverser les deux lignes* un grand merci a J-M-L pour son coup de pousse et son coup de pied au cul
vous pourriez tester si le code est complet uniquement quand vous avez reçu un nouveau caractère et pas en permanence dans la boucle (en mettant de test au sein du premier If). Sinon vous ne remettez jamais i à zéro donc votre code ne fonctionne qu’une fois