Popis
Čítačka RFID kariet a tagov pre frekvencie 125kHz a 13.56MHz s UART výstupom.
Špecifikácie:
Frekvencie: 13.56MHz a 125KHz
Pracovné napätie: DC 5V
Prúd: max 40mA
Rozhranie: UART
Rozmery: 47 x 26 x5 mm
Podporuje: ISO/IEC 14443 A/MIFARE, NTAG, MF1xxS20, MF1xxS70, MF1xxS50
Zápis pre: EM4100, T5577
Komunikácia:
Formát správy: 02 09 02 04 2E 53 82 F0 03
1. byte: 0x02 indikuje štart dát
2. byte: 0x09 indikuje dĺžku dát
3. byte: 0x02 indikuje typ karty EM4100 (nižšie popis kariet)
4.-7. byte: 0x04 0x2E 0x53 0x82 indikuje číslo karty
8.byte: 0xF0 BCC check od druhého bajtu
9. byte: 0x03 indikuje koniec dát
Typy kariet:
0x02 EM4100 (125kHz)
0x01 MF 1 k (13.56MHz)
0x03 MF 4 k (13.56MHz)
0x20 14443B (13.56MHz)
0x61 super SIM card (?)
Pavol –
prosím vete poskytnut príklad funkčného kódu , neviem to rozbehať.
vopred Ďakujem
pavol –
#include
// RX pin 2, TX pin 3
SoftwareSerial rfidSerial(10, 9);
void setup() {
Serial.begin(9600);
rfidSerial.begin(9600);
Serial.println(“Inicializujem…”);
}
void loop() {
// Čakáme na to, kým v bufferi nebude aspoň 9 bajtov
if (rfidSerial.available() >= 9) {
byte buffer[9];
// Prečítame presne 9 bajtov
for (int i = 0; i < 9; i++) {
buffer[i] = rfidSerial.read();
}
// Overíme, či máme správny začiatok (0x02) a koniec (0x03)
if (buffer[0] == 0x02 && buffer[8] == 0x03) {
// Dĺžka by mala byť 0x09 na pozícii buffer[1]
if (buffer[1] == 0x09) {
// Typ karty z buffer[2]
byte cardType = buffer[2];
// Bajty čísla karty sú v buffer[3..6]
// (napr. 0x04, 0x2E, 0x53, 0x82)
// Môžeme si ich uložiť ako štyri bajty alebo spracovať inak
byte cardID[4];
for (int i = 0; i < 4; i++) {
cardID[i] = buffer[3 + i];
}
// BCC kontrola je v buffer[7] – treba ju overiť
// Vypočítame BCC od druhého bajtu (index 1) po siedmy bajt (index 6) a porovnáme s buffer[7]
byte calculatedBCC = 0x00;
for (int i = 1; i <= 6; i++) {
calculatedBCC ^= buffer[i];
}
if (calculatedBCC == buffer[7]) {
// Všetko sedí, môžeme spracovať údaje
Serial.print("Nacitana karta, typ: ");
switch (cardType) {
case 0x02:
Serial.print("EM4100");
break;
// Prípadne doplniť ďalšie typy kariet, ak sú definované
default:
Serial.print("Nezname ID typu (0x");
Serial.print(cardType, HEX);
Serial.print(")");
break;
}
Serial.print(", ID: 0x");
for (int i = 0; i < 4; i++) {
if (cardID[i] < 0x10) {
Serial.print("0"); // Doplníme nulu pri hex výstupe
}
Serial.print(cardID[i], HEX);
}
Serial.println();
} else {
Serial.println("BCC nesedi, sprava poskodena.");
}
} else {
Serial.println("Nespravna dlzka dat, ignorujem.");
}
} else {
Serial.println("Nespravny start alebo end bajt, ignorujem.");
}
}
}