2 RFIDs an einem ARduino

Hallo,

ich habe da mal eine Frage. Ich habe einen Arduino MKr1000 und 2 bzw. 3 RFIDs.

Wie muss ich einen Sketch verändern, damit alle ausgelesen werden.Aktuell kann ich die Nummer nur durch einen Leser auslesen.Wenn ich zwei verbinde, wird bei beiden Lesern nichts gelesen.Ich habe einfach alle Pins gesplittet und zusammen gefügt.

Bei fragen einfach schreiben, vielen Dank.

Hi

Ein Glück, daß es nur einen einzigen RFID-Leser gibt, weshalb direkt auch klar ist, wie Dieser angesprochen wird.

Ok, eine Antwort hast Du Dir trotzdem verdient: Mach's richtig, dann klappt's auch.

Wenn DU damit Nichts anfangen kannst, geht Es Dir nicht anders, als mir mit den von Dir preisgegebenen Informationen.

Sketch? Link (klickbar) zum RFID-Teil? Foto vom Aufbau? ... also ALLES, was mir/uns helfen könnte, DEIN Problem aus der Welt zu schaffen.

MfG

LINK RFID

/*  

PINBElEGUNG
 RST = 9
 SS 1 = 10
 SS 2 = 8
 MOSI = 11
 MISO 12
 SCK = 13 
 */


#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         9          
#define SS_1_PIN        10         
#define SS_2_PIN        8         

#define NR_OF_READERS   2

byte ssPins[] = {SS_1_PIN, SS_2_PIN};

MFRC522 mfrc522[NR_OF_READERS]; 

void setup()
{
Serial.begin(9600);
SPI.begin();


  
  
    

pinMode (2, OUTPUT); 


void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}

if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0;

for (byte i = 0; i < mfrc522.uid.size; i++)
{
code=((code+mfrc522.uid.uidByte[i])*10);
}

Serial.print("Die Kartennummer lautet:");

Serial.println(code);



if (code==1031720) 


digitalWrite (2, HIGH);

delay (5000); 

digitalWrite (2, LOW); 
}

}

a) dein Link auf den Leser geht nicht b) es gibt ein Beispiel in der Lib wie man mehrere Leser abfragen kann c)

pronicolas: Wie muss ich einen Sketch verändern, damit alle ausgelesen werden.

nimm 1:1 den Sketch aus der Lib und ändere gar nichts.. Das klappt so wie es die Schreiber der Lib vorgesehen haben. Wenn es nicht funktioniert machst du was falsch bei der Verkabelung.

d)

pronicolas: Aktuell kann ich die Nummer nur durch einen Leser auslesen.Wenn ich zwei verbinde, wird bei beiden Lesern nichts gelesen.Ich habe einfach alle Pins gesplittet und zusammen gefügt.

das ist das Problem. Schau dir die PIN-Belegung an: SS_1_PIN geht an Chip Select von Leser 1, SS_2_PIN geht an Chip Select von Leser 2. D.h. dieser PIN gehört je Leser SEPARAT angeschlossen.

e) wenn es dann immer noch nicht klappt, mach ein scharfes Echt-Bild worin man deutlich erkennt wie du jeden einzelnen PIN wie an den Arduino angeschlossen hast.

Hi

Als hätte ich Es geahnt - der Sketch kompiliert nicht. Die (hoffentlich) passende Lib MFRC522 in der Version 1.4.3 fand ich in der IDE. Mit schließender Klammer zwischen setup() und loop() geht's auch hier schon ein Stück weiter. Nur: mfrc522 wird nirgends deklariert - zwar laufend benutzt, gibt's aber gar nicht.

Wie wäre Es, wenn Du uns einen Sketch lieferst, Der auch, zumindest theoretisch, tut?

Du erzeugst ein Array mfrc522 - DAS wird aber, bei zwei Elementen, mit mfrc522[0] und mfrc522[1] benutzt.

Bitte passe Deinen Sketch zumindest so weit an, daß der Kompiler halbwegs glücklich damit wird - und DANN kannst Du uns sagen, was nicht so tut, wie Du Das Dir vorgestellt hast. Momentan sehe ich hier einen großen Haufen, ohne Sinn (...) zusammen kopierten Sketch, ohne auch nur einen Hauch der Idee, was darin passiert.

Kleiner Tip(p): ein Array kann man auch mit einer FOR-Schleife durchlaufen - die Anzahl der Einträge gibst Du ja selber im Sketch vor. Nur solltest Du nicht bei jedem Mückenfurz die loop() per return verlassen (aka neu starten) - SO wird Das nämlich Nichts.

MfG

Den Beispielsketch habe ich getestet und dieser funktioniert auch.

Un

pronicolas:
Den Beispielsketch habe ich getestet und dieser funktioniert auch.

Und warum testest du deinen Sketch nicht, bevor du den hier postest.
Und mit Strg+ T wird der sogar sauber und richtig formatiert, dann ist er auch besser lesbar.

Wie muss ich den Sketch denn verändern, dass ich mit den RFID eine Led im Loop schalten kann?

Hi

Zuerst sollte der Sketch kompilierbar sein :) Dann sollten die ganzen, sinnlosen, RETURN da raus. Statt Dessen musst Du die dahinter stehenden Programmteile so 'in Reihe bringen', daß Diese nur ausgeführt werden, wenn die Vorbedingungen erfüllt sind. Derzeit erledigen Das die ganzen RETURN, da Diese die loop() einfach abbrechen, wenn's nichts Neues zu tun gibt. Ist blöd - wir wollen ja was tun - z.B. auf den Reader 2 schauen, wenn der Reader 1 schon per RETURN loop verlassen hat, weil halt Da keine neue Karte erkannt wurde.

Schön wäre ein Sketch, Der kompiliert, nicht zu viele Leerzeilen (ZEILEN) am Stück enthält und lesbar eingerückt ist (STRG+T). Nett sind Kommentare, was wohl welche Zeile, Deiner Meinung nach, macht. Das hier und da eben NICHT Das gemacht wird, was Du Dir vorstellst, davon gehe ich Mal aus - sonst wärst Du wohl nicht hier ;).

MfG

PS: Da ich gerade auf mc.net war - wenn eine LED funktioniert, muß Das noch lange nicht für ein 'statt Dessen' angeschlossenes Relais das Gleiche heißen. Gab dort einen Thread mit weit über 100 Posts, bis endlich ein pinMode ins setup() gefunden hatte ...

Ich habe es jetzt formatiert, kannst du mal schauen warum der nicht kompilieren will.

/*

  PINBElEGUNG
  RST = 9
  SS 1 = 10
  SS 2 = 8
  MOSI = 11
  MISO 12
  SCK = 13
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN         9
#define SS_1_PIN        10
#define SS_2_PIN        8
#define NR_OF_READERS   2

byte ssPins[] = {SS_1_PIN, SS_2_PIN};

MFRC522 mfrc522[NR_OF_READERS];
void setup()
{

pinMode(4, OUTPUT);
}
void loop()

{
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
  }

  if ( ! mfrc522.PICC_ReadCardSerial())
  {
  }

  long code = 0;

  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    code = ((code + mfrc522.uid.uidByte[i]) * 10);
  }
  if (code == 186173590, 154173590, 159073590, 189073590 431740)

  {
    digitalWrite (4, HIGH);
    Serial.print("scharf");
  }
  if (code == 1737550)
  {
    digitalWrite (4, LOW);
    Serial.print("unscharf");
  }
}

Hi

Aus Deinem Sketch

...
MFRC522 mfrc522[NR_OF_READERS];
...
if ( ! mfrc522.PICC_IsNewCardPresent())  //in loop()

Aus dem Beispiel-Sketch “ReadUidMultiReader”

...
MFRC522 mfrc522[NR_OF_READERS];   // Create MFRC522 instance.
...
  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {  //in loop()
    // Look for new cards

    if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {

Du erzeugst ein ARRAY an RFID-Lesern, ist jeweils die obere Zeile in meinen Code-Tags.
Dann versuchst Du aber in Deinem Sketch mittels ARRAY-NAME auf den Reader zuzugreifen.
Das Beispiel greift mit dem ARRAY-ELEMENT (durch die […] gewählt) auf den entsprechenden Reader zu.

Nimm das Beispiel, packe Da Deine IDs rein und baue Dieses für Dich um.
Man muß das Rad nicht jedes Mal neu erfinden.

MfG

pronicolas: Ich habe es jetzt formatiert, kannst du mal schauen warum der nicht kompilieren will.

Und warum liest du nicht die Fehlermeldung ? Oder postest die ?

@TO: wenn du hier Hilfe haben willst:

beschreibe genau welches Systemverhalten du willst.

Bei welchen RFID Tags sollte welche LED für wie lange eingeschalten werden? Wodurch sollte die LED wieder ausgeschaltet werden? Was soll der unterschied zwischen RFID1 und RFID2 sein?

Wenn du wirklich eine Lösung haben willst, dann antworte schneller.

Der RFID hat den Co = 1542343.

Es ist egal bei welchem Leser der RFID tag gelesen wird, die Led soll wenn der Tag gelesen wurde für 5 Sekunden angehen und dann wieder aus.

Hallo, der Sketch komprimiert, funktioniert aber nicht d.h. Es funktioniert weder die LED noch wird das schalten im Monitor angezeigt.

/**
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read data from more than one PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 *
 * Example sketch/program showing how to read data from more than one PICC (that is: a RFID Tag or Card) using a
 * MFRC522 based RFID Reader on the Arduino SPI interface.
 *
 * Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!! Engineering skill
 *          and knowledge are required!
 *
 * @license Released into the public domain.
 *
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS 1    SDA(SS)      ** custom, take a unused pin, only HIGH/LOW required **
 * SPI SS 2    SDA(SS)      ** custom, take a unused pin, only HIGH/LOW required **
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 *
 */

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         7          // Configurable, see typical pin layout above
#define SS_1_PIN        4         // Configurable, take a unused pin, only HIGH/LOW required, must be diffrent to SS 2
#define SS_2_PIN        5          // Configurable, take a unused pin, only HIGH/LOW required, must be diffrent to SS 1

#define NR_OF_READERS   2

byte ssPins[] = {SS_1_PIN, SS_2_PIN};

MFRC522 mfrc522[NR_OF_READERS];   // Create MFRC522 instance.

/**
 * Initialize.
 */
void setup() {
SPI.begin();

pinMode(4, OUTPUT); 
  
}

void loop() 
{
long code=0;

for (uint8_t reader = 0; reader < NR_OF_READERS; reader++)

if (code== 186173590,154173590,159073590,189073590,431740) 

{ 

digitalWrite (4, HIGH);
Serial.print("scharf");

} 
if (code== 1737550) 
{
digitalWrite (4, LOW);
Serial.print("unscharf");
 
} 
}

Du darfst den Pin4 nicht doppelt belegen. Damit bekommst du Probleme.

Das habe ich behoben, klappt trotzdem nicht.Weder die Led reagiert noch der Monitor.Der test Sketch zum auslesen der karten funktioniert aber.

Und was genau möchtest du hier

if (code== 186173590,154173590,159073590,189073590,431740

erreichen ?

Das sind einfach mehrere RFID-Tags ,aber ich habe es auch mit einem probiert klappt trotzdem nicht.

Hi

Bitte zeige uns (ggf. erneut) Deinen aktuellen Sketch. Wenn Du so gut bist und in loop() Kommentare verteilst, was Du Dir bei welcher Zeile gedacht hast, wäre Das schon toll. Mit Fehlerbeschreibungen wie 'geht nicht', 'geht trotzdem nicht', (man stelle sich ein heulendes Kind vor) 'IMMER NOCH NICHT' ... kommen wir hier echt nicht weiter.

  • die Fehlerbeschreibungen sollten schon ungefähr erkennen lassen, daß Du Dich mit DEINEM SKETCH befasst hast
  • schön wäre. was Du bekommst und auch, was Du erwartet hast (und NEIN: nicht 'funktioniert nicht, wollte aber, daß Es funktioniert') - wäre zwar nach meinen Anforderungen richtig, dafür bekommst Du von mir trotzdem kein Zucker!

Wenn der Schnipped in #14 ungefähr die aktuelle Fassung ist: schmeiß weg, fange neu an, nimm das Beispiel mit den mehreren Lesern und baue Das SO um, daß Dein Code dort mit erkannt wird.

MfG