Arduino code probleme

v_Vogel29

Newbie
Registriert
Aug. 2023
Beiträge
7
ich hatte diese frage bereits im Arduino Forum (Link) gestellt konnte mir aber keiner weiterhelfen, hoffentlich könnt ihr mir helfen

Ich habe mir ein RFID reader gekauft (RC255) und eine LED sind am Arduino Uno angeschlossen (alles ist richtig verkabelt), doch die LED leuchtet nur eine Millisekunde obwohl er 5 sek leuchten sollte.
Der code ist größten teils von ChatGPT, aber auch bisl von mir.
Danke schon mal im vorraus!
Das ist der code:
(PS: die UIDs habe ich natürlich geänder für das forum)

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

#define SS_PIN 10   // Chip Select Pin
#define RST_PIN 9   // Reset Pin

MFRC522 rfid(SS_PIN, RST_PIN);  // Create MFRC522 instance

// Hier die erlaubten UID-Werte eintragen (Hex-Format)
byte allowedUID1[] = {0xD5, 0xBC, 0x41, 0x53};  // Name1
byte allowedUID2[] = {0x63, 0xE0, 0x06, 0xB7};  // Name2

int plusPin = A5;   // Pin für Plus-Strom
int minusPin = A4;  // Pin für Minus-Strom

bool accessGranted = false;

// Hier die Namen den erlaubten UID-Werten zuordnen
String allowedNames[] = {"Name1", "Name2"};

void setup() {
Serial.begin(9600);
SPI.begin();      // Init SPI bus
rfid.PCD_Init();  // Init MFRC522

pinMode(plusPin, OUTPUT);
pinMode(minusPin, OUTPUT);

digitalWrite(plusPin, LOW);   // Setze Anfangszustand aus
digitalWrite(minusPin, LOW);

Serial.println("Bereit zum Scannen...");
}

void loop() {
accessGranted = false;

// Versuche eine RFID-Karte zu erkennen
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.println("Karte erkannt!");

byte uid[4];
for (byte i = 0; i < 4; i++) {
uid[i] = rfid.uid.uidByte[i];
}

// Überprüfe, ob die UID mit den erlaubten UIDs übereinstimmt
bool matchUID1 = compareUID(uid, allowedUID1);
bool matchUID2 = compareUID(uid, allowedUID2);

if (matchUID1 || matchUID2) {
accessGranted = true;

if (matchUID1) {
Serial.println("Willkommen, " + allowedNames[0]);
} else {
Serial.println("Willkommen, " + allowedNames[1]);
}

digitalWrite(plusPin, HIGH);
digitalWrite(minusPin, HIGH);
delay(5000);  // Strom für 5 Sekunden einschalten
digitalWrite(plusPin, LOW);
digitalWrite(minusPin, LOW);
Serial.println("Strom ausgeschaltet!");
} else {
Serial.println("Zugriff verweigert - Unbekannte Karte!");
}

rfid.PICC_HaltA(); // Halt PICC (Power-down the card)
rfid.PCD_StopCrypto1(); // Stop encryption on PCD
}
 
sry hast recht, hier ist die Bibliothek
 

Anhänge

  • rfid-master.zip
    941 KB · Aufrufe: 56
Hast du mal das Arduino-Blink-Beispiel ausprobiert und verstanden, wie eine LED auf Hardware-Ebene angesteuert wird?
 
hast du einen link zur doku der Library? Ich bin nichtso der Fan davon mir Archive aus Foren herunter zu laden..
 
Macht es Sinn, dass du sowohl plusPin als auch MinusPin high bzw. low setzt?
Einer von beiden müsste doch reichen, oder nicht?

E: so ist es auch in einem Beispiel für delay() aufgeführt: https://www.arduino.cc/reference/en/language/functions/time/delay/

Wie ist denn die LED angeschlossen? Hört sich so an, als ob die die LED an zwei IOs (A5/A4) angeschlossen hast und nicht an einen IO und GND...
 
Zuletzt bearbeitet:
kartoffelpü schrieb:
Wie ist denn die LED angeschlossen?
na ich vermute mal zwischen A4 und A5. Deshalb soll er sich mal mit den Grundlagen beschäftigen, da das kompletter Unsinn ist. (Wurde auch schon im Arduino-Forum erwähnt)
 
  • Gefällt mir
Reaktionen: kartoffelpü
kartoffelpü schrieb:
Macht es Sinn, dass du sowohl plusPin als auch MinusPin high bzw. low setzt?
Einer von beiden müsste doch reichen, oder nicht?

E: so ist es auch in einem Beispiel für delay() aufgeführt: https://www.arduino.cc/reference/en/language/functions/time/delay/

Wie ist denn die LED angeschlossen? Hört sich so an, als ob die die LED an zwei IOs (A5/A4) angeschlossen hast und nicht an einen IO und GND...
aber braucht die LED nicht ein plus und ein Minus pin?
 
  • Gefällt mir
Reaktionen: madmax2010, v_Vogel29 und Rexaris
  • Gefällt mir
Reaktionen: jlnprssnr, dafReak und kartoffelpü
laut code scheint die LED an A4 und A5 angeschlossen zu sein und diese werden "gleichzeitig" auf high und dann auf low das sollte so nicht gehen, kann man zwar so machen wenn der eine low und der andere high ist schöner ist es nur Kathode gegen ground und die Anode dann auf high mit einem GPIO zu ziehen oder umgedreht pullup LED immer zu versorgen und Anode dann mit GPIO auf low ziehen.


ansonsten gut das sicher nur temporär zur anzeige und zum testen später sollte man lieber auf die delays da verzichten, sonst stop da immer für 5s das Programm.

wenn die LED auf high ziehst merk dir die zeit millis

und das auf low setzen der LEDs kann man später im weiteren Programmablauf dann immer noch machen wenn die millis + 5s abgelaufen sind
 
Zurück
Oben