Hola a todos y muy buenas, tengo echo un sistema rfid para el control de acceso de una puerta y lo tengo echo con una lcd para que ponga el estado en el que se encuentra, el problema es que se acumula la pantalla los mensajes de uno a otro. ayudaaa por favor no se seguir graciass.
/* ARDUINO RFID-RC522 PUERTA DE SEGURIDAD
* CONEXIONES:
*
* RELE = 4
* RFID-RC522 ARDUINO UNO
* -------------------------------------
* 3.3V 3.3V
* RST PIN 9
* GND GND
* RQ --
* MISO PIN 12
* MOSI PIN 11
* SCK PIN 13
* SDA PIN 10
*/
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <SPI.h>
#include <MFRC522.h>
#define rele A1
#define pitido A2
boolean coincide = false;
boolean programMode = false;
byte guardartarjeta[4];
byte leertarjeta[4];
byte tarjetaadmin[4] = {0xE0,0x8C,0xD7,0x1F}; // TARJETA ADMINISTRADOR
#define SS_PIN 2
#define RST_PIN 3
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
lcd.begin(16, 2);
pinMode(rele, OUTPUT);
pinMode(pitido, OUTPUT);
digitalWrite(rele, HIGH);
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
}
void loop () {
int okleer;
do {
okleer = cojerid();
if (programMode) {
modoadmin();
}
else {
modonormal();
}
}
while (!okleer);
if (programMode) {
programMode = false;
if ( esAdmin(leertarjeta) ) {
return;
}
else {
if ( buscarid(leertarjeta) ) {
borrarid(leertarjeta);
}
else {
guardarid(leertarjeta);
}
}
}
else {
if ( esAdmin(leertarjeta) ) {
programMode = true;
int count = EEPROM.read(0);
}
else {
if ( buscarid(leertarjeta) ) {
abrirpuerta(9000);
}
else {
fallo();
}
}
}
}
int cojerid() {
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return 0;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return 0;
}
Serial.println("");
Serial.println("TARJETA N");
for (byte i = 0; i < mfrc522.uid.size; i++) {
leertarjeta[i] = mfrc522.uid.uidByte[i];
Serial.print(leertarjeta[i], HEX);
}
mfrc522.PICC_HaltA();
return 1;
}
void modoadmin() {
lcd.setCursor(6,0);
lcd.print("MODO");
lcd.setCursor(1,2);
lcd.print("ADMINISTRADOR");
}
void modonormal () {
lcd.setCursor(2,0);
lcd.print("EN SERVICIO");
lcd.setCursor(2,2);
lcd.print("PASE TARJETA");
}
void leerid( int number ) {
int start = (number * 4 ) - 3;
for ( int i = 0; i < 4; i++ ) {
guardartarjeta[i] = EEPROM.read(start+i);
}
}
void guardarid( byte a[] ) {
if ( !buscarid( a ) ) {
int num = EEPROM.read(0);
int start = ( num * 4 ) + 1;
num++;
EEPROM.write( 0, num );
for ( int j = 0; j < 4; j++ ) {
EEPROM.write( start+j, a[j] );
}
guardadook();
}
else {
falloguardar();
}
}
void borrarid( byte a[] ) {
if ( !buscarid( a ) ) {
falloguardar();
}
else {
int num = EEPROM.read(0);
int slot;
int start;
int looping;
int j;
int count = EEPROM.read(0);
slot = buscarids( a );
start = (slot * 4) - 3;
looping = ((num - slot) * 4);
num--;
EEPROM.write( 0, num );
for ( j = 0; j < looping; j++ ) {
EEPROM.write( start+j, EEPROM.read(start+4+j));
}
for ( int k = 0; k < 4; k++ ) {
EEPROM.write( start+j+k, 0);
}
borradook();
}
}
boolean comprobar ( byte a[], byte b[] ) {
if ( a[0] != NULL )
coincide = true;
for ( int k = 0; k < 4; k++ ) { // Loop 4 times
if ( a[k] != b[k] )
coincide = false;
}
if ( coincide ) {
return true;
}
else {
return false;
}
}
int buscarids( byte find[] ) {
int count = EEPROM.read(0);
for ( int i = 1; i <= count; i++ ) {
leerid(i);
if( comprobar( find, guardartarjeta ) ) {
return i;
break;
}
}
}
boolean buscarid( byte find[] ) {
int count = EEPROM.read(0);
for ( int i = 1; i <= count; i++ ) {
leerid(i);
if( comprobar( find, guardartarjeta ) ) {
return true;
break;
}
else {
}
}
return false;
}
void guardadook() {
lcd.setCursor(0,0);
lcd.print("TARJETA GUARDADA");
lcd.setCursor(1,2);
lcd.print("CORRECTAMENTE");
delay(2000);
}
void falloguardar() {
lcd.setCursor(2,0);
lcd.print("ERROR AL GUARDAR");
lcd.setCursor(2,2);
lcd.print("EEPROM LLENA");
}
void borradook() {
lcd.setCursor(0,0);
lcd.print("TARJETA BORRADA");
lcd.setCursor(1,2);
lcd.print("CORRECTAMENTE");
}
boolean esAdmin( byte test[] ) {
if ( comprobar( test, tarjetaadmin ) )
return true;
else
return false;
}
void abrirpuerta( int setDelay ) {
lcd.setCursor(0,0);
lcd.print("ACCESO PERMITIDO");
lcd.setCursor(1,2);
lcd.print("PUEDE PASAR");
digitalWrite(pitido, HIGH);
digitalWrite(rele, LOW);
delay(1000); // TIEMPO DE SALIDA 1S
digitalWrite(rele, HIGH);
digitalWrite(pitido, LOW);
}
void fallo() {
lcd.setCursor(0,0);
lcd.print("ERROR TARJETA");
lcd.setCursor(1,2);
lcd.print("NO ADMITIDA");
delay(2000);
}
Saludosss