- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 12

Thema: Arduino Uno + RFID Aktion halten bis zum nächsten Kontakt

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    In meiner Modifikation Deines Scetchs ging es um eine LED
    Also habe ich auch eine Merkvariable eingeführt.
    int ledtogglestate = LOW; //Blink LED State

    Bei drei verschiedenen LEDs muss man folglich auch die Zustände mit 3 Merkvariablen händeln.
    int led1togglestate = LOW;
    int led2togglestate = LOW;
    int led3togglestate = LOW;

    Da eine Variable die nur LOW und HIGH kennt nur die zwei Zustände einer LED darstellen kann.

    Auch vergleiche ich nirgendswo den Zustand der Merkvariable mit einem Eingang.
    Ich habe am Anfang die Variable definiert und den Startzustand festgelegt.
    Danach wird ja nur noch der aktuelle Zustand der Merkvariablen verglichen und wenn er LOW ist auf HIGH gesetzt und umgekehrt.
    Da der Programmteil immer nur aufgerufen wird wenn die Kartennummer stimmt, wird bei jedem richtigen Erkennen der Nummer einmal der Zustand gewechselt.
    Wenn also das Lesegerät eine Karte beim Davor halten mehrfach einliest, dann Toggelt die LED auch dauernd.
    Ein Delay an der Stelle ist allerdings nicht schön.
    Der Programmteil macht ja das was er soll.
    Eigentlich liegt die Baustelle beim Einlesen der Werte vom Kartenleser.
    Dort kommt normalerweise eine Verriegelung rein.
    Wird die Kartennummer erkannt, gibt man sie Weiter und speichert sie. Bei jeder neu eingelesenen Nummer wird diese mit der gespeicherten verglichen.
    Sind sie identisch verwirft man den neuen Wert.
    Damit ist es egal ob jemand die selbe Karte 2 Sekunden oder 10 Minuten vor den Sensor hält.
    Das kannst Du mit einem starren Delay niemals hinbekommen.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    04.10.2016
    Ort
    Essen
    Alter
    40
    Beiträge
    6
    Ich danke dir i_make_it.
    Code:
    #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
    Damit ist dann mein Problem endgültig gelöst, vielen dank für die nette Hilfe.

    MFG

    Black Zero

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    Schön wenn es klappt, aber wemn jemand mehr wie eine Sekunde hinhält taucht das Problem trotzdem auf.
    Eventuell denkst Du noch mal über das nach was ich oben dazu geschrieben habe.
    Das gibt dann eine 100% zuverlässige Lösung die Zeitunabhängig ist.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.10.2016
    Ort
    Essen
    Alter
    40
    Beiträge
    6
    Wie gesagt fange ich jetzt gerade erst damit an und habe so noch keine großen Elektronischen Kenntnisse
    und auch nur ein paar grundlegende Sachen damals mit HTML gelernt und kann nicht wirklich groß programmieren.
    Da ich aber diese Schaltung für ein Projekt gerade brauche, war es mir wichtig, das ich jetzt zumindest
    diesen Sketch zum laufen bekomme und er das tut was ich gerne von ihm möchte.

    Klar ist es jetzt nicht die schönste Lösung, aber für meine Zwecke reicht es erstmal, das er danach noch eine
    kurze Pause macht bis das er dann wieder den nächsten Chip ausließt oder halt den gleichen nochmal.

    Ich denke wenn ich etwas tiefer in der Materie drin bin, werde ich es bestimmt nochmal umschreiben.

    Aber bis dahin muss die Schaltung so erstmal reichen.

    Besten Dank nochmal dafür.

    MFG

    Black Zero

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    55
    Beiträge
    2.814
    Gut, solltest Du später die Zeit haben, kannst Du das machen ist auf jeden Fall robuster und eleganter.


    Sollten es mehr als 3 Karten werden (viel mehr?) schreibt man den Code auch anders.
    momentan kommt der ganze Codeblock ja für jede Kartnenummer einmal vor.
    Das gibt bei mehr Karten einen immer größer werdenden Code.
    Hier kann man zwei oder drei Arrays einführen.
    Eins mit den Merkervariablen und eins mit den Kartennummern.
    Dann werden die Kartennummern einmal oben fürs Array definiert und unten läuft dann eine Schleife durch die das Array abarbeitet.
    Ein drittes Array um die Pins für die LEDs zu adressieren.
    Bei einigen Compilern kann man den Index des Arrays nehmen und damit die Pins adressieren (vorrausgesetzt diese sind fortlaufend nummeriert).

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    04.10.2016
    Ort
    Essen
    Alter
    40
    Beiträge
    6
    In meinem Fall habe ich die Nummern halt hier im Forum durch andere ersetzt, da ich nicht weiß wie einfach die Nummern zu kopieren sind.
    Eigentlich ist eine Steuerung von 2 Sachen geplant.
    Die erste Karte soll später Relais steuern, womit ich dann ne Steckdosenleiste an und abschalten will.
    Die ganze Steuerung soll dann in meinen Schreibtisch gebaut werden und dann ist es schwer bei Fertigstellung an die Steckdose ran zu kommen.
    Darum habe ich mir das System ausgedacht.
    Die zweite Steuerung soll dann einen Motor steuern, der dann eine kleine Rollade im Schreibtisch öffnet und dann nen Powerschalter vom PC frei gibt.
    Darum sind zwei Module vollkommen ausreichend.

    Und wie gesagt, ich werde mich da noch viel weiter einarbeiten.

    MFG

    Black Zero

Ähnliche Themen

  1. Mit Taster von einem Loop zum nächsten springen
    Von Bow-Hunter im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 21
    Letzter Beitrag: 29.09.2014, 09:02
  2. Problem beim Lesen von Mifare RFID Tags mit dem Arduino NFC Shield
    Von Jonas15 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 02.04.2012, 17:58
  3. tastendruck ein, beim nächsten druck wieder aus?
    Von bigeggmc im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 23.03.2006, 11:00
  4. und auf zum nächsten: Spannung messen...
    Von boeseTURBO-CT im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 19.05.2004, 15:26
  5. 32-Bit RISC-Mikrocontroller der nächsten Generation
    Von Frank im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 27.03.2004, 12:09

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress