Arduino + RFID Zustand halten bis nächsten Kontakt

Hallo,
und zwar sitze ich hier vor meinem Code und komme da nicht sinnvoll weiter.
Den Code habe ich mir aus einem anderen Projekt genommen und möchte ihn jetzt gerne
für meine Zwecke umschreiben.

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode (2, OUTPUT); // Der Pin 2 ist jetzt ein Ausgang (Hier wird eine LED angeschlossen)
}

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);

// Ab hier erfolgt die erweiterung des Programms.

if (code==1032920) // Wenn der Zahlencode 1031720 lautet...

{ // Programmabschniss öffnen

digitalWrite (2, HIGH); // ...dann soll die LED an Pin 2 leuchten...

delay (5000); // für 5 Sekunden

digitalWrite (2, LOW); // … und danach wieder aus gehen.

} // Programmabschnitt schließen

} // Sketch abschließen

Der Code bewirkt, das wenn die Karte 1032920 erkannt wird eine LED angeht, dann bleibt sie für 5 Sekunden ann und geht aus.

Jetzt möchte ich den Code so umschreiben, das die LED angeht wenn ich mit der Karte über den Empfänger gehe und solange an bleibt, bis das ich sie wieder drüber ziehe.

Wie muss ich den Code umschreiben das er das bis zum nächsten erkennen hält???

MFG

Black Zero

Hallo,

du solltest dich ggf. erst einmal durch die Tutorials arbeiten. Vorallem der Punkt "BlinkWithousDelay" ist sehr wichtig. Codekopieren ist überhaupt nicht hilfreich!

Habe mit RFID + Arduino keinerlei erfahrung.

if (code==1032920) // Wenn der Zahlencode 1031720 lautet...

{ // Programmabschniss öffnen

digitalWrite (2, HIGH); // ...dann soll die LED an Pin 2 leuchten...

delay (5000); // für 5 Sekunden

digitalWrite (2, LOW); // … und danach wieder aus gehen.

} // Programmabschnitt schließen

Aber der Abschnitt kann anders gelöst werden.

// innerhalb der loop
static byte stateLed = 0;

if(code == 1032929) {
stateLed ^= 1; // toggelt den Wert von stateLed
digitalWrite(LEDPIN, stateLed);
}

Und setze deinen Sketch bitte in Code-Tags, damit dieser besser lesbar ist.
Schaltfläche </> verwenden, oben links im Editor.

Hot, der Text wurde jetzt editiert.

sschultewolter, das ist jetzt mein erstes Projekt was ich mit dem Arduino bewerkstelligen will.

Soll jetzt aussagen, das ich die Platine vor ein paar Tagen erst bekommen habe, und jetzt gerade

erst damit anfange und noch keine große Ahnung habe.

Dazu kommt, das englische Anleitungen leider noch ein Problem für mich darstellen.

Darum wäre es sehr nett wenn du mir erklären könntest wie ich den Code

ändern muss, damit die Led beim ersten Kontakt angeht und beim nächsten wieder aus.

MFG

Black Zero

Wenn du einen komplett fertigen Sketch bekommst ist der Lerneffekt nicht gerade groß und bei jedem weiteren Problem oder Erweiterung musst du wieder nachfragen.

Was du suchst ist die Funktion eines Stromstoßschalters, diese musst du nur noch mit deinem RFID Code aktivieren und fertig.

Stromstoßschalter Arduino

Gruß

Also wenn ich das richtig sehe, dann muss der Code wie folgt aussehen:

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
pinMode (2, OUTPUT); // Der Pin 2 ist jetzt ein Ausgang (Hier wird eine LED angeschlossen)

}



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);

// Ab hier erfolgt die erweiterung des Programms.

if (code==1032920) // Wenn der Zahlencode 1031720 lautet...

{ // Programmabschniss öffnen

 if (2 == LOW) {
  digitalWrite(2, HIGH);
}

if (2 == HIGH) {
  digitalWrite(2, LOW);
}
} // Programmabschnitt schließen
  
  // put your main code here, to run repeatedly:
    
}

Doch damit funktioniert das leider nicht.

Ich dachte mir schon das das ganze doch etwas zu einfach gewesen wäre.

Wenn ich das richtig verstanden habe, dann schaut er ja welchen Zustand

if (2 == LOW) {
  digitalWrite(2, HIGH);

if = ist der Wert (2 == LOW) dann digitalWrite(2, HIGH),
ist der Wert (2 == HIGH) dann digitalWrite(2, LOW).

Wo ist jetzt hier der Haken???

MFG

Black Zero

Ich habe das ganze jetzt durch Unterstützung gelöst bekommen.

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

int led1togglestate = LOW; //Blink LED State
int led2togglestate = LOW; //Blink LED State
int led3togglestate = LOW; //Blink LED State


void setup()
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode (2, OUTPUT); // Der Pin 2 ist jetzt ein Ausgang (Hier wird eine LED angeschlossen)
  pinMode (3, OUTPUT); // Der Pin 2 ist jetzt ein Ausgang (Hier wird eine LED angeschlossen)
  pinMode (4, OUTPUT); // Der Pin 2 ist jetzt ein Ausgang (Hier wird eine LED angeschlossen)

}

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);
// Ab hier erfolgt die erweiterung des Programms.
  if (code==1232922) // Wenn der Zahlencode 1232922 lautet...
  {
    if (led1togglestate == LOW){
      led1togglestate = HIGH;
    }else{
      led1togglestate = LOW;
    }
  }  
  digitalWrite(2, led1togglestate);
delay(1000);
// Ab hier erfolgt die erweiterung des Programms.
  if (code==1232923) // Wenn der Zahlencode 1232922 lautet...
  {
    if (led2togglestate == LOW){
      led2togglestate = HIGH;
    }else{
      led2togglestate = LOW;
    }
  }  
  digitalWrite(3, led2togglestate);
delay(1000);
// Ab hier erfolgt die erweiterung des Programms.
  if (code==1232924) // Wenn der Zahlencode 1232922 lautet...
  {
    if (led3togglestate == LOW){
      led3togglestate = HIGH;
    }else{
      led3togglestate = LOW;
    }
  }  
  digitalWrite(4, led3togglestate);
delay(1000);   
} // Sketch abschließen

Hoffe das das dem ein oder anderen auch weiter hilft.

MFG

Black Zero