Project coffre fort avec un servo, un clavier a membrane et un écran lcd

salut je débute arduino est j'ai fait un programme pour faire un coffre fort avec un servo, un clavier a membrane 4x4 et un écran lcd 16/2.
quand je dit a mon servo de de ce maitre a 90° il ce mais pendant 2s mais après il ce remais a 0 mais moi je voudrais qu'il reste a 90° et quand j'appuis sur B il ce mais a 0(pour refermer le coffre).

mon programme:

#include <Keypad.h>
#include <Servo.h>
#include <LiquidCrystal.h>

const int rs = 47, en = 40, d4 = 33, d5 = 32, d6 = 31, d7 = 30;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
bool ledState = false;
bool codeInProgress = false;
String enteredCode = "";
Servo myservo;
void setup() {
Serial.begin(9600);
myservo.attach(11);
lcd.begin(16, 2);
}
void loop() {
char key = keypad.getKey();
lcd.print("");
if (key)
{
if (key == 'A' && codeInProgress)

{              
  codeInProgress = false;
  enteredCode = "";
  Serial.println("Code annulé");
  lcd.clear();
  lcd.print("code annule");
  delay(2000);       
  lcd.clear ();
} else {
 { enteredCode += key;
  Serial.print("Code en cours  ");
  Serial.println(enteredCode);
  lcd.println(enteredCode);
  lcd.cursor();
 }
  if (enteredCode == "4477") {
    codeInProgress = false;
    enteredCode = "";
    ledState = !ledState;
    Serial.println("Code correct - LED " + String(ledState ? "allumée" : "éteinte"));
     {
       lcd.clear();
       myservo.write(90);
       delay(20);
       lcd.print("Code correct");
       delay(2000);         
       lcd.clear();
       
  }              
 
  } else if (enteredCode.length() >= 4) {
    codeInProgress = false;
    enteredCode = "";
    {
      Serial.println("Code incorrect");
     lcd.clear();
     lcd.print("Code incorrect");
     myservo.write(0);             
    delay(20);  
     delay(2000);       
     lcd.clear();
     }
  
  } else {
    codeInProgress = true;
  }
}

}
{ if (key == 'B' && codeInProgress);
myservo.write(0);
delay(20);
}
}

Bonjour,

Beaucoup à redire sur ce premier message.

Un message d'acueil a été écrit pour éviter cette série d'erreurs.
Il faudrait peut etre le le lire ?

Liste non limitative :

  1. le titre doit être représentatif du sujet.
    Raison : il existe des personnes qui avant de poser des questions regardent si le sujet n'a pas été déjà traité. Pour ce faire elles utilisent le moteur de recherche du forum qui est basé sur les titres.
    Le tien ne veut rien dire, il faut le changer en cliquant sur l'icone "crayon" à droite du titre.

  2. le code DOIT être mis entre balise code pour être lisible par tout le monde.

  3. Avant de copier le code il faut l'indenté correctement : faire Control + T avant de le copier

  4. Les questions se posent dans la racine du forum francophone, le bar est un espace de détente.

Bien évidement c'est expliqué dans le message d'accueil du forum francophone :

Je déplace ton message dans la racine, tu n'as rien à faire sur ce plan.

Par contre si tu veux une aide maximum met ton code entre balise code et donne le maximum de renseignements y compris lien vers le matériel.

1 Like

merci désoler je sui nouveau :wink:

salut je débute arduino est j'ai fait un programme pour faire un coffre fort avec un servo, un clavier a membrane 4x4 et un écran lcd 16/2.
quand je dit a mon servo de de ce maitre a 90° il ce mais pendant 2s mais après il ce remais a 0 mais moi je voudrais qu'il reste a 90° et quand j'appuis sur B il ce mais a 0(pour refermer le coffre).

mon programme:

#include <Keypad.h>
#include <Servo.h>
#include <LiquidCrystal.h>

const int rs = 47, en = 40, d4 = 33, d5 = 32, d6 = 31, d7 = 30;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  { '1', '2', '3', 'A' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'C' },
  { '*', '0', '#', 'D' }
};
byte rowPins[ROWS] = { 9, 8, 7, 6 };
byte colPins[COLS] = { 5, 4, 3, 2 };
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
bool ledState = false;
bool codeInProgress = false;
String enteredCode = "";
Servo myservo;
void setup() {
  Serial.begin(9600);
  myservo.attach(11);
  lcd.begin(16, 2);
}
void loop() {
  char key = keypad.getKey();
  lcd.print("");
  if (key) {
    if (key == 'A' && codeInProgress)


    {
      codeInProgress = false;
      enteredCode = "";
      Serial.println("Code annulé");
      lcd.clear();
      lcd.print("code annule");
      delay(2000);
      lcd.clear();
    } else {
      {
        enteredCode += key;
        Serial.print("Code en cours  ");
        Serial.println(enteredCode);
        lcd.println(enteredCode);
        lcd.cursor();
      }
      if (enteredCode == "4477") {
        codeInProgress = false;
        enteredCode = "";
        ledState = !ledState;
        Serial.println("Code correct - LED " + String(ledState ? "allumée" : "éteinte"));
        {
          lcd.clear();
          myservo.write(90);
          delay(20);
          lcd.print("Code correct");
          delay(2000);
          lcd.clear();
        }

      } else if (enteredCode.length() >= 4) {
        codeInProgress = false;
        enteredCode = "";
        {
          Serial.println("Code incorrect");
          lcd.clear();
          lcd.print("Code incorrect");
          myservo.write(0);
          delay(20);
          delay(2000);
          lcd.clear();
        }

      } else {
        codeInProgress = true;
      }
    }
  }
  {
    if (key == 'B' && codeInProgress)
      ;
    myservo.write(0);
    delay(20);
  }
}

Oops?

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

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