Fonction non fonctionnelle

Bonjour. J'aimerais créer une fonction interface_lcd qui renvoie "Entrer le code:" dans mon lcd mais ça ne fonctionne pas.
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 bouton1 = 4;

int potentiometre1 = A0;
int potentiometre2 = A1;

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

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.setCursor(6, 1);
  lcd.print(valeur2);

  if(valeur1 == administrator_code1 && valeur2 == administrator_code2){
    while(digitalRead(bouton1) == HIGH){
    administrator_code1 = valeur1;
    administrator_code2 = valeur2;
    delay(5000);
    }
  }

  if(valeur1 != administrator_code1 or valeur2 != administrator_code2){
    if(digitalRead(bouton1) == HIGH){
      lcd.setCursor(0,0);
      lcd.print("Code administrateur incorrect");
    }
  }

  if(valeur1 == administrator_code1 && valeur2 == administrator_code2){
    servo1.write(90);
    servo2.write(90);
  }
  if(valeur1 != administrator_code1 or valeur2 != administrator_code2){
    servo1.write(0);
    servo2.write(0);
  }
}
void interface_lcd() {
  lcd.setCursor(0, 0);
  lcd.print("Entrer le code:");
}

Hello
ldc.begin (16,2)se met dans le setup et le virer de la loop
il faut appeler la fonction interface lcd en fin du setup

si tu as besoin d'effacer un message, tu effaces l'écran entier par lcd.clear();
ou pour effacer une ligne : ldc.setCursor(0,1);ldc.print(" 16 espaces ");

1 Like

D'accord merci beaucoup !

Par contre dès que je met le lcd.begin() dans le void.setup() les valeurs affichée dans le lcd ne redescendent plus à zéro si je fais revenir le potentiomètre en arrière et le maximum étant 1023 ça m'affiche des valeurs au dessus de 5000.

une entrée analogique ne peut pas dépasser 1023.
j'ai revu un peu ton code
mais rien n'explique ce que tu dis pour la valeur au dessus de 5000

#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 bouton1 = 4;
int potentiometre1 = A0; //fils bobinage ou piste graphite sur GND et VCC. curseur sur A0
int potentiometre2 = A1; //fils bobinage ou piste graphite sur GND et VCC. curseur sur A0
//le BP est raccordé sur D4 et GND. l'entrée déclarée en INPUT_PULLUP 
//un appui sur le BP ramenera le GND sur l'entrée elle sera donc LOW si appui 
//sans appui sur le BP, l'entrée sera à HIGH par sa PULLUP interne validée dans le pinMode
void setup() {
  Serial.begin(115200);
  servo1.attach(5);
  servo2.attach(6);
  pinMode(bouton1, INPUT); //ou INPUT_PULLUP ?
  //digitalWrite(bouton1, LOW);//??????????????????c'est une entrée avec un BP branché dessus
  lcd.begin(16,2);
  interface_lcd();// inscrit ("Entrer le code:")
}

void loop() 
{
  
  valeur1 = analogRead(potentiometre1);//lecture du potar admin 1
  valeur2 = analogRead(potentiometre2);//lecture du potar admin 2
  
  lcd.setCursor(0, 1);
  lcd.print(valeur1);// entre 0 et 1023
  lcd.setCursor(6, 1);
  lcd.print(valeur2);// entre 0 et 1023

if(digitalRead(bouton1) == HIGH) //là, on attends un appui sur le BP alors c'est HIGH ou LOW?
{
  if((valeur1 == administrator_code1) && (valeur2 == administrator_code2))
  {
    administrator_code1 = valeur1;
    administrator_code2 = valeur2;
    servo1.write(90);
    servo2.write(90);
  }

  if((valeur1 != administrator_code1) or (valeur2 != administrator_code2))
  {
      lcd.setCursor(0,0);
      lcd.print("Code administrateur incorrect");
      servo1.write(0);
      servo2.write(0);
    }
  }
}
void interface_lcd() {
  lcd.setCursor(0, 0);
  lcd.print("Entrer le code:");
}

par contre comment est câblé ton BP?

Bonjour,

C'est parce que tu n'effaces pas la valeur précédente et il reste des chiffres qui vont rester affichés derrière.
Une des solutions est d'afficher 3 espaces à la suite de la valeur numérique.

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