Ajouter écran LCD dans un programme déjà fait

Bonjour tout le monde,

je viens ici vous demander de l’aide pour un projet TPE en classe de 1ère, avec 2 amis à moi, nous voulons faire un projet consistant à l’ouverture d’une porte à partir d’un lecteur de badge RFID. Dans notre projet, nous voulons mettre bien sûr la carte arduino, le lecteur RFID, 1 ou 2 leds, un servomoteur mais aussi un écran Lcd pour terminer le tout. Le problème est que notre niveau en langage C++ n’est pas du tout très élevé , on commence seulement, donc nous avons trouvé sur internet un code permettant de faire tout cela mais sans l’écran; donc est ce que quelqu’un pourrait nous aider à ajouter l’écran et à corriger des parties du code si il le faut ?
Voici le code permettant l’activation du servomoteur par le lecteur RFID :

#include <SoftwareSerial.h>
// WS- Ajout de la librairie pour le servomoteur
#include <Servo.h>

// Lecteur RFID Parallax
// Code original réalisé par Kev_MacD
#define RFIDEnablePin 2 // Pin permettant la lecture. Mis en OUTPUT pour la lecture du tag RFID
#define RFIDSerialRate 2400 // Vitesse de lecture du lecteur RFID

// SoftwareSerial Library pour localiser les serial pins
// Pour eviter tout conflit avec l’update de l’arduino via USB
#define RxPin 5 // Pin pour lire les informations
#define TxPin 4 // Pin pour écrire les données dans le lecteur (ne pas le raccorder dans le cas de la lecture seule du tag RFID)
SoftwareSerial RFIDReader(RxPin,TxPin);

int restState = 89;

String RFIDTAG= » »; // Mise en mémoire du code RFID
String DisplayTAG = « »; // On garde dans la console le dernier tag RFID lu

// WS- Création d’une variable pour le servomoteur
Servo doorLock;
// WS- Variable du bon tag
String codeTag = « 2600D3D72E »;
//WS- Position du servo mise à 0
int pos = 0;

void setup()
{
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);

// Connection du pin SOUT au pin RX à 2400bps pour la lecture RFID
RFIDReader.begin(RFIDSerialRate);

// Connexion du pin Enable en tant qu’ OUTPUT
pinMode(RFIDEnablePin,OUTPUT);

// Activation the RFID reader
digitalWrite(RFIDEnablePin, LOW);
Serial.begin(9600); // Définition de la Serial library à 9600 bps
Serial.println(« lecture RFID prete ! »); // Affichage du message de départ

//WS- On déclare l’entrée du servo sur le pin 7
doorLock.attach(7);

// WS- 0 le servo moteur tourne à fond vers la gauche
// WS- 90 le servo est arreté
// WS- 180 le servo moteur tourne à fond vers la droite
doorLock.write(restState);
}

void loop()
{
//LED éteintes
digitalWrite(10, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on

if(RFIDReader.available() > 0)
{
ReadSerial(RFIDTAG); // Lecture du tag RFID par le lecteur

if (RFIDTAG!=codeTag) {
digitalWrite(11, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(11, LOW); // set the LED off
}
}
// Affichage d’un seul tag RFID jusqu’au prochain tag scanné
if(DisplayTAG!=RFIDTAG)
{
DisplayTAG=RFIDTAG;
Serial.println(RFIDTAG);
}

if (RFIDTAG==codeTag){
digitalWrite(10, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(10, LOW); // set the LED off
Serial.println(« good »);
//doorLock.write(100);
for(pos = 0; pos < restState; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
doorLock.write(pos); // tell servo to go to position in variable ‘pos’
Serial.println(pos);
//delay(15); // waits 15ms for the servo to reach the position
RFIDTAG= » »;
}
Serial.println(« 90 degr »);
Comeback();
}
}

void Comeback() {
for(pos = 180; pos > restState; pos -= 1) {
doorLock.write(pos);
Serial.println(pos);
}
}

void ReadSerial(String &ReadTagString)
{
int bytesread = 0;
int val = 0;
char code[10];
String TagCode= » »;

if(RFIDReader.available() > 0) {
if((val = RFIDReader.read()) == 10) { // Vérification du header
bytesread = 0;
while(bytesread<10) { // Lecture du code à 10 chiffres
if( RFIDReader.available() > 0) {
val = RFIDReader.read();
if((val == 10)||(val == 13)) { // Si on rencontre une erreur de lecture
break; // On stop
}
code[bytesread] = val;
bytesread++; // La lecture est prête pour le prochain code tag RFID
}
}
if(bytesread == 10) { // Si la chaine contient 10 chiffres
for(int x=0;x<10;x++) // On les met dans une chaine String
{
TagCode += code;
}
ReadTagString = TagCode; // On met à jour l’affichage
while(RFIDReader.available() > 0) // Et on vide le buffer
{
RFIDReader.read();
}
}
bytesread = 0;
TagCode= » »;
}
}
}

En espérant que vous ayez compris le projet,
Merci d’avance :wink:
Bonne soirée!

Donc vous avez pompé un code tout fait
Vous voulez que quelqu'un code ce qu'il manque
Et vous allez présenter cela que VOTRE projet

J'ai bien tout compris Le projet ? Il n'y a rien qui vous choque?

Non on veut juste de l'aide, en effet le code est pompé je vous l'accorde, mais on veut surtout comprendre quoi, on a justement essayé de commencer à apprendre mais le temps nous manque voilà tout, et le code est beaucoup trop compliqué pour que nous le tapions nous même, nous avons essayé de trouver des alternatives mais cela ne donne rien, nous passons plusieurs heures à bosser dessus mais sans énormément de base cela devient rapidement compliqué, de plus le projet, plus précisément le codage ne sera pas présenté comme le notre, il sera expliqué mais ils savent très bien que nous ne pouvons pas faire un code comme ça, après je comprends vos impressions, mais cela serait sympa voilà

on a justement essayé de commencer à apprendre mais le temps nous manque voilà tout

Depuis quand savez vous qu'il y a un TPE à faire et une date pour le rendre ?...sérieusement…

Avez vous déjà essayé de connecter juste un lcd ? Jetez un œil à Les écrans LCD et faites fonctionner quelque chose.

Une fois que vous avez appris comment faire le montage et afficher du texte à la demande, essayez de comprendre le code que vous avez pompé (et qui n'est pas génial) et trouvez où les affichages doivent se faire

Revenez vers le forum avec une photo de vos essais de lcd fonctionnel et les endroits où vous pensez devoir mettre du code d'affichage

Depuis longtemps en effet mais du boulot a dû être fait avant, en plus de cours, etc...

Ok, merci, nous y regardons ce weekend et revenons vers vous

Pourquoi ce week end - la pause à midi et ce soir c'est aussi du temps à investir...

Alors voilà, j'ai regardé un peu comment mettre un écran lcd dans un programme etc, j'ai donc essayé par la suite comme vous me l'avez dit d'intégrer l'écran au programme sauf que si je ne me trompe, il y a dans ces lignes de code du vocabulaire comme :

#define LCD_CMD 0xFE
#define LCD_CLEAR 0x80
lcd.begin(9600);
lcd.clear(); // Efface l'écran
Serial.write(" ~ RFID Door Lock ~ ");

qui me fait penser à la présence déjà d'un écran lcd
Est ce vrai ? ou suis je complètement à côté de la plaque ? Merci

Revenez vers le forum avec une photo de vos essais de lcd fonctionnel et les endroits où vous pensez devoir mettre du code d’affichage

Vous n’apportez pas bcp d’éléments…

Pour la second partie de votre post - je n’ai aucune idée de ce dont vous parlez. ce code sort d’où? encore un truc que vous êtes allé piquer quelque part ?

ah non mince je me suis trompé, excusez moi '-- bref j'essaye et je reviens vite vers vous

Voilà j’ai essayé de comprendre comme j’ai pu le programme pour faire intervenir l’écran au bon endroit, cela me donne :
(j’ai modifié les lignes 2,15,23,48,49,50,51,59 126-131,135-138)

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

#define RFIDResetPin 2

#define buttonPin 3
// #define buzzerPin 7
#define servoPin 9
#define redLedPin 12
#define greenLedPin 13
#define blueLedPin 11
#define servoOpen 120
#define servoClose 30

LiquidCrystal monEcran (12,9,8,6,5,3);
Servo myservo;

boolean match = false;

void setup() {
Serial.begin(9600); // connect to the serial port

monEcran.begin(16,2);

pinMode(buttonPin, INPUT);

pinMode(RFIDResetPin, OUTPUT);
digitalWrite(RFIDResetPin, HIGH);

// pinMode(buzzerPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);

myservo.attach(servoPin);
myservo.write(servoClose);
}

void loop ()
{
byte i = 0;
byte val = 0;
byte code[6];
byte checksum = 0;
byte bytesread = 0;
byte tempbyte = 0;

monEcran.clear();
monEcran.print(“Bonjour”);
monEcran.setCursor(0,1);
monEcran.print(“Présentez votre carte”);

/*
If the button is pushed we openes the door
*/
if(digitalRead(buttonPin))
{
openDoor();
monEcran.print(“Bonne journée!”);
}
else
{
if(Serial.available() > 0)
{
if((val = Serial.read()) == 2)
{ // check for header
bytesread = 0;
while (bytesread < 12)
{ // read 10 digit code + 2 digit checksum
if( Serial.available() > 0)
{
val = Serial.read();
if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) { // if header or stop bytes before the 10 digit reading
break; // stop reading
}

// Do Ascii/Hex conversion:
if ((val >= ‘0’) && (val <= ‘9’)) {
val = val - ‘0’;
} else if ((val >= ‘A’) && (val <= ‘F’)) {
val = 10 + val - ‘A’;
}

// Every two hex-digits, add byte to code:
if (bytesread & 1 == 1) {
// make some space for this hex-digit by
// shifting the previous hex-digit with 4 bits to the left:
code[bytesread >> 1] = (val | (tempbyte << 4));

if (bytesread >> 1 != 5)
{ // If we’re at the checksum byte,
checksum ^= code[bytesread >> 1]; // Calculate the checksum… (XOR)
};
} else {
tempbyte = val; // Store the first hex digit first…
};

bytesread++; // ready to read next digit
}
}

// Output to Serial:

if (bytesread == 12) { // if 12 digit read is complete
Serial.print("5-byte code: ");

for (i=0; i<5; i++) {
if (code < 16) Serial.print(“0”);
_ Serial.print(code*, HEX);_
_
Serial.print(" ");_
_
}_
_
Serial.println();_
_
Serial.print(“Checksum: “);_
_
Serial.print(code[5], HEX);_
_
Serial.println(code[5] == checksum ? " ← passed.” : " ← error.”);_
_
Serial.println();*_

_ /_
_
Check if the user has access and the checksum is correct*_
_ /_
_
if(accessCheck(code) == true && code[5] == checksum) {_
_
Serial.println(“Door unlocked!”);_
_
openDoor();_
_
monEcran.clear();_
_
monEcran.print(“Accès autorisé”);_
_
monEran.setCursor(0,1);_
_
monEcran.print(“Bonne journée!”);_
_
delay(8000);_
_
monEcran.clear();_
_
} else {_
_
Serial.println(“Access denied!”);_
_
accessDenied();_
_
monEcran.clear();_
_
monEcran.print("! Accès rejeté !");_
_
delay(4000);_
_
monEcran.clear(); _
_
}_
_
}_
_
bytesread = 0;_
_
}_
_
}_
_
}_
_
}_
boolean accessCheck(byte test[])
_
{_
_
// Number of cards*_
* byte rfidTags = 4;*

* byte tags[40] = {*
* ‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’, // Card 1*
* ‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’, // Card 2*
* ‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’, // Card 3*
* ‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’,‘0’ // Card 4 };*

* for(int numCards=0; numCards<rfidTags; numCards++)*
* {*
* byte bytesread = 0;*
* byte i = 0;*
* byte val[10];*

* for(byte q=0; q<10; q++)*
* {*
_ val[q] = tags[numCards10+q];_
_
}*_

* byte master[6];*
* byte checksum = 0;*
* byte tempbyte = 0;*
* bytesread = 0;*
* for (i=0; i<10; i++) // First we need to convert the array above into a 5 HEX BYTE array*
* {*
if ((val_>=‘0’) && (val*<=‘9’)) // Convert one char to HEX*
* {
val = val - ‘0’;
}
else if ((val>=‘A’) && (val<=‘F’))
{
val = 10 + val - ‘A’;
}
if (bytesread & 1 == 1) // Every two hex-digits, add byte to code:
{
// make some space for this hex-digit by*

* // shifting the previous hex-digit with 4 bits to the left:
master[bytesread >> 1] = (val | (tempbyte << 4));
if (bytesread >> 1 != 5) // If we’re at the checksum byte,
{
checksum ^= master[bytesread >> 1]; // Calculate the checksum… (XOR)
};
}
else*

* {
tempbyte = val; // Store the first hex digit first…
};
bytesread++;
}
if ( checkTwo(test, master)) // Check to see if the master = the test ID*

* return true;
}
return false;
}
// Check two arrays of bytes to see if they are exact matches*

boolean checkTwo ( byte a[], byte b[] )
{
* if (a[0] != NULL) // Make sure there is something in the array first*
* match = true; // Assume they match at first*
* for (int k = 0; k<5; k++) // Loop 5 times*
* {
/

* Serial.print("[");
Serial.print(k);
Serial.print("] ReadCard [");
Serial.print(a[k], HEX);
Serial.print("] StoredCard [");
Serial.print(b[k], HEX);
Serial.print("] \n");
/
if (a[k] != b[k]) // IF a != b then set match = false, one fails, all fail

* {
match = false;
}
}
if (match) // Check to see if if match is still true*

* {
//Serial.print(“Strings Match! \n”);
return true; // Return true*

* }
else {
//Serial.print(“Strings do not match \n”);
return false; // Return false*

* }
}
/

Open the door.
- Open servo
- Green LED blinking
If the button is pushed after 4000ms the keepDoorOpen function is called
/
void openDoor()
{
myservo.write(servoOpen); // Move servo to open position*_

* // digitalWrite(buzzerPin, HIGH);*
* digitalWrite(greenLedPin, HIGH);*
* delay(4000); // The time the door needs to be open*
* digitalWrite(greenLedPin, LOW);*
* // digitalWrite(buzzerPin, LOW);*

* if(digitalRead(buttonPin))*
* {*
* keepDoorOpen(); // When the button is pushed the keepDoorOpen function is activated*
* openDoor(); // Run this openDoor function again when finished*
* }*

* myservo.write(servoClose); // Move servo to lock position*
}
/*
Keeping the door open until you push the button again.
Stays open for at least 10 * 200ms before you can push the button to lock it
## TODO ##
rewrite the buttonState counter. Do not need to count to 20, just check if the
buttonState==LOW and then HIGH. Then we do not need the 20*200ms delay
*/
void keepDoorOpen()
{
* Serial.println(“Keeping the door open.”);*

* int buttonState = 1;*
* while(buttonState>0)*
* {*
* digitalWrite(greenLedPin, HIGH);*
* delay(100);*
* digitalWrite(greenLedPin, LOW);*
* delay(100);*
* if(buttonState<=10) buttonState++;*
* if(digitalRead(buttonPin)==HIGH && buttonState>=10) break;*
* }*

_ /
Flashes the red and green LED to indicate that this mode is about to quit*

/
for(int i=0; i<4; i++)
{
digitalWrite(redLedPin, HIGH);
delay(100);
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
delay(100);
digitalWrite(greenLedPin, LOW);
}
}
/

Access denied!
Flashes the red LED
/
void accessDenied()
{
for(int i=0; i<5; i++) {
digitalWrite(redLedPin, HIGH);
delay(100);
digitalWrite(redLedPin, LOW);
delay(100);
}
}*

En espérant être sur la bonne voie!:wink:_

Lire ça et re-éditer ton dernier post.
Autrement, copier ok mais il faut comprendre ce que tu fais, tu utilises les mêmes broches pour piloter ton afficheur et des LEDs, servos, ...!!

Voilà j’ai modifié les entrées pour l’écran lcd, qu’en pensez vous ?
#include <Servo.h>
#include<LiquidCrystal.h>

#define RFIDResetPin 2

#define buttonPin 3
// #define buzzerPin 7
#define servoPin 9
#define redLedPin 12
#define greenLedPin 13
#define blueLedPin 11
#define servoOpen 120
#define servoClose 30

LiquidCrystal monEcran (A0, A1, A2, A3, A4, A5);
Servo myservo;

boolean match = false;

void setup() {
Serial.begin(9600); // connect to the serial port

monEcran.begin(16, 2);

pinMode(buttonPin, INPUT);

pinMode(RFIDResetPin, OUTPUT);
digitalWrite(RFIDResetPin, HIGH);

// pinMode(buzzerPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);

myservo.attach(servoPin);
myservo.write(servoClose);
}

void loop ()
{
byte i = 0;
byte val = 0;
byte code[6];
byte checksum = 0;
byte bytesread = 0;
byte tempbyte = 0;

monEcran.clear();
monEcran.print(“Bonjour”);
monEcran.setCursor(0, 1);
monEcran.print(“Présentez votre carte”);

/*
If the button is pushed we openes the door
*/
if (digitalRead(buttonPin))
{
openDoor();
monEcran.print(“Bonne journée!”);
}
else
{
if (Serial.available() > 0)
{
if ((val = Serial.read()) == 2)
{ // check for header
bytesread = 0;
while (bytesread < 12)
{ // read 10 digit code + 2 digit checksum
if ( Serial.available() > 0)
{
val = Serial.read();
if ((val == 0x0D) || (val == 0x0A) || (val == 0x03) || (val == 0x02)) { // if header or stop bytes before the 10 digit reading
break; // stop reading
}

// Do Ascii/Hex conversion:
if ((val >= ‘0’) && (val <= ‘9’)) {
val = val - ‘0’;
} else if ((val >= ‘A’) && (val <= ‘F’)) {
val = 10 + val - ‘A’;
}

// Every two hex-digits, add byte to code:
if (bytesread & 1 == 1) {
// make some space for this hex-digit by
// shifting the previous hex-digit with 4 bits to the left:
code[bytesread >> 1] = (val | (tempbyte << 4));

if (bytesread >> 1 != 5)
{ // If we’re at the checksum byte,
checksum ^= code[bytesread >> 1]; // Calculate the checksum… (XOR)
};
} else {
tempbyte = val; // Store the first hex digit first…
};

bytesread++; // ready to read next digit
}
}

// Output to Serial:

if (bytesread == 12) { // if 12 digit read is complete
Serial.print("5-byte code: ");

for (i = 0; i < 5; i++) {
if (code < 16) Serial.print(“0”);
_ Serial.print(code*, HEX);_
_
Serial.print(" “);_
_
}_
_
Serial.println();_
_
Serial.print(“Checksum: “);_
_
Serial.print(code[5], HEX);_
_
Serial.println(code[5] == checksum ? " ← passed.” : " ← error.”);_
_
Serial.println();_
_ /
* Check if the user has access and the checksum is correct*
/_
_
if (accessCheck(code) == true && code[5] == checksum) {_
_
Serial.println(“Door unlocked!”);_
_
openDoor();_
_
monEcran.clear();_
_
monEcran.print(“Accès autorisé”);_
_
monEran.setCursor(0, 1);_
_
monEcran.print(“Bonne journée!”);_
_
delay(8000);_
_
monEcran.clear();_
_
} else {_
_
Serial.println(“Access denied!”);_
_
accessDenied();_
_
monEcran.clear();_
_
monEcran.print(”! Accès rejeté !");_
_
delay(4000);_
_
monEcran.clear();_
_
}_
_
}_
_
bytesread = 0;_
_
}_
_
}_
_
}_
_
}_
boolean accessCheck(byte test[])
_
{_
_
// Number of cards*_
* byte rfidTags = 4;*
* byte tags[40] = {*
* ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, // Card 1*
* ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, // Card 2*
* ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, // Card 3*
* ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’ // Card 4 };*
* for (int numCards = 0; numCards < rfidTags; numCards++)*
* {*
* byte bytesread = 0;*
* byte i = 0;*
* byte val[10];*
* for (byte q = 0; q < 10; q++)*
* {*
_ val[q] = tags[numCards * 10 + q];
* }*
* byte master[6];*
* byte checksum = 0;*
* byte tempbyte = 0;*
* bytesread = 0;*
* for (i = 0; i < 10; i++) // First we need to convert the array above into a 5 HEX BYTE array*
* {*
if ((val >= ‘0’) && (val <= ‘9’)) // Convert one char to HEX
* {
val = val - ‘0’;
}
else if ((val >= ‘A’) && (val <= ‘F’))
{
val = 10 + val - ‘A’;
}
if (bytesread & 1 == 1) // Every two hex-digits, add byte to code:
{
// make some space for this hex-digit by*

* // shifting the previous hex-digit with 4 bits to the left:
master[bytesread >> 1] = (val | (tempbyte << 4));
if (bytesread >> 1 != 5) // If we’re at the checksum byte,
{
checksum ^= master[bytesread >> 1]; // Calculate the checksum… (XOR)
};
}
else*

* {
tempbyte = val; // Store the first hex digit first…
};
bytesread++;
}
if ( checkTwo(test, master)) // Check to see if the master = the test ID*

* return true;
}
return false;
}
// Check two arrays of bytes to see if they are exact matches*

* boolean checkTwo ( byte a, byte b )
{
if (a[0] != NULL) // Make sure there is something in the array first*

* match = true; // Assume they match at first*
* for (int k = 0; k < 5; k++) // Loop 5 times*
* {
/

* Serial.print("[");
Serial.print(k);
Serial.print("] ReadCard [");
Serial.print(a[k], HEX);
Serial.print("] StoredCard [");
Serial.print(b[k], HEX);
Serial.print("] \n");
/
if (a[k] != b[k]) // IF a != b then set match = false, one fails, all fail

* {
match = false;
}
}
if (match) // Check to see if if match is still true*

* {
//Serial.print(“Strings Match! \n”);
return true; // Return true*

* }
else {
//Serial.print(“Strings do not match \n”);
return false; // Return false*

* }
}
/

* Open the door.
- Open servo*

* - Green LED blinking*
* If the button is pushed after 4000ms the keepDoorOpen function is called*
/
void openDoor()
{
myservo.write(servoOpen); // Move servo to open position*

* // digitalWrite(buzzerPin, HIGH);
digitalWrite(greenLedPin, HIGH);
delay(4000); // The time the door needs to be open*

* digitalWrite(greenLedPin, LOW);
// digitalWrite(buzzerPin, LOW);
if (digitalRead(buttonPin))
{
keepDoorOpen(); // When the button is pushed the keepDoorOpen function is activated*

* openDoor(); // Run this openDoor function again when finished*
* }
myservo.write(servoClose); // Move servo to lock position*

* }
/

* Keeping the door open until you push the button again.
Stays open for at least 10 * 200ms before you can push the button to lock it_

_ ## TODO ##
rewrite the buttonState counter. Do not need to count to 20, just check if the*

buttonState==LOW and then HIGH. Then we do not need the 20200ms delay_
_ /
void keepDoorOpen()

* {
Serial.println(“Keeping the door open.”);
int buttonState = 1;
while (buttonState > 0)
{
digitalWrite(greenLedPin, HIGH);
delay(100);
digitalWrite(greenLedPin, LOW);
delay(100);
if (buttonState <= 10) buttonState++;
if (digitalRead(buttonPin) == HIGH && buttonState >= 10) break;
}
/

* Flashes the red and green LED to indicate that this mode is about to quit*
/
for (int i = 0; i < 4; i++)
{
digitalWrite(redLedPin, HIGH);
delay(100);
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
delay(100);
digitalWrite(greenLedPin, LOW);
}
}
/

* Access denied!
Flashes the red LED*

/
void accessDenied()
{
for (int i = 0; i < 5; i++) {
digitalWrite(redLedPin, HIGH);
delay(100);
digitalWrite(redLedPin, LOW);
delay(100);
}
}*_

je pense que vous vous moquez du monde.

On vous a dit de lire les posts épinglés en haut du forum pour savoir comment poster du code.

corrigez tous vos posts ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

J'en ai une paire gratuite qui traine

[code]
[/code]

je vous les donne, vous n'avez plus qu'à faire copier coller en éditant vos posts.

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

#define RFIDResetPin  2

#define buttonPin     3
// #define buzzerPin      7
#define servoPin      9
#define redLedPin     12
#define greenLedPin   13
#define blueLedPin    11
#define servoOpen     120
#define servoClose    30

LiquidCrystal monEcran (A0, A1, A2, A3, A4, A5);
Servo myservo;

boolean match = false;

void setup() {
  Serial.begin(9600);   // connect to the serial port

  monEcran.begin(16, 2);

  pinMode(buttonPin, INPUT);

  pinMode(RFIDResetPin, OUTPUT);
  digitalWrite(RFIDResetPin, HIGH);

  // pinMode(buzzerPin, OUTPUT);
  pinMode(blueLedPin, OUTPUT);
  pinMode(greenLedPin, OUTPUT);
  pinMode(redLedPin, OUTPUT);

  myservo.attach(servoPin);
  myservo.write(servoClose);
}

void loop ()
{
  byte i = 0;
  byte val = 0;
  byte code[6];
  byte checksum = 0;
  byte bytesread = 0;
  byte tempbyte = 0;

  monEcran.clear();
  monEcran.print("Bonjour");
  monEcran.setCursor(0, 1);
  monEcran.print("Présentez votre carte");

  /*
    If the button is pushed we openes the door
  */
  if (digitalRead(buttonPin))
  {
    openDoor();
    monEcran.print("Bonne journée!");
  }
  else
  {
    if (Serial.available() > 0)
    {
      if ((val = Serial.read()) == 2)
      { // check for header
        bytesread = 0;
        while (bytesread < 12)
        { // read 10 digit code + 2 digit checksum
          if ( Serial.available() > 0)
          {
            val = Serial.read();
            if ((val == 0x0D) || (val == 0x0A) || (val == 0x03) || (val == 0x02)) { // if header or stop bytes before the 10 digit reading
              break;                    // stop reading
            }

            // Do Ascii/Hex conversion:
            if ((val >= '0') && (val <= '9')) {
              val = val - '0';
            } else if ((val >= 'A') && (val <= 'F')) {
              val = 10 + val - 'A';
            }

            // Every two hex-digits, add byte to code:
            if (bytesread & 1 == 1) {
              // make some space for this hex-digit by
              // shifting the previous hex-digit with 4 bits to the left:
              code[bytesread >> 1] = (val | (tempbyte << 4));

              if (bytesread >> 1 != 5)
              { // If we're at the checksum byte,
                checksum ^= code[bytesread >> 1];       // Calculate the checksum... (XOR)
              };
            } else {
              tempbyte = val;                           // Store the first hex digit first...
            };

            bytesread++;                                // ready to read next digit
          }
        }

        // Output to Serial:

        if (bytesread == 12) {                          // if 12 digit read is complete
          Serial.print("5-byte code: ");

          for (i = 0; i < 5; i++) {
            if (code[i] < 16) Serial.print("0");
            Serial.print(code[i], HEX);
            Serial.print(" ");
          }

          Serial.println();

          Serial.print("Checksum: ");
          Serial.print(code[5], HEX);
          Serial.println(code[5] == checksum ? " <- passed." : " <- error.");
          Serial.println();

          /*
            Check if the user has access and the checksum is correct
          */
          if (accessCheck(code) == true && code[5] == checksum) {
            Serial.println("Door unlocked!");
            openDoor();
            monEcran.clear();
            monEcran.print("Accès autorisé");
            monEran.setCursor(0, 1);
            monEcran.print("Bonne journée!");
            delay(8000);
            monEcran.clear();
          } else {
            Serial.println("Access denied!");
            accessDenied();
            monEcran.clear();
            monEcran.print("! Accès rejeté !");
            delay(4000);
            monEcran.clear();
          }
        }
        bytesread = 0;
      }
    }
  }
}

boolean accessCheck(byte test[])
{
  // Number of cards
  byte rfidTags = 4;

  byte tags[40] = {
    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // Card 1
    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // Card 2
    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', // Card 3
    '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' // Card 4 };


    for (int numCards = 0; numCards < rfidTags; numCards++)
    {
      byte bytesread = 0;
      byte i = 0;
      byte val[10];

      for (byte q = 0; q < 10; q++)
      {
        val[q] = tags[numCards * 10 + q];
      }

      byte master[6];
      byte checksum = 0;
      byte tempbyte = 0;
      bytesread = 0;

      for (i = 0; i < 10; i++)  // First we need to convert the array above into a 5 HEX BYTE array
      {
        if ((val[i] >= '0') && (val[i] <= '9')) // Convert one char to HEX
        {
          val[i] = val[i] - '0';
        }
        else if ((val[i] >= 'A') && (val[i] <= 'F'))
        {
          val[i] = 10 + val[i] - 'A';
        }

        if (bytesread & 1 == 1) // Every two hex-digits, add byte to code:
        {
          // make some space for this hex-digit by
          // shifting the previous hex-digit with 4 bits to the left:
          master[bytesread >> 1] = (val[i] | (tempbyte << 4));

          if (bytesread >> 1 != 5)              // If we're at the checksum byte,
          {
            checksum ^= master[bytesread >> 1]; // Calculate the checksum... (XOR)
          };
        }
        else
        {
          tempbyte = val[i];                    // Store the first hex digit first...
        };
        bytesread++;
      }

      if ( checkTwo(test, master))              // Check to see if the master = the test ID
        return true;
    }
    return false;
  }

  // Check two arrays of bytes to see if they are exact matches
  boolean checkTwo ( byte a[], byte b[] )
  {
    if (a[0] != NULL)               // Make sure there is something in the array first
      match = true;                 // Assume they match at first

    for (int k = 0;  k < 5; k++)    // Loop 5 times
    {
      /*
        Serial.print("[");
        Serial.print(k);
        Serial.print("] ReadCard [");
        Serial.print(a[k], HEX);
        Serial.print("] StoredCard [");
        Serial.print(b[k], HEX);
        Serial.print("] \n");
      */
      if (a[k] != b[k])             // IF a != b then set match = false, one fails, all fail
      {
        match = false;
      }
    }
    if (match)                      // Check to see if if match is still true
    {
      //Serial.print("Strings Match! \n");
      return true;                  // Return true
    }
    else {
      //Serial.print("Strings do not match \n");
      return false;                 // Return false
    }
  }



  /*
    Open the door.
    - Open servo
    - Green LED blinking
    If the button is pushed after 4000ms the keepDoorOpen function is called
  */
  void openDoor()
  {
    myservo.write(servoOpen);       // Move servo to open position

    // digitalWrite(buzzerPin, HIGH);
    digitalWrite(greenLedPin, HIGH);
    delay(4000);  // The time the door needs to be open
    digitalWrite(greenLedPin, LOW);
    // digitalWrite(buzzerPin, LOW);

    if (digitalRead(buttonPin))
    {
      keepDoorOpen(); // When the button is pushed the keepDoorOpen function is activated
      openDoor(); // Run this openDoor function again when finished
    }

    myservo.write(servoClose);  // Move servo to lock position
  }

  /*
    Keeping the door open until you push the button again.
    Stays open for at least 10 * 200ms before you can push the button to lock it
    ## TODO ##
    rewrite the buttonState counter. Do not need to count to 20, just check if the
    buttonState==LOW and then HIGH. Then we do not need the 20*200ms delay
  */
  void keepDoorOpen()
  {
    Serial.println("Keeping the door open.");

    int buttonState = 1;
    while (buttonState > 0)
    {
      digitalWrite(greenLedPin, HIGH);
      delay(100);
      digitalWrite(greenLedPin, LOW);
      delay(100);
      if (buttonState <= 10) buttonState++;
      if (digitalRead(buttonPin) == HIGH && buttonState >= 10) break;
    }

    /*
      Flashes the red and green LED to indicate that this mode is about to quit
    */
    for (int i = 0; i < 4; i++)
    {
      digitalWrite(redLedPin, HIGH);
      delay(100);
      digitalWrite(redLedPin, LOW);
      digitalWrite(greenLedPin, HIGH);
      delay(100);
      digitalWrite(greenLedPin, LOW);
    }
  }

  /*
    Access denied!
    Flashes the red LED
  */
  void accessDenied()
  {
    for (int i = 0; i < 5; i++) {
      digitalWrite(redLedPin, HIGH);
      delay(100);
      digitalWrite(redLedPin, LOW);
      delay(100);
    }
  }
      if ((val = Serial.read()) == 2)

Vous êtes sûr pour le 2? (Valeur ou caractère ascii '2' ?)

Mais à quoi correspondrait ce chiffre 2 ? je comprends la fonction mais que lirait elle en fait ?

C'était ma question pour voir si vous comprenez le code...

j’essaye j’essaye…
if (Serial.available() > 0)
{
if ((val = Serial.read()) == 2)
{ // check for header
bytesread = 0;
while (bytesread < 12)

déjà la première condition permet de savoir si il y a de la data qui “arrive” je pense
ensuite la deuxième condition dépend de la lecture de qql chose mais alors quoi je ne sais pas
(PS: dsl pour le temps de réponse, je cherche un peu sur internet les thermes etc )

les thermes

wow c'est chaud :slight_smile:

Demandez vous qui parle sur cette liaison série et quel "langage" est utilisé? (Le protocole de communication)

Mdrr excusez moi faute de frappe : "les termes"

C'est le lecteur rfid qui "parle" non ? en langage ASCII ? ce qui correspondrait à STX (Start of text) ?