Hallo,
ich habe für die Arbeit einen Kaffeautomaten umgebaut,da sich immer fremde Leute an unserem Kaffe bedienen.
Dazu Hab ich einen RFID reader und das Nokia 5110 LCD genommen,was auch bestens funktioniert.
Code kann bestimmt noch optimiert werden,aber der Uno hat noch platz genug,also verschoben auf später
Nun zu meiner Frage:
Hier nun ein teil des codes:
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LCD5110_Basic.h>
//============================ Nokia LCD =========================
LCD5110 myGLCD(9,10,11,12,13);
extern uint8_t SmallFont[];
//============================ RFID COM Port PIN =================
SoftwareSerial RFID(2, 3); // RX and TX
//============================ Initialisierung ===================
int data1 = 0;
int ok = -1;
int FreigabeLED = 6;
int Summer = 7;
int Freigabe = 8;
//============================ Liste der verfügbaern TAGS ========
int tag1[14] = {2,48,53,48,48,52,53,68,65,53,53,67,70,3}; //=ID:1
int tag2[14] = {2,48,48,48,48,54,67,54,52,65,50,65,65,3}; //=ID:2
int tag3[14] = {2,48,53,48,48,52,53,69,56,55,51,68,66,3}; //=ID:3
int tag4[14] = {2,48,48,48,48,54,67,49,70,65,51,68,48,3}; //=ID:4
int tag5[14] = {2,48,48,48,48,54,68,48,67,48,68,54,67,3}; //=ID:5
int tag6[14] = {2,48,48,48,48,54,67,54,56,68,69,68,65,3}; //=ID:6
int tag7[14] = {2,48,48,48,48,54,67,69,51,48,48,56,70,3}; //=ID:7
int tag8[14] = {2,48,53,48,48,52,53,68,53,48,56,57,68,3}; //=ID:8
int tag9[14] = {2,48,48,48,48,54,67,50,51,66,65,70,53,3}; //=ID:9
int tag10[14] = {2,53,54,48,48,51,53,57,57,66,53,52,70,3}; //=ID:10
int tag11[14] = {2,48,48,48,48,54,68,53,53,48,68,51,53,3}; //=ID:11
int tag12[14] = {2,53,54,48,48,51,53,56,69,69,51,48,69,3}; //=ID:12
int tag13[14] = {2,48,53,48,48,52,53,70,57,55,66,67,50,3}; //=ID:13
int tag14[14] = {2,48,53,48,48,52,53,70,70,69,50,53,68,3}; //=ID:14
int tag15[14] = {2,48,53,48,48,52,54,49,68,54,53,51,66,3}; //=ID:15
int tag16[14] = {2,48,53,48,48,52,54,52,67,56,65,56,53,3}; //=ID:16
int tag17[14] = {2,48,48,48,48,54,67,57,48,49,54,69,65,3}; //=ID:17
int tag18[14] = {2,48,48,48,48,54,67,55,57,56,48,57,53,3}; //=ID:18
int tag19[14] = {2,48,48,48,48,54,68,52,68,70,51,68,51,3}; //=ID:19
int tag20[14] = {2,48,53,48,48,52,53,68,53,48,56,57,68,3}; //=ID:20
int tag21[14] = {2,48,53,48,48,52,53,65,51,51,54,68,53,3}; //=ID:21
int newtag[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void setup()
{
myGLCD.InitLCD(); // LCD Initialisieren
myGLCD.setFont(SmallFont); // LCD Format deklarieren
myGLCD.clrScr(); // LCD Löschen
myGLCD.print("Starte RFID", CENTER, 0); // LCD Ausgabe
RFID.begin(9600); // start serial to RFID reader
Serial.begin(9600); // start serial to PC
delay(2000);
myGLCD.print("Init I/O", CENTER, 16); // LCD Ausgabe
pinMode(FreigabeLED, OUTPUT); // Led grün
pinMode(Summer, OUTPUT); // LED rot
digitalWrite(Summer, LOW); // Summer bei Start ausschalten
pinMode(Freigabe, OUTPUT); // Freigabe Tastatur
delay(2000);
myGLCD.print("RFID Breit", CENTER, 32); // LCD Ausgabe
delay(2000);
myGLCD.clrScr(); // LCD Löschen
myGLCD.print("Bitte", CENTER, 0); // LCD Ausgabe
myGLCD.print("RFID TAG", CENTER, 16); // LCD Ausgabe
myGLCD.print("Anlegen...", CENTER, 32); // LCD Ausgabe
}
boolean comparetag(int aa[14], int bb[14])
{
boolean ff = false;
int fg = 0;
for (int cc = 0 ; cc < 14 ; cc++)
{
if (aa[cc] == bb[cc])
{
fg++;
}
}
if (fg == 14)
{
ff = true;
}
return ff;
}
void checkmytags() // Funktion TAG Prüfen
{
ok = 0; // Variable ok
//=========================== Einzelne TAGS Lesen ====================
if (comparetag(newtag, tag1) == true)
{
ok++;
myGLCD.clrScr(); // LCD Löschen
myGLCD.print("Freigabe OK!", CENTER, 0); // LCD Ausgabe
myGLCD.print("Bezahlt!", CENTER, 16); // LCD Ausgabe
myGLCD.print("ID: 1", CENTER, 32); // LCD Ausgabe
}
Das ist der teil mit der Auswertung,hier nun das Freigeben das Tastatur:
void readTags() // Funktion TAG Lesen
{
ok = -1;
if (RFID.available() > 0)
{
// read tag numbers
delay(1500); // Serial buffer Verzögerung
for (int z = 0 ; z < 14 ; z++) // read the rest of the tag
{
data1 = RFID.read();
newtag[z] = data1;
}
RFID.flush(); // stoppt merfaches auslesen
checkmytags(); // Funktion Tags check
}
if (ok > 0) // wenn tag erkannt
{
Serial.println("Erkannt !");
digitalWrite(FreigabeLED, HIGH);
digitalWrite(Freigabe, HIGH);
digitalWrite(Summer, HIGH); // Summer Ton an
delay(150);
digitalWrite(Summer, LOW); // Summer Ton aus
delay(6500);
digitalWrite(FreigabeLED, LOW);
digitalWrite(Freigabe, LOW);
ok = -1;
myGLCD.clrScr(); // LCD Löschen
myGLCD.print("Bitte", CENTER, 0); // LCD Ausgabe
myGLCD.print("RFID TAG", CENTER, 16); // LCD Ausgabe
myGLCD.print("Anlegen...", CENTER, 32); // LCD Ausgabe
}
else if (ok == 0) // wenn nicht erkannt oder falsch
{
Serial.println("Tag falsch oder gesperrt!");
myGLCD.clrScr(); // LCD Löschen
myGLCD.print("RFID Tag", CENTER, 0); // LCD Ausgabe
myGLCD.print("Gesperrt!", CENTER, 16); // LCD Ausgabe
myGLCD.print("Nicht Bezahlt!", CENTER, 32); // LCD Ausgabe
digitalWrite(Summer, HIGH); // Summer Ton an
delay(150);
digitalWrite(Summer, LOW);
delay(150);
digitalWrite(Summer, HIGH); // Summer Ton an
delay(150);
digitalWrite(Summer, LOW);
delay(150);
digitalWrite(Summer, HIGH); // Summer Ton an
delay(150);
digitalWrite(Summer, LOW);
delay(150);
digitalWrite(Summer, HIGH); // Summer Ton an
delay(150);
digitalWrite(Summer, LOW);
delay(3000);
ok = -1;
myGLCD.clrScr(); // LCD Löschen
myGLCD.print("Bitte", CENTER, 0); // LCD Ausgabe
myGLCD.print("RFID TAG", CENTER, 16); // LCD Ausgabe
myGLCD.print("Anlegen...", CENTER, 32); // LCD Ausgabe
}
}
void loop(){
{
readTags(); // Schleife TAGS lesen
}
}
So nun möchte ich die Tags sperren oder freigeben können,am besten per Serialport.
Das ganze sollte ja dann auch verständlicher weise ins eeprom rein
Nun wie kann ich das Lösen?
Die serial Eingabe kann ich ja z.b. mit:
if (Serial.available() > 0)
{
byte inChar;
inChar = Serial.read();
if(inChar == 'Kunde1:frei')
{
// Hier dann die Funktion
}
}
lösen oder?
Aber wie kann ich denn die tags bzw.die kundenliste anlegen für frei oder gesperrt?
Danke vorab für jede Hilfe,
Mfg.
Haustechno