Hall zusammen,
ich entwickle aktuell ein spiel in dem Mem
ory Karten mittels RFID Tags eingelesen werden sollen.
Die eingelesenen Tags werden über Seriell mittels JSON Format an die GUI in processing geschickt.
Leider habe ich immer wieder probleme mit den MFRC522 RFID Lesern.
Mal funktionieren Sie, mal nicht. Mal nur einer mal alle drei...ich fange langsam echt an mir selber zu zweifeln...Vielleicht könnt ihr mir ja helfen den Fehler zu finden warum die MFRC522 nicht zuverlässig funktionieren.
Ich benutze folgende Hardware:
1x Arduino Uno
3x MFRC522 RFID Leser
zusätzlich noch ein LEDs und einen Button, das funktioniert aber zum glück.
#include <ArduinoJson.h>
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SDA_9_PIN 7
#define SDA_8_PIN 8
#define SDA_7_PIN 10
#define NR_OF_READERS 3
byte SDAPins[] = {SDA_9_PIN, SDA_8_PIN, SDA_7_PIN};
MFRC522 rfid[NR_OF_READERS]; // Create MFRC522 instance.
int LED_0 = A0;
int LED_1 = A1;
int LED_2 = A2;
int LED_3 = A3;
int LED_4 = A4;
int LED_5 = A5;
String str_rfid0;
String str_rfid1;
String str_rfid2;
int BUTTON_2 = A6;
int buttonstatus = 0;
int LED[] = {LED_0, LED_1, LED_2, LED_3, LED_4, LED_5};
String str_rfid[]={str_rfid0,str_rfid1,str_rfid1};
StaticJsonDocument<500> jsonDoc;
char buffer1[500];
char buffer2[500];
boolean copy = true;
boolean state0;
boolean state1;
boolean state2;
boolean state[] = {state0, state1, state2};
void setup() {
pinMode(BUTTON_2, INPUT);
Serial.begin(9600);
while (!Serial);
SPI.begin();
for (uint8_t i = 0; i < 6; i++) {
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], HIGH);
delay(200);
digitalWrite(LED[i], LOW);
}
for (int reader = 0; reader < NR_OF_READERS; reader++) {
Serial.print("in for. Iteration round: ");
Serial.println(reader);
rfid[reader].PCD_Init(SDAPins[reader], RST_PIN); // Init each MFRC522 card
rfid[reader].PCD_DumpVersionToSerial();
delay(10);
turn_red_on(reader);
}
delay(500);
}
void loop() {
jsonDoc["Board"]="Uno";
buttonstatus = digitalRead(BUTTON_2);
if (buttonstatus == HIGH) {
led_disco();
}
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
digitalWrite(SDAPins[reader],HIGH);
rfid[reader].PCD_SetAntennaGain(rfid[reader].RxGain_max);
char str[32]="";
if (rfid[reader].PICC_IsNewCardPresent() && rfid[reader].PICC_ReadCardSerial()) {
array_to_string(rfid[reader].uid.uidByte,4,str);
str_rfid[reader] = str;
}
FillJson(reader,str_rfid[reader]);
rfid[reader].PICC_HaltA();
}
serializeJson(jsonDoc, buffer1);
Serial.println(buffer1);
if(Serial.available()){
int val=Serial.parseInt();
read_input(val);
}
delay(200);
}
void array_to_string(byte array[], unsigned int len, char buffer[]) {
for (unsigned int i = 0; i < len; i++) {
byte nib1 = (array[i] >> 4) & 0x0F;
byte nib2 = (array[i] >> 0) & 0x0F;
buffer[i * 2 + 0] = nib1 < 0xA ? '0' + nib1 : 'A' + nib1 - 0xA;
buffer[i * 2 + 1] = nib2 < 0xA ? '0' + nib2 : 'A' + nib2 - 0xA;
}
buffer[len * 2] = '\0';
}
void turn_green_on(int reader) {
digitalWrite(LED[reader * 2], LOW);
digitalWrite(LED[reader * 2 + 1], HIGH);
}
void turn_red_on(int reader) {
digitalWrite(LED[reader * 2], HIGH);
digitalWrite(LED[reader * 2 + 1], LOW);
}
void led_disco() {
for (int i = 0; i < 6; i++) {
digitalWrite(LED[i], LOW);
}
delay(300);
for (int i = 0; i < 6; i++) {
digitalWrite(LED[i], HIGH);
delay(300);
}
for (int i = 0; i < 6; i++) {
digitalWrite(LED[i], LOW);
}
for(int j=0;j<5;j++){
for (int i = 5; i >= 0; i--) {
digitalWrite(LED[i], HIGH);
delay(100);
digitalWrite(LED[i], LOW);
}
}
for(int j=0;j<3;j++){
for(int i=0;i<6;i++){
digitalWrite(LED[i],LOW);
}
delay(500);
for(int i=0;i<6;i++){
digitalWrite(LED[i],HIGH);
}
delay(500);
}
}
void FillJson(uint8_t reader, String str){
if(reader == 0){
jsonDoc["RFID0"] = str;
}
if(reader == 1){
jsonDoc["RFID1"] = str;
}
if(reader == 2){
jsonDoc["RFID2"] = str;
}
}
void read_input(int val){
if(val ==3){
led_disco();
for(int i = 0;i<3;i++){
turn_red_on(i);
state[val]=false;
}
}else if(state[val] == false){
state[val] = true;
turn_green_on(val);
}else{
state[val] = false;
turn_red_on(val);
}
}
Vielen Dank und beste Grüße
bigmouse68