Bonsoir à tous !
Le projet : une maquette d'ouverture de barrière avec une carte RFID.
le principe : en passant la carte (la bonne !) devant le lecteur un servomoteur se met en marche,
et simultanément une led clignote et un buzzer bip-bip...
Le matériel : arduino Uno, module RFID RC522, servo SG90, led et buzzer actif.
Le code bidouillé en deux temps :
_ d'abord reconnaissance de l'UID de la carte, ça fonctionne...
_ ensuite fonctionnement simultané servo+led+buzzer, avec millis ça roule...
_ enfin je rassemble ces deux parties et le mariage est manqué; en effet après avoir passé la carte
devant le lecteur(reconnue), servo+led+buzzer se mettent en marche mais se bloquent dès que j'éloigne
la carte du lecteur.
Or dans la "vraie vie" pour faire ouvrir une barrière on présente le badge prévu quelques secondes et après la barrière continue à se lever...
Quoi donc empêche ce beau système de fonctionner correctement ?
Merci d'avance pour vos conseils éclairés... qui m'éclaireront!
[code]
//2020.04.27
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
#include<Servo.h>
Servo moteur;
int angleprecedent, anglenouveau = 0;
long tempsactuel;
long tempsprecedentmoteur = 0;
int a = 1;
long tempsprecedentled = 0;
long tempsprecedentbuzzer = 0;
int led = 3;
int buzzer = 2;
byte etatled = LOW;
byte etatbuzzer = LOW;
void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
Serial.println("Passer la carte devant le lecteur...");
Serial.println();
moteur.attach(6);
moteur.write(0);
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
}
void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
String UID= "";
for (byte i = 0; i < mfrc522.uid.size; i++)
{
if(mfrc522.uid.uidByte[i]<0x10)
{
String(mfrc522.uid.uidByte[i])=" 0";
}
else
{String(mfrc522.uid.uidByte[i])=" ";
}
UID =UID + (String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("L'UID est :");
UID.toUpperCase();
Serial.print(UID);
Serial.print(" ");
if (UID == "4A9C65A3") //UID de la carte à utiliser(sans espaces)
{
Serial.println("Carte acceptée");
Serial.println();
Moteur();
Led();
Buzzer();
}
if (UID != "4A9C65A3") {
Serial.println("Carte refusée");
}
}
void Moteur()
{
anglenouveau = angleprecedent +a;
Serial.println(anglenouveau);
tempsactuel = millis();
if ( tempsactuel - tempsprecedentmoteur > 50)
{
tempsprecedentmoteur = tempsactuel;
angleprecedent = anglenouveau;
moteur.write(anglenouveau);
}
if (anglenouveau == 150) {
a = -a;delay(3000);
}
if (anglenouveau <= 0) {
moteur.detach();
}
}
void Led() {
tempsactuel = millis();
if ((tempsactuel - tempsprecedentled) > 500)
{
etatled = !etatled;
digitalWrite(led, etatled);
tempsprecedentled = tempsactuel;
}
}
void Buzzer()
{
tempsactuel = millis();
if ((tempsactuel - tempsprecedentbuzzer) > 500)
{
etatbuzzer = !etatbuzzer;
digitalWrite(buzzer, etatbuzzer);
tempsprecedentbuzzer = tempsactuel;
}
}
[/code]