Problème de bouton

Bonjour. Dans la fonction changer_code de mon programme, j'ai inclu un bouton_validation qui ne fonctionne pas. Je n'arrive pas à comprendre pourquoi.

Voici un lien vers le simulateur arduino où je code avec le shéma du prototype de mon coffre fort:

Voici mon code:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

#include <Servo.h>

Servo servo1;
Servo servo2;

int valeur1; //valeur du potentiomètre1
int valeur2; //valeur du potentiomètre2
int administrator_code1; //code administrateur potentimomètre1 (définit au démarrage)
int administrator_code2; //code administrateur potentimomètre2 (définit au démarrage)

int bouton_changer_code = 3;
int bouton_validation = 4;

int potentiometre1 = A0;
int potentiometre2 = A1;

void setup() {
  Serial.begin(9600);
  pinMode(A0,INPUT);
  servo1.attach(5);
  
  servo2.attach(6);
  
  pinMode(bouton_changer_code, INPUT);
  digitalWrite(bouton_changer_code, LOW);

  pinMode(bouton_validation, INPUT);
  digitalWrite(bouton_validation, LOW);

  lcd.begin(16, 2);
  lcd.print("Entrer le code:");
}

void loop() {
  //lcd.setCursor(0, 0);
  //lcd.print("Entrer le code:");
  valeur1 = analogRead(potentiometre1);
  valeur2 = analogRead(potentiometre2);
  //lcd.begin(16, 2);
  lcd.setCursor(0, 1);
  lcd.print(valeur1);
  lcd.print("   ");
  lcd.setCursor(6, 1);
  lcd.print(valeur2);
  lcd.print("   ");
  if(administrator_code1 != valeur1 or administrator_code2 != valeur2){
    if(digitalRead(bouton_changer_code) == HIGH){
      lcd.setCursor(0,0);
      lcd.print("Code administrateur incorrect");
    }
  }
  changer_code();
  if(administrator_code1 == valeur1 && administrator_code2 == valeur2){
    servo1.write(90);
    servo2.write(90);
  }
  if(administrator_code1 != valeur1 or administrator_code2 != valeur2){
    servo1.write(0);
    servo2.write(0);
  }
}

void changer_code() {

  //if(valeur1 == administrator_code1 && valeur2 == administrator_code2){
  if(digitalRead(bouton_changer_code) == HIGH){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Entrer le code");
    lcd.setCursor(0, 1);
    lcd.print("administrateur:");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Code:");
    lcd.setCursor(0, 1);
    lcd.print(valeur1);
    lcd.print(" ");
    lcd.setCursor(0, 6);
    lcd.print(valeur2);
    lcd.print(" ");

    if(digitalRead(bouton_validation) == HIGH){
      if(valeur1 == administrator_code1 && valeur2 == administrator_code2){
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Entrer le nouveau");
        lcd.setCursor(1, 0);
        lcd.print("code administrateur:");
        delay(1000);
        lcd.clear();
        lcd.print("Nouveau code:");
        lcd.setCursor(1, 0);
        lcd.print(valeur1);
        lcd.print(" ");
        lcd.setCursor(1, 6);
        lcd.print(valeur2);
        lcd.print(" ");
      }
    }
  
    administrator_code1 = valeur1;
    administrator_code2 = valeur2;
    //delay(5000);
  }
}

ça veut dire quoi "qui ne fonctionne pas" ?

salut.

Ta boucle qui teste le bouton de validation est inclue dans la boucle qui teste le bouton changer_code.

if(digitalRead(bouton_changer_code) == HIGH){
 if(digitalRead(bouton_validation) == HIGH){ // lu seulement si la condition précédente est vraie
}
}

En l'état, Je pense que la carte aura besoin que les 2 boutons soient activés pour entrer dans la boucle.
Il faudra probablement revoir ton code pour avoir un timing "humainement compatible".

d'accord merci beaucoup

certainement que tu veux régler le code avec une entrée analogique?

  valeur1 = analogRead(potentiometre1);
  valeur2 = analogRead(potentiometre2);

Mais les valeurs fluctue sur les potentiomètre meme sans les toucher, en ajoutant un delay(), ca peut résoudre le problème

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