Bonjour,
je travaille sur un système d'ouverture de porte RFID et je viens de rajouter une fonctionnalité bluetooth avec application android mais il y a un problème : le système reçoit bien le signal, le système ouvre ou ferme donc la porte, fais sonner le buzzer, allume la led verte ou rouge, affiche un texte sur l'écran lcd mais ensuite le problème c'est que le système n'arrête pas de sonner et d'afficher le texte. Pourriez-vous m'aider à résoudre ce problème ?
Mon code :
#define BADGE_PORT_PLAISANCE " C8 45 EB 61"
#define BADGE_BLEU " A9 B2 BB B9" //badge bleu
#define BADGE_NFC "0 4 5B A5 BA 2D 59 81" //tag NFC
#define BADGE_ROUGE " F1 49 2F 3D"
#define JEAN " 2A F4 2E 3D"
#define CPE " A6 40 2F 3D"
#define ERIC_CAMENEN "0 3 42 2F 3D"
#define LEBODIC " 1F 74 2E 3D"
#define DIRECTEUR " D6 FE 2E 3D"
#define DE_CRUZ " 41 4A 2F 3D"
#define DANO " D5 46 2F 3D"
/*
Branchements :
led verte en 7
led rouge en 6
servo en 4
bouton en 3
buzzer en 8
module RFID /
SDA en 53
SCK en 52
MOSI en 51
MISO en 50
RQ en rien
GND en GND
RST en 5
3.3V en 3.3V
*/
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
// Indicates the pins
#define SS_PIN 53
#define RST_PIN 37
// pour définir la valeur des ouvertures
#define ouvert 0
#define ferme 80
Servo monServomoteur;
// Indicates to which pin the LED is connected
const int ledpin1 = 45; //rouge
const int ledpin2 = 39; //verte
const int buzzer = 8;
int bouton = 3;
int etatbouton = 0;
int bouton2 = 30;
int etatbouton2 = 0;
int bouton3 = 9;
int etatbouton3 = 0;
int RECV_PIN = 10;
long CODE_IR_9 = 0xFF906F;
long CODE_IR_0 = 0xFF9867;
long CODE_IR_1 = 0xFFA25D;
long CODE_IR1_9 = 0xBFEC0EB0;
word BTDATA;//Donne le nom BTDATA à la donnée reçue sur le Bluetooth
IRrecv irrecv(RECV_PIN);
decode_results results;
// Creates own veriable for card reader
MFRC522 myReader (SS_PIN, RST_PIN);
LiquidCrystal lcd(10, 2, 11, 5, 6, 7); // Crée un objet LC. Paramètres : (rs, enable, d4, d5, d6, d7)
void setup ()
{
// définit la broche 4 pour le servo moteur "monServomoteur"
monServomoteur.attach(36);
monServomoteur.write(ferme); //voir #define en haut
irrecv.enableIRIn();
lcd.begin(16,2);
// set buzzer to pin 8 as output
pinMode (buzzer, OUTPUT);
// Start communication with the monitor
Serial.begin (9600);
Serial1.begin(9600);//HC06 en pin 18-19 RX sur TX1 et TX sur RX1
// Library SPI
SPI.begin ();
// Up to version 1.4.5 this call
myReader.PCD_Init ();
// Print on monitor: “..”
Serial.println ("Presentez votre badge d'accès");
Serial.println ();
// initialize pin 7 and 6 as output
pinMode (ledpin1, OUTPUT);
pinMode (ledpin2, OUTPUT);
pinMode(bouton, INPUT);
pinMode(bouton2, INPUT);
}
void loop () {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PRESENTEZ BADGE");
lcd.setCursor(4,1);
lcd.print("D'ACCES");
if(Serial.available()){
char c = Serial.read();
Serial.println("Valeur entrée:");
Serial.println(c);
if (c == '8'){ // si 8 est tapé dans le moniteur série, la porte s'ouvre
monServomoteur.write(ouvert);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ACCES:");
Serial.print ("AUTORISE : MALO LENORMAND");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MALO LENORMAND");
tone (buzzer, 1000);
delay (1000);
// stop, sound
noTone(buzzer);
delay(800);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, LOW);
}
if (c == '3'){ // si 3 est tapé dans le moniteur série, la porte s'ouvre
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
monServomoteur.write(ferme);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ACCES:");
Serial.print ("AUTORISE : MALO LENORMAND");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MALO LENORMAND");
tone (buzzer, 500);
delay (1000);
// stop, sound
noTone(buzzer);
delay(3000);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, LOW);
}
if (c == 'r'){ // si r est tapé dans le moniteur série, le système se réinitialise
tone (buzzer, 1000);
lcd.clear();
delay(500);
noTone(buzzer);
}
if (c == 'm'){ // si m est tapé dans le moniteur série, le système se met en maintenance
lcd.clear();
lcd.setCursor(3,0);
lcd.print("SERVICE EN");
lcd.setCursor(3,1);
lcd.print("MAINTENANCE");
tone (buzzer, 500);
delay(1000);
noTone(buzzer);
delay(200000000);
}
}
if (Serial1.available()){
BTDATA = Serial1.read();
}
if (Serial.available())
Serial1.write(Serial.read());
//********************************************
if(BTDATA=='O'){ //Si on reçoit un O, on ouvre la porte
monServomoteur.write(ouvert);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ACCES:");
Serial.print ("AUTORISE : MALO LENORMAND");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
tone (buzzer, 1000);
delay (1000);
// stop, sound
noTone(buzzer);
delay(800);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, LOW);
Serial.println("\n");
}
if(BTDATA=='F'){ //Si on reçoit un F, on ferme la porte
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
monServomoteur.write(ferme);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ACCES:");
Serial.print ("AUTORISE");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
tone (buzzer, 500);
delay (1000);
// stop, sound
noTone(buzzer);
delay(3000);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, LOW);
Serial.println("\n");
}
//if (irrecv.decode(&results))
//{
// Serial.println(results.value,HEX);
// irrecv.resume();
//}
//if (results.value == CODE_IR_9)
//{
// monServomoteur.write(ouvert);
//}
//if (results.value == CODE_IR_0)
//{
// monServomoteur.write(ferme);
//}
etatbouton = digitalRead (bouton);
if (etatbouton==HIGH) {
}
etatbouton2 = digitalRead (bouton2);
if (etatbouton2==HIGH) {
Serial.println("OUVERTURE EN COURS");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("OUVERTURE");
lcd.setCursor(3,1);
lcd.print("EN COURS");
delay(1000);
monServomoteur.write(ouvert); //voir #define en haut
tone (buzzer, 1000);
// wait 1 second
delay (1000);
// stops sound
noTone(buzzer);
delay(250);
Serial.println("OUVERTURE TERMINEE");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("OUVERTURE");
lcd.setCursor(3,1);
lcd.print("TERMINEE");
delay(2000);
lcd.clear();
}
etatbouton3 = digitalRead (bouton3);
if (etatbouton3==HIGH) {
Serial.println("FERMETURE EN COURS");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("FERMETURE");
lcd.setCursor(3,1);
lcd.print("EN COURS");
delay(1000);
monServomoteur.write(ferme); //voir #define en haut
tone (buzzer, 500);
// wait 1 second
delay (1000);
// stops sound
noTone(buzzer);
delay(250);
Serial.println("FERMETURE TERMINEE");
lcd.clear();
lcd.setCursor(3,0);
lcd.print("FERMETURE");
lcd.setCursor(3,1);
lcd.print("TERMINEE");
delay(2000);
lcd.clear();
}
// see if no new maps are detected
digitalWrite (ledpin1, LOW);
if (! myReader.PICC_IsNewCardPresent ())
{
// not found, stops searching
return;
}
// Checks whether the key tag can be read
if (! myReader.PICC_ReadCardSerial ())
{
// failed to read
return;
}
// Show UID on serial monitor
String key = "";
for (byte i = 0; i <myReader.uid.size; i ++)
{
key.concat (String (myReader.uid.uidByte [i] <0x10? "0 ":" "));
key.concat (String (myReader.uid.uidByte [i], HEX));
}
// Uppercase code of found key for better comparison
key.toUpperCase ();
// Print to monitor so you know which key is being read
Serial.println ();
Serial.print ("Badge d'accès :");
Serial.print (key);
// Grants access if key “..” is the same
// Each key tag has its own code, read your code via monitor
Serial.println ();
Serial.print ("ACCES: ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ACCES: ");
if (key == BADGE_PORT_PLAISANCE)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Determines the frequency of the buzzer
tone (buzzer, 1000);
delay (1000);
// stop, sound
noTone(buzzer);
monServomoteur.write(ouvert); //voir #define en haut
// Print on monitor
Serial.print ("AUTORISE : MALO LENORMAND");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MALO LENORMAND");
delay (3000);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, LOW);
}
else if (key == BADGE_BLEU)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : MALO LENORMAND");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MALO LENORMAND");
delay (3000);
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, LOW);
}
else if (key == BADGE_NFC)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : MALO LENORMAND");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MALO LENORMAND");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == BADGE_ROUGE)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : MALO LENORMAND");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MALO LENORMAND");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == JEAN)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : JEAN KERMORVANT");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("JEAN KERMORVANT");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == CPE)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : CPE");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MR LE BAGOUSSE");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == ERIC_CAMENEN)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : ERIC CAMENEN");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MR CAMENEN");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == LEBODIC)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : STEPHANE LE BODIC");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MR LE BODIC");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == DIRECTEUR)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : MR LE PICARD");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MR LE PICARD");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == DE_CRUZ)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : TECHNICIEN");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MR DE CRUZ");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else if (key == DANO)
{
// LED rouge off, LED verte on
digitalWrite (ledpin1, LOW);
digitalWrite (ledpin2, HIGH);
// Déterminer la fréquence du buzzer
tone (buzzer, 1000);
delay (1000);
// Stoper le son
noTone(buzzer);
monServomoteur.write(ouvert); // voir #define en haut
// Écrire sur le moniteur
Serial.print ("AUTORISE : MR DANO");
lcd.setCursor(7,0);
lcd.print("AUTORISE");
lcd.setCursor(0,1);
lcd.print("MR DANO");
delay (3000);
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
}
else {
// Red LED on, green off
digitalWrite (ledpin1, HIGH);
digitalWrite (ledpin2, LOW);
// Determines the frequency of the buzzer
tone (buzzer, 500);
// wait 1 second
delay (1000);
// stops sound
noTone(buzzer);
// Print on monitor
Serial.print ("REFUSE");
lcd.setCursor(7,0);
lcd.print("REFUSE");
lcd.setCursor(0,1);
lcd.print(key);
delay (3000);
}
Serial.println ();
//etatbouton2 = digitalRead (bouton2);
// if (etatbouton2==HIGH) {
// Serial.println("lecture en cours...");
// #define BADGE key
// }
}
PS : le code du bluetooth en loop commence à la ligne 174
Mon application apk :
RFID Security.zip (4,7 Mo)
Merci d'avance.
Cordialement.