Hallo!
Ich bin neu hier im Forum und auch habe mit dem Arduino bisher nur kleine Einstiegsprojekte mit Anleitung gemacht.
Jetzt habe ich mich mal an einer eigenen Idee probiert. Ich möchte eine Art Toiletten-Ampel für die Schule bauen, da sich immer nur einer in dem Toilettenbereich aufhalten darf.
Dazu soll man sich mit einem RF-ID Chip berührungslos "einchecken", die Lampe soll von grün auf rot springen. Wenn man wieder "auscheckt", soll sie wieder grün werden. Das habe ich geschafft.
Ich wollte als Zusatz einbauen, dass die rote Lampe auch weiterhin eingeschaltet bleibt, wenn ein anderer Chip eingelesen wird und erst auf grün schaltet, wenn sich der erste wieder auscheckt.
Meine Versuche sind aber daran gescheitert, die ausgelesenen Nummern zwischenzuspeichern und zu vergleichen.
Ich habe das Auslesen als Funktion geschrieben. Wenn ich die ausgelesene Nummer dann als Variable speichern möchte, wird mir nur 0 angezeigt, beim direkten anzeigen der Methode bekomme ich die Nummer. (Serial.println(codeEins) liefert 0; Serial.println(auslesen()) liefert die Nummer)
Was habe ich denn falsch gemacht?
Ich habe einen Funduino Uno und habe den RC522 zum auslesen genutzt.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
int red = 2;
int green = 3;
long codeEins;
long codeZwei;
long auslesen() {
long code = 0;
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { //Wenn eine Karte gefunden und gelesen wird
for (byte i = 0; i < mfrc522.uid.size; i++) {
code = ((code + mfrc522.uid.uidByte[i]) * 10); //Kartennummer wird unter der Variablen "code" abgespeichert
}
}
return code;
}
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode (red, OUTPUT);
pinMode (green, OUTPUT);
}
void loop()
{
while (!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) {}
codeEins = auslesen();
Serial.print("Die Kartennummer 1 lautet:");
Serial.println(codeEins); //Hier wird nur 0 angezeigt?
// Serial.println(auslesen()); //Hier wird die Nummer tatsächlich angezeigt
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
delay(2000);
while (!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) {}
codeZwei = auslesen();
Serial.print("Die Kartennummer 2 lautet:");
Serial.println(codeZwei);
delay(1000);
while (codeEins != codeZwei) {
while (!mfrc522.PICC_IsNewCardPresent() && !mfrc522.PICC_ReadCardSerial()) {}
codeZwei = auslesen();
Serial.print("Die Kartennummer 2 lautet:");
Serial.println(auslesen());
delay(100);
}
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
delay(1000);
}