Hey Leute,
habe gerade nun einen kleinen Testcode geschrieben und wollte euch fragen ob das so geht und wo mein Fehler liegt.
Switch_AO-A4 sind die Digitaleingänge der Systemsteuerung, diese habe ich in jedem Case verändert um von anderen Reader die MISO Pins durchzulassen. Geht das so?
Das "eigentliche" Programm startet mit einem Tastendruck meines Buttons, deswegen die if "Schleife".
Danach zählt die for Schleife hoch bis i<Anzahl_Leser, dieser ist bei mir 11.
Anhand dessen erstelle ich 11 Cases worin in jedem Case alle verschiedenen Switch_A0-A4 Signale unterschiedliche Signale an den Multiplexer geben.
Anschließend kommt die Abfrage ob ein Tag vorhanden ist und dieser gelesen werden kann. Wenn ja Erfolgt die Ausgabe der UID.
Nun das Problem: Es scheint als würde der Multiplexer nicht richtig funktionieren, oder aber mein Code ist total daneben. Bei der ersten Abfrage nachdem ich das System hochgefahren habe muss ich eine Kabelbrücke zwischen S1 und D haben. Nach der ersten Erkennung nehme ich dann die Brücke zwischen D und S1 ab und kann ganz normal die UID auslesen. Mit den Werten welche dann nur durch S1 hereinkommen. Wenn ich die Kabelbrücke beim ersten versuch nicht habe, findet der Reader keinen Tag.
Gibt es eine einfachere Lösung der Abfrage und der Durchschaltung?
In das System muss im nächsten Schritt eine Kontrolle der Transponder Erfolgen, (Endsystem soll ein pick to light System mit dynamischen Kisten sein)
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 5
#define SS_PIN 46
int Switch_A0 =22; // Die Ansteuerungspins für den Multiplexer
int Switch_A1 =24;
int Switch_A2 =26;
int Switch_A3 =28; // Ansteuerungspins zu Ende
const int Button_Pin1 =2; // Button zum starten des Programms in der loop
int Button_stat1 =0; // Übergabe des Zustandes
const int Button_Pin2 =3; // Später benötigte Buttons
int Button_stat2 =0; // Übergabe des Zustandes
const int Button_Pin3 =4; // Später benötigte Buttons
int Button_stat3 =0; // Übergabe des Zustandes
#define Anzahl_Leser 11
int Auftrag_1[]= {44131315815850501411418888129129}; // Später benötigtes Array
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode (Switch_A0,OUTPUT);
pinMode (Switch_A1,OUTPUT);
pinMode (Switch_A2,OUTPUT);
pinMode (Switch_A3,OUTPUT);
pinMode(Button_Pin1,INPUT);
digitalWrite(Button_Pin1,HIGH);
}
void loop() {
Button_stat1=digitalRead(Button_Pin1);
if( Button_stat1 == LOW){
for(int i=0; i<Anzahl_Leser; i++) {
switch(i) {
case 0:
digitalWrite(Switch_A0,LOW);
digitalWrite(Switch_A1,LOW);
digitalWrite(Switch_A2,LOW);
digitalWrite(Switch_A3,LOW);
Serial.println(F("Jetzt kommt Abfrage"));
//if (
mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial(); // ) { //Das if wurde vorerst auskommentiert, da es mit diesem gar nicht funktioniert hat, wahrscheinlich wegen der Verschachtelung der Schleifen.
Serial.print("Gelesene UID:");
for (byte i = 0; i < mfrc522.uid.size; i++) {
// Abstand zwischen HEX-Zahlen und führende Null bei Byte < 16
Serial.print(mfrc522.uid.uidByte[i]);// < 0x10 ? " 0" : " "); // Ausgabe und formatierung der UID wurde auskommentiert weil ich dies erstmal nicht brauche
Serial.print(mfrc522.uid.uidByte[i]);//, HEX); // Ausgabe und formatierung der UID wurde auskommentiert weil ich dies erstmal nicht brauche
}
Serial.println();
Serial.println("Abfrage zu Ende");
// Versetzt die gelesene Karte in einen Ruhemodus, um nach anderen Karten suchen zu können.
mfrc522.PICC_HaltA();
Serial.println(F("Lauf 1"));
delay(1000);
break;
// Hier soll das gleiche von vorne gehen nur halt für S2 am Multipexer
case 1:
digitalWrite(Switch_A0,HIGH);
digitalWrite(Switch_A1,LOW);
digitalWrite(Switch_A2,LOW);
digitalWrite(Switch_A3,LOW);
MFG
Orste