Codeslot met klavier RFID lezer en LCD
13 berichten
• Pagina 1 van 2 • 1, 2
- DG300flyer
- Berichten: 32
- Geregistreerd: 18 Jan 2017, 19:58
Codeslot met klavier RFID lezer en LCD
Hallo Forumleden
Hier ben ik weer met een nieuw projectje waar blijkbaar een foutje in zit zodat het geheel niet werkt zoals het hoort.
In dit projectje kan je een RFID-kaart of Tag aanbieden om in het geheugen te plaatsen zodat deze kaart of Tag achteraf door het systeem herkent word en dan toegang geeft.
Het paren van een kaart of Tag werkt blijkbaar probleemloos maar als achteraf de kaart of Tag aanbied aan de RFIDlezer blijkt de kaart of Tag niet herkent te worden.
Het is de bedoeling dat de kaartof Tag gegevens in de EEPROM wordt weggeschreven maar ik vermoed dat dit niet gebeurt zodat deze kaart of Tag achteraf niet wordt herkent.
Is er iemand die me een tip kan geven aub !!
Hier de code van het geheel, volgens mij werkt alles ( het keypad werkt vlekkeloos ) behalve het wegschrijven in de EEPROM.
Op de Serial Monitor krijg ik deze gegevens :
CODE PAIRED
6118148114aux2
107
COD6118148114COD6118148114 en toch werkt het niet !
cpp code
Hier ben ik weer met een nieuw projectje waar blijkbaar een foutje in zit zodat het geheel niet werkt zoals het hoort.
In dit projectje kan je een RFID-kaart of Tag aanbieden om in het geheugen te plaatsen zodat deze kaart of Tag achteraf door het systeem herkent word en dan toegang geeft.
Het paren van een kaart of Tag werkt blijkbaar probleemloos maar als achteraf de kaart of Tag aanbied aan de RFIDlezer blijkt de kaart of Tag niet herkent te worden.
Het is de bedoeling dat de kaartof Tag gegevens in de EEPROM wordt weggeschreven maar ik vermoed dat dit niet gebeurt zodat deze kaart of Tag achteraf niet wordt herkent.
Is er iemand die me een tip kan geven aub !!
Hier de code van het geheel, volgens mij werkt alles ( het keypad werkt vlekkeloos ) behalve het wegschrijven in de EEPROM.
Op de Serial Monitor krijg ik deze gegevens :
CODE PAIRED
6118148114aux2
107
COD6118148114COD6118148114 en toch werkt het niet !
cpp code
// Gecompileerd met IDE 1.8.1
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include<EEPROM.h>
int relPin;
int state=0;
byte COD[10];
byte AUX[10];
int k=0;
String accessCode="04091953";
String codpairing="*654321#";
//NFC
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
#define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF}
MFRC522::MIFARE_Key key;
//LCD
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//KEYPAD
const byte numRows= 4; //number of rows on the keypad
const byte numCols= 3; //number of columns on the keypad
char keymap[numRows][numCols]=
{
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
//Code that shows the the keypad connections to the arduino terminals
byte rowPins[numRows] = {2,3,4,5}; //Rows 0 to 3
byte colPins[numCols]= {A0,7,8}; //Columns 0 to 2
//initializes an instance of the Keypad class
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup() {
pinMode(A0,OUTPUT);
digitalWrite(A0,HIGH);
pinMode(A3,OUTPUT);
digitalWrite(A3,HIGH);
pinMode(A1,OUTPUT);
digitalWrite(A1,HIGH);
pinMode(A2,OUTPUT);
digitalWrite(A2,LOW);
//NFC
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
lcd.setCursor(4,0);
lcd.print( "LEES UW" );
lcd.setCursor(1,1);
lcd.print( "KAART-TAG-CODE" );
}
void readNFC(){ // This function will read the code stored on
for (byte i =0; i<(mfrc522.uid.size); i++) { // the UID
COD[i]=mfrc522.uid.uidByte[i];
}
Serial.print("COD");
Serial.print(COD[0]);
Serial.print(COD[1]);
Serial.print(COD[2]);
Serial.print(COD[3]);
}
void pairNFC(){
Serial.println("COD in pair");
Serial.print(COD[0]);
Serial.print(COD[1]);
Serial.print(COD[2]);
Serial.print(COD[3]);
long r=0;
int c=0;
for(int i=1;i<=EEPROM.read(0);i++){ //The UID cannot be stored on
switch(i%4){ // one variable, it was needed to be
case 1 :{AUX[0]=EEPROM.read(i); break;} // split
case 2 :{AUX[1]=EEPROM.read(i); break;}
case 3 :{AUX[2]=EEPROM.read(i); break;}
case 0 :{AUX[3]=EEPROM.read(i); break;}
}
if((i)%4==0)
{Serial.println(r);
if( AUX[0]==COD[0] && AUX[1]==COD[1] && AUX[2]==COD[2] && AUX[3]==COD[3] ){ //Verify if the code is in EEPROM
lcd.clear();
lcd.setCursor(0,0);
lcd.print("CODE BESTAAT AL!");
lcd.setCursor(0,1);
lcd.print("SYSTEEM");
delay(3000);
c=1;
break;}
}
}
if(c==0){int aux2=EEPROM.read(0);
Serial.println("CODE PAIRED");
Serial.print(COD[0]);
Serial.print(COD[1]);
Serial.print(COD[2]);
Serial.print(COD[3]);
EEPROM.write(aux2+1,COD[0]); //Writing code in EEPROM
EEPROM.write(aux2+2,COD[1]);
EEPROM.write(aux2+3,COD[2]);
EEPROM.write(aux2+4,COD[3]);
aux2=aux2+4; // Position for a new code
Serial.println("aux2");
Serial.println(aux2);
EEPROM.write(0,0);
EEPROM.write(0,aux2);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("SYNCRONISERING");
lcd.setCursor(6,1);
lcd.print("OK");
delay(2000);}
}
boolean validationNFC(){
boolean c=false;
for(int i=1;i<=EEPROM.read(0);i++){ //Read the EEPROM
switch(i%4){
case 1 :{AUX[0]=EEPROM.read(i); break;}
case 2 :{AUX[1]=EEPROM.read(i); break;}
case 3 :{AUX[2]=EEPROM.read(i); break;}
case 0 :{AUX[3]=EEPROM.read(i); break;}
}
if((i)%4==0)
{
if( AUX[0]==COD[0] && AUX[1]==COD[1] && AUX[2]==COD[2] &&
AUX[3]==COD[3])
c=true; //Verify if the code is in EEPROM and make flag=true;
}
}
return c;
}
int compareCODE(String a) //We type a code on keypad and this will be compared
{ //with the accessCode;
if(a.equals(accessCode))
return 1;
else if(a.equals(codpairing)) return 2;
else return 0;
}
String takeCode(char x) //Will display on the LCD the code typed
{ char vec[10];
vec[0]=x;
lcd.setCursor(0,0);
lcd.clear();
lcd.print('X');
for(int i=1;i<8;i++)
{vec[i]=myKeypad.waitForKey(); //Waits for 8 keys to be pressed and after that
lcd.print('X');} //is taking the decision
vec[8]=NULL;
String str(vec);
return str;
}
void loop() {
switch(state){
case 0: {
mfrc522.PCD_Init();
if ( mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ){
readNFC(); //It will read the card and it will search for UID in its
if(validationNFC()) //memory
{ state=1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print( " RFID CODE OK" ); //The door will be opened
delay(1000);
return;
}
else{
lcd.clear();
lcd.setCursor(1,0);
lcd.print( "VERKEERDE CODE" ); //If the code was wrongblocked
delay(2000);
lcd.clear();
lcd.setCursor(4,0);
lcd.print( "LEES UW" );
lcd.setCursor(1,1);
lcd.print( "KAART-TAG-CODE" );
return;
}
}
char c=myKeypad.getKey();
if(c != NO_KEY){
String codcurent=takeCode(c);
int A=compareCODE(codcurent);
if(A==0){ //A is a variable that stores the current code
lcd.clear();
lcd.setCursor(1,0);
lcd.print("VERKEERDE CODE");
lcd.setCursor(1,1);
lcd.print("PROBEER OPNIEUW");
delay(4000);
lcd.clear();
lcd.setCursor(4,0);
lcd.print( "LEES UW" );
lcd.setCursor(1,1);
lcd.print( "KAART-TAG-CODE" );
return;
}
if(A==1){
lcd.clear();
lcd.setCursor(1,0);
//lcd.clear();
lcd.print( "CORRECTE CODE" );
delay(1000);
state = 1;
return;
}
if(A==2); {
state=2;
lcd.clear();
lcd.setCursor(0,0);
lcd.print( " SYNCRONISERING" );
lcd.setCursor(1,1);
lcd.print( "KAART-TAG-CODE" );
delay(2000);
return;}
}
break;
}
case 1:{
lcd.clear();
lcd.setCursor(1,0);
lcd.print( "CORRECTE CODE" );
lcd.setCursor(6,1);
lcd.print( "OPEN" );
digitalWrite(A3,LOW);
digitalWrite(A1,LOW); //The red LED will be off
digitalWrite(A2,HIGH); //The green LED will be on
tone(6,3000,2000); //The buzzer will make a sound for 2 seconds
delay(2000); //After 2 seconds the system will be blocked
digitalWrite(A3,HIGH);
digitalWrite(A1,HIGH);
digitalWrite(A2,LOW);
state=0;
lcd.clear();
lcd.setCursor(4,0);
lcd.print( "LEES UW" );
lcd.setCursor(1,1);
lcd.print( "KAART-TAG-CODE" );
return;
}
case 2:{
mfrc522.PCD_Init();
if ( mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ){
readNFC();
pairNFC();
state=0;
delay(1000);
lcd.clear();
lcd.setCursor(4,0);
lcd.print( "LEES UW" );
lcd.setCursor(2,1);
lcd.print( "KAART - CODE" );}
break;
}
}
}
Advertisement
- DG300flyer
- Berichten: 32
- Geregistreerd: 18 Jan 2017, 19:58
Re: Slot met codeklavier - RFID lezer en LCD
Hallo iedereen,
Nu heb ik een kleine aanpassing in de code doorgevoerd en nu kan ik wel een kaart in het EEPROM inlezen en bij het aanbieden van die kaart opent het slot zoals het hoort maar nu kan ik maar 1 kaart in het geheugen inbrengen, wanneer ik een volgende kaart in het geheugen inlees dan verdwijnt de eerste uit het geheugen.
Heeft iemand een idee hoe ik de code moet aanpassen zodat ik alsnog meerdere kaarten in het geheugen kan inbrengen zodat het slot kan bediend worden met meerdere kaarten ?
Alex
Nu heb ik een kleine aanpassing in de code doorgevoerd en nu kan ik wel een kaart in het EEPROM inlezen en bij het aanbieden van die kaart opent het slot zoals het hoort maar nu kan ik maar 1 kaart in het geheugen inbrengen, wanneer ik een volgende kaart in het geheugen inlees dan verdwijnt de eerste uit het geheugen.
Heeft iemand een idee hoe ik de code moet aanpassen zodat ik alsnog meerdere kaarten in het geheugen kan inbrengen zodat het slot kan bediend worden met meerdere kaarten ?
Alex
Re: Codeslot met klavier RFID lezer en LCD
Hey Alex, dat is heel fijn om te horen dat het je in ieder geval gelukt is om 1 kaart kan opslaan.
op dit moment gebruik je een paar vaste lokaties in je eeprom,
wil je meerdere opslaan, dan zal je daar meerdere lokaties voor moeten gebruiken.
nu gebruik je :
EEPROM.write(aux2+1,COD[0]); //Writing code in EEPROM
EEPROM.write(aux2+2,COD[1]);
EEPROM.write(aux2+3,COD[2]);
EEPROM.write(aux2+4,COD[3]);
en volgens mij is het dan de bedoeling om aux.. variabel te maken
en dat is het in dit geval nog niet.
hopelijk kan je hier wat mee
op dit moment gebruik je een paar vaste lokaties in je eeprom,
wil je meerdere opslaan, dan zal je daar meerdere lokaties voor moeten gebruiken.
nu gebruik je :
EEPROM.write(aux2+1,COD[0]); //Writing code in EEPROM
EEPROM.write(aux2+2,COD[1]);
EEPROM.write(aux2+3,COD[2]);
EEPROM.write(aux2+4,COD[3]);
en volgens mij is het dan de bedoeling om aux.. variabel te maken
en dat is het in dit geval nog niet.
hopelijk kan je hier wat mee
Met vriendelijke groet Arjan
- DG300flyer
- Berichten: 32
- Geregistreerd: 18 Jan 2017, 19:58
Re: Codeslot met klavier RFID lezer en LCD
Hallo Arjan,
Bedankt voor uw snelle reactie, ik ben vrij nieuw in de Arduinowereld en heb al wel een paar projectjes met succes gemaakt maar het probleem is dat ik de taal C++ niet ken en dus niet versta wat er geschreven staat, dit maakt het voor mij ook uitermate moeilijk om juist te weten wat ik moet doen of veranderen.
Weet dat het script niet van mij is maar ik heb het van het internet geplukt, bij het demofilmpje dat erbij hoorde bleek alles wel te werken maar ik loop tegen het probleem aan dat ik niet meerdere kaarten in het geheugen kan stoppen ,in het originele script vind je dit stukje over het wegschrijven van een kaartcode in de EEPROM en dat werkt bij mij totaal niet :
SVP code tussen de code tags [ code2=cpp ] en[ /code2 ] (zonder spaties) zetten mvgr. moderator
cpp code
Toen heb ik het script aangepast en er het volgende van gemaakt op goed geluk :
EEPROM.write(1,COD[0]); //Writing code in EEPROM
EEPROM.write(2,COD[1]);
EEPROM.write(3,COD[2]);
EEPROM.write(4,COD[3]);
En wat blijkt dat het syteem nu de kaart die ik aanbied wel herkent maar als ik een tweede kaart tracht te paren met het systeem de eerste kaart uit het geheugen wordt gegooid en vervangen door de laatste kaart die ik aanbood om te paren.
Het zou de bedoeling moeten zijn dat ik meerdere kaarten in het geheugen kan laden en dat het syteem die ook alzo herkent.
Bedankt voor uw snelle reactie, ik ben vrij nieuw in de Arduinowereld en heb al wel een paar projectjes met succes gemaakt maar het probleem is dat ik de taal C++ niet ken en dus niet versta wat er geschreven staat, dit maakt het voor mij ook uitermate moeilijk om juist te weten wat ik moet doen of veranderen.
Weet dat het script niet van mij is maar ik heb het van het internet geplukt, bij het demofilmpje dat erbij hoorde bleek alles wel te werken maar ik loop tegen het probleem aan dat ik niet meerdere kaarten in het geheugen kan stoppen ,in het originele script vind je dit stukje over het wegschrijven van een kaartcode in de EEPROM en dat werkt bij mij totaal niet :
SVP code tussen de code tags [ code2=cpp ] en[ /code2 ] (zonder spaties) zetten mvgr. moderator
cpp code
if(c==0){int aux2=EEPROM.read(0);
Serial.println("CODE PAIRED");
Serial.print(COD[0]);
Serial.print(COD[1]);
Serial.print(COD[2]);
Serial.print(COD[3]);
EEPROM.write(aux2+1,COD[0]); //Writing code in EEPROM
EEPROM.write(aux2+2,COD[1]);
EEPROM.write(aux2+3,COD[2]);
EEPROM.write(aux2+4,COD[3]);
aux2=aux2+4; // Position for a new code
Serial.println("aux2");
enz.enz.
Toen heb ik het script aangepast en er het volgende van gemaakt op goed geluk :
EEPROM.write(1,COD[0]); //Writing code in EEPROM
EEPROM.write(2,COD[1]);
EEPROM.write(3,COD[2]);
EEPROM.write(4,COD[3]);
En wat blijkt dat het syteem nu de kaart die ik aanbied wel herkent maar als ik een tweede kaart tracht te paren met het systeem de eerste kaart uit het geheugen wordt gegooid en vervangen door de laatste kaart die ik aanbood om te paren.
Het zou de bedoeling moeten zijn dat ik meerdere kaarten in het geheugen kan laden en dat het syteem die ook alzo herkent.
Re: Codeslot met klavier RFID lezer en LCD
Beschrijf eerst eens de gegevens van de EEPROM. Hoe is het opgebouwd ?
Wat gebeurt er wanneer je een nieuwe Arduino pakt, en in lokatie 0 staat 0xFF (of een ander getal) ?
Kun je een link geven naar waar je die code hebt gevonden ? Ik heb de indruk dat die code al vreemd in elkaar zit.
Wat gebeurt er wanneer je een nieuwe Arduino pakt, en in lokatie 0 staat 0xFF (of een ander getal) ?
Kun je een link geven naar waar je die code hebt gevonden ? Ik heb de indruk dat die code al vreemd in elkaar zit.
- DG300flyer
- Berichten: 32
- Geregistreerd: 18 Jan 2017, 19:58
Re: Codeslot met klavier RFID lezer en LCD
Hallo Koepel ,
Ja hier ben ik alweer met mijn problemen.
http://www.deviceplus.com/how-tos/ardui ... door-lock/
is de link waar ik de code vandaan haalde zoals je weet is mijn kennis niet groot dus ik experimenteer wat , hoe de inhoud van de EEPROM is opgebouwd weet ik al helemaal niet want ik weet niet hoe een EEPROM de aangeboden gegevens plaatst of leest.
Ik heb nog geen ander Arduinoboardje gebruikt maar dat zal ik eens proberen om te kijken of dit een ander resultaat geeft .
Ik heb een Nano gebruikt met een 368 processor en volgens de resultaten van de schets zou er voldoende geheugen op de Nano voorhanden zijn.
Ja hier ben ik alweer met mijn problemen.
http://www.deviceplus.com/how-tos/ardui ... door-lock/
is de link waar ik de code vandaan haalde zoals je weet is mijn kennis niet groot dus ik experimenteer wat , hoe de inhoud van de EEPROM is opgebouwd weet ik al helemaal niet want ik weet niet hoe een EEPROM de aangeboden gegevens plaatst of leest.
Ik heb nog geen ander Arduinoboardje gebruikt maar dat zal ik eens proberen om te kijken of dit een ander resultaat geeft .
Ik heb een Nano gebruikt met een 368 processor en volgens de resultaten van de schets zou er voldoende geheugen op de Nano voorhanden zijn.
Re: Codeslot met klavier RFID lezer en LCD
Dat artikel in die link is van 2016, maar er bestond toen al een betere manier om het EEPROM te gebruiken met meerdere bytes tegelijk (.put en .get). Die code vind ik met name voor het EEPROM gebruik niet zo mooi gemaakt.
Het lijkt er op dat je van ons vraagt om voor jouw de code te schrijven. Dit forum is er echter voor bedoeld om jouw te vertellen hoe je zelf er iets van kunt maken.
Je kunt beginnen met https://www.arduino.cc/en/Reference/EEPROM en te bedenken hoe je het wilt opslaan, of in die bestaande sketch te kijken hoe die het opslaat.
Het lijkt er op dat je van ons vraagt om voor jouw de code te schrijven. Dit forum is er echter voor bedoeld om jouw te vertellen hoe je zelf er iets van kunt maken.
Je kunt beginnen met https://www.arduino.cc/en/Reference/EEPROM en te bedenken hoe je het wilt opslaan, of in die bestaande sketch te kijken hoe die het opslaat.
- DG300flyer
- Berichten: 32
- Geregistreerd: 18 Jan 2017, 19:58
Re: Codeslot met klavier RFID lezer en LCD
Dag Koepel ,
Ik zou heel graag zelf het probleem oplossen , het is zeker niet mijn bedoeling dat iemand voor mij een code uitschrijft maar enige ondersteuning vind ik ook niet te versmaden, dus moest je me een tip kunnen geven waar ik tot een mogelijke oplossing zou kunnen komen zou ik dat heel knap vinden.
Groeten
Alex
Ik zou heel graag zelf het probleem oplossen , het is zeker niet mijn bedoeling dat iemand voor mij een code uitschrijft maar enige ondersteuning vind ik ook niet te versmaden, dus moest je me een tip kunnen geven waar ik tot een mogelijke oplossing zou kunnen komen zou ik dat heel knap vinden.
Groeten
Alex
Re: Codeslot met klavier RFID lezer en LCD
Volgens mij heeft die code dit:
Op positie 0 in het EEPROM één byte, dat het aantal in de lijst aangeeft.
Daarna op positie 1...4 de eerste gegevens, op positie 5...8 de tweede enzovoorts.
Je kunt ook de gegevens op 0...3 zetten, de tweede op 4...7 en de lijst afsluiten met vier 0xFF.
In beide gevallen is er iets nodig om de lijst leeg te maken. Dat heb ik zo snel niet in de code gezien.
Welke van de bovenstaande manieren voor de lijst spreekt je het meeste aan ?
Op positie 0 in het EEPROM één byte, dat het aantal in de lijst aangeeft.
Daarna op positie 1...4 de eerste gegevens, op positie 5...8 de tweede enzovoorts.
Je kunt ook de gegevens op 0...3 zetten, de tweede op 4...7 en de lijst afsluiten met vier 0xFF.
In beide gevallen is er iets nodig om de lijst leeg te maken. Dat heb ik zo snel niet in de code gezien.
Welke van de bovenstaande manieren voor de lijst spreekt je het meeste aan ?
- DG300flyer
- Berichten: 32
- Geregistreerd: 18 Jan 2017, 19:58
Re: Codeslot met klavier RFID lezer en LCD
Hallo Koepel ,
Bedankt voor de tip ,
Ik ga het eens proberen met de eerste mogelijkheid die jij voorstelt ( Op positie 0 in het EEPROM één byte, dat het aantal in de lijst aangeeft.Daarna op positie 1...4 de eerste gegevens, op positie 5...8 de tweede enzovoorts. )
Je leest ervan !
Dank u
Alex
Bedankt voor de tip ,
Ik ga het eens proberen met de eerste mogelijkheid die jij voorstelt ( Op positie 0 in het EEPROM één byte, dat het aantal in de lijst aangeeft.Daarna op positie 1...4 de eerste gegevens, op positie 5...8 de tweede enzovoorts. )
Je leest ervan !
Dank u
Alex
13 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 26 gasten