Bonjour
J’ouvre ce nouveau topic pour demander de l’aide sur l’un de mes nouveaux projets. C’est un système de coffre fort (Clavier matriciel 4*4(keypad), écran lcd, buzzer, et servo-moteur).
Voici le code :
#include <LiquidCrystal.h> //inclure les bibliothèques
#include <Keypad.h>
#include <Servo.h>
LiquidCrystal lcd (2, 3, 4, 5, 11, 12); //pin écran lcd
char* password = "8467"; //définir code
int position = 0; //sert à stocker le nombre de chiffre a appuyé
const byte ROWS = 4; //4lignes
const byte COLS = 4; //4 colonnes
char keys[ROWS][COLS] ={ //tableau contenant les touches
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'},
};
char DIO_BUZZER = 10; //pin buzze ==10
Servo monServo; //nom de mon servo
byte rowPins[ROWS] = {17,16,15,14}; //définition des sorties pour lignes
byte colPins[COLS] = {21,20,19,18}; //définition des sorties pour les colonnes
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int GreenpinUnlock = 8; //définir broche pour led
int RedpinLock = 6;
void setup() {
lcd.begin (16, 2); //définissions de l'écran lcd
lcd.setCursor (0, 0); //mettre curseur à 0,0
lcd.print ("Coffre fermé"); //écrire "..."
delay(2000); //attendre deux secondes
pinMode(GreenpinUnlock, OUTPUT); //pin led en sortie
pinMode(RedpinLock, OUTPUT);
digitalWrite(GreenpinUnlock, LOW); //led éteinte
digitalWrite(RedpinLock, LOW);
monServo.attach(9); //pin servo == 9
void invalidCode(); //effectuer fonction invalidCode
}
void loop() {
char key = keypad.getKey(); //key == touche appuyé //key prend la valuer de touche appuyé
lcd.setCursor(0, 0); //Mettre curseur de l'écran lcd à 0,0
lcd.print("Code : "); //écrire "..."
if(int(key) =0){ //si touche appuyé est 0
digitalWrite(GreenpinUnlock, HIGH); //alors led verte allumée
delay(1000); //attendre 1 s.
digitalWrite(GreenpinUnlock, LOW); //éteindre led
}
if(key == password[position]) //si touche appuyé est égal au mot de passe
{
++position; //position + 1
if(position == 4) //si position est égale à 4
lcd.setCursor (7, 0);
lcd.print ("*");
{
unlockDoor(); //Faire fonction unlockDoor
position = 0; //position est égale à 0
}
}
}
else { //sinon
invalidCode(); //faire fonction invalidCode
position = 0; //position est égale à 0
}
}
void invalidCode() //fonction invalidCode
{
digitalWrite(RedpinLock, HIGH); //led rouge allumée
tone(DIO_BUZZER, 2000, 50); //buzzer bip
delay(300); //attendre 0.3 sec.
tone(DIO_BUZZER, 2000, 100); //buzzer bip
delay(5000); //attendre 5 sec;
digitalWrite(RedpinLock, LOW); //led rouge éteinte
lcd.print("Code inccorect"); //écrire "..."
monServo.write(10); //servo, position 10
}
void unlockDoor() //Fonction unlockDoor
{
digitalWrite(GreenpinUnlock, HIGH); //led verte allumée
delay(5000); //attendre 5 sec.
digitalWrite(GreenpinUnlock, LOW); //les verte éteinte
monServo.write(100); //servo position 100
}
Le but de ce code est d’avoir au départ le coffre verouillé, puis quand on tapes le bon code, ça le déverouille et la led verte s’allume, mais quand c’est le mauvais code, avoir deux bip une fois que la personne à tapé quatre chiffre (et pas à chaque fois qu’elle appuie sur une touche) et la led rouge s’allume.
Problème :
Quand je met en route les système il passe directe au code faut et allume la led rouge et fait deux bip, car ils considèrent que comme je n’appuis sur aucun bouton, c’est faux. Et même quand j’essai de faire le code, rien ne se passe.
Pouvez-vous m’aider
Merci d’avance
SonKa7D5