Comparer deux tableaux

Salut à tous,je veux comparer deux tableaux ,le premier contient le vraie mot de pass Et le deuxième contient le mot de passe qui doit être entrer en utilisant deux boutons poussoirs (bp1 et bp2) si le mot de passe enter est identique au mot de passe enregistrer au début on éteint la led rouge
Voici mon code Arduino , j'utilise mon téléphone donc j'espère qu'il est lisible ,svp aidez moi
int red=10;
int bp1 = 6;
int bp2 = 7;
int x;
int y;
int i ;
int pass[5]={1,1,0,0,0};
int codeEncours [5];
int nombreAppui;
int a;

void setup() {
// put your setup code here, to run once:
pinMode(10,OUTPUT);
pinMode(bp1,INPUT);
pinMode(bp2,INPUT);
Serial.begin(9600);
nombreAppui=0;
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(10,HIGH);
digitalWrite(9,LOW);

for(int i=0;i<4;i++){
x= digitalRead(bp1);
delay(100);
if (x==LOW)
{nombreAppui++;
delay(100);
codeEncours[nombreAppui]=1;}

y= digitalRead(bp2);
delay(100);
if (y==LOW)
{ nombreAppui++;
delay(100);
codeEncours[nombreAppui]=0;}}

if(pass[i]==codeEncours[i]){
digitalWrite(red,LOW);
delay(1000);
digitalWrite(red,HIGH);}

}

Déplacé dans la section générale. Merci de lire les bonnes pratiques et de formatter le code avec les balises (tout est expliqué dans les bonnes pratiques)

Je pas compris ou je trouve section général ?

Ici

Et pas de double post …

Esq tu peux corriger mon code svp !?

Est-ce que vous pouvez mettre les balises de code ?

Oui d'accord

int red=10;
int bp1 = 6;
int bp2 = 7;
int x;
int y;
int i ;
int pass[5]={1,1,0,0,0};
int codeEncours [5];
int nombreAppui;
int a;
void setup() {
  // put your setup code here, to run once:
pinMode(10,OUTPUT);
 pinMode(bp1,INPUT);
 pinMode(bp2,INPUT);
 Serial.begin(9600);
nombreAppui=0;
}
void loop() {
  // put your main code here, to run repeatedly:
digitalWrite(10,HIGH);
digitalWrite(9,LOW);
for(int i=0;i<4;i++){
x= digitalRead(bp1);
 delay(100);
if (x==LOW)
{nombreAppui++;
  delay(100);
  codeEncours[nombreAppui]=1;}
  y= digitalRead(bp2);
  delay(100);
  if (y==LOW)
{ nombreAppui++;
  delay(100);
  codeEncours[nombreAppui]=0;}}

    if(pass[i]==codeEncours[i]){
    digitalWrite(red,LOW);
    delay(1000);
    digitalWrite(red,HIGH);}
    
}

A quoi servent tous ces delay ?
Indentez aussi le code, ce n’est pas tres lisible

Lisez un tuto pour la gestion des boutons ou éventuellement utilisez la librairie Button dans easyRun de @bricoleau ou alors la librairie OneButton de Matthias Hertel.

J'imagine que les delay(100) servent pour annuler les rebonds : si oui, un delay(30) est suffisant.

Tu définis des variables pour les pins connectées : utilise-les.
digitalWrite(10,HIGH); devient digitalWrite(red,HIGH);
Et ça : digitalWrite(9,LOW); c'est quoi ? Qu'est-ce qui est connecté sur la pin 9 ?

Pour les boutons poussoirs, tu les définis comme ceci : pinMode(bp1,INPUT);
Mais tu testes l'appui avec if (x==LOW), ça suppose un pull-up quelque part. Soit tu as connecté une résistance de pull-up :
image
soit tu utilises celles qui sont dans ton Arduino et tu déclares pinMode(bp1,INPUT_PULLUP);

Plus d'info sur le sujet ici .

Enfin, ton code ne peut pas fonctionner comme ça : tu fais une boucle sur 'i' de 0 à 3 pour compter les appuis sur les boutons, et tu utilises la variable 'i' en dehors de la boucle. Donc, déjà problème de compilation.

Ensuite, cette boucle n'est pas la solution à ton problème. Ton code a 2 parties :

  1. Lecture de 4 appuis sur les boutons
  2. Vérification du code

Tu ne dois pas passer à la phase 2 avant que la 1 soit terminée.

Donc, ce n'est pas un for mais un while qu'il te faut. En pseudo-code :

nombreAppui = 0
while (nombreAppui < 4) {
  lecture des boutons
  si bouton1 appuyé : codeEncours[nombreAppui]=1 et incrémenter nombreAppui
  si bouton2 appuyé : codeEncours[nombreAppui]=0 et incrémenter nombreAppui
  }

A la fin du while, tu devrais avoir stocké les 4 appuis. Il te reste à passer à la phase 2, avec un for dans ce cas :

digitalWrite(red,HIGH); // LED allumée
for(int i=0;i<4;i++){
  if (pass[i] != codeEncours[i]) digitalWrite(red,LOW); // LED éteinte si un code est différent
}

Pour cela : CTRL T dans l'IDE

Salut j'espère que vous avez bien
--Pour la pin 9 c'est une autre led (bon le projet est plus grand qu'une led et deux boutons) ,ce qui plus important pour moi est comment allumer une led à travers deux boutons par une combinaison d'appuis sur les deux boutons (2 appuis sur le premier bouton+3 appuis sur le deuxième bouton )
--pour Les delay ,Oui pour éviter les rebonds
-- le contrôle d'appuis est fait par (low) par ce que
Les boutons sont connectés à la masse tandis que les résidents à +vcc (donc en absence d'apuii les boutons registre un état High)
-- pour les boucles et comment utiliser les tableaux je suis débutant , j'ai trouver sur ce forum un code similaire qui est l'origine de mon code mais malheureusement ça ne fonctionne pas
-- j'essaye de prendre tes remarques pour corriger
Mais vraiment je suis besoin de toi par ce que c'est mon projet de fin cycle (licence électronique)
-- pour la langue pardonner moi ma langue française est pas bien , nous parlons d'arabe ici

Oui, c'est pour ça que je t'aide à y arriver par toi -même. :smiley:
Pas de problème avec la langue, si j'ai des questions, je les poserai.

Pour la boucle while, voir ici et les tableaux .
D'une manière générale, de bons tutos sur ce site.

C’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.