Arduino Code Erklärung RFID

Gast #4591706
Lesenswert?

Hallo zusammen!
Bin ein relativer Neuling in der Arduino Materie, habe aber schon einige 
Bücher zur Hardware und dem Programmieren mit der IDE gelesen. Ich würde 
gerne einen Türzugangschutz mit RFID bauen (natürlich will ich das 
erstmal nicht wirklich in eine tür einbauen, weil zu unsicher und viel 
Aufwand etc., will erstmal den Aarduino und RC522 RFID Reader zum laufen 
bekommen). Dazu habe ich mir einen Code aus dem Internet für diesen 
Zweck geladen, den ich erstmal nachvollziehen will. Dazu dieser Link:
http://www.duinos.net/files/2015/rfid_lock.ino
Soweit verstehe ich das auch alles, habe auch das Video des Autors dazu 
geschaut, nur folgende Passagen geben mir Rätsel auf:
1
void dump_byte_array(byte *buffer, byte bufferSize) {
2
    read_rfid="";
3
    for (byte i = 0; i < bufferSize; i++) {
4
        read_rfid=read_rfid + String(buffer[i], HEX);

Hier wird ja eine Funktion erstellt, die die ausgelesenen Werte als HEX 
Zahl speichert(?), nur: Wie funktioniert das?

und
1
    // Look for new cards
2
    if ( ! mfrc522.PICC_IsNewCardPresent())
3
        return;
4

5
    // Select one of the cards
6
    if ( ! mfrc522.PICC_ReadCardSerial())
7
        return;

Zunächst sind das ja zwei if Operatoren, dazu folgende Fragen:

Was bedeutet das Ausrufezeichen in den Bedingungen?

Was bringen diese if Operatoren in diesem Fall?(Es ist ja nichts 
angegeben, was passieren soll, wenn die Bedingung erfüllt oder eben 
nicht erfüllt ist (keine {} nach der Bedingung), oder etwa doch?). Laut 
Kommentaren soll ja die erste quasi etwas tun, wenn eine RFID Karte da 
ist nehme ich mal an, die zweite vermutlich selbige dann auslesen bzw. 
auswählen (wie auch das mit einer if Konstruktion gehen soll...), oder?

Was bedeutet das return?(Gibt das nicht am Ende einer Funktion einen 
Wert zurück und steht hier nur formhalber, weil nichts zurückgegeben 
wird?

Ich wäre sehr dankbar, wenn jemand hier mir das erklären könnte bzw. 
einfach diese Passagen verständlich kommentieren könnte!
Gast #4591733
Lesenswert?

Jürgen_2310 schrieb:
> und
>     // Look for new cards
>     if ( ! mfrc522.PICC_IsNewCardPresent())
>         return;
>
>     // Select one of the cards
>     if ( ! mfrc522.PICC_ReadCardSerial())
>         return;
>
> Zunächst sind das ja zwei if Operatoren, dazu folgende Fragen:
>
> Was bedeutet das Ausrufezeichen in den Bedingungen?

Das Ausrufezeichen ist eine Invertierung. So wie ich den Code mit dem 
Kommentar verstehe wird zuerst eine Abfrage durchgeführt ob eine neue 
Karte vorhanden ist. Ist dies der Fall geht der Code unten 
weiter...ansonsten geht es in die Schleife und macht einen return.

Bei der zweiten If wird ja eine Karte ausgewählt. Ich könnte mir 
vorstellen dass er die verschiedenen Karten durchtestet und immer wenn 
es nicht die vorgegebene Karte ist, passiert der Return in der Schleife. 
Ist die richtige Karte ausgewählt geht es im Code weiter.

So würde ich den Code interpretieren.

Gruss und viel Spass
(Firma: Vescomp) #4591744
Lesenswert?

Jürgen_2310 schrieb:
> for (byte i = 0; i < bufferSize; i++) {
>         read_rfid=read_rfid + String(buffer[i], HEX);
>
> Hier wird ja eine Funktion erstellt, die die ausgelesenen Werte als HEX
> Zahl speichert(?), nur: Wie funktioniert das?

 Uninteressant, macht der Compiler, eine Zahl wird in ein String
 umgewandelt, kann auch BIN oder DEC anstatt HEX stehen.

> und
> Zunächst sind das ja zwei if Operatoren, dazu folgende Fragen:
>
> Was bedeutet das Ausrufezeichen in den Bedingungen?
 NOT (nicht) - Invertierung.

Jürgen_2310 schrieb:
> Ich wäre sehr dankbar, wenn jemand hier mir das erklären könnte bzw.
> einfach diese Passagen verständlich kommentieren könnte!
1
     // Look for new cards
2
     if ( ! mfrc522.PICC_IsNewCardPresent())
3
         return;

 Wenn keine neue Karte in der Nähe ist, gehe gleich zurück, die nächste
 IF-Abfrage ist sowieso nicht wahr.

1
     // Select one of the cards
2
     if ( ! mfrc522.PICC_ReadCardSerial())
3
         return;

 Eine Karte gefunden, wenn die Karte nicht gelesen werden kann, gehe
 gleich zurück, ansonsten geht es mit Programm weiter.

 P.S.
 Irgendwie fehlt da der Flag für ungültige/nicht lesbare Karten...
Gast #4591755
Lesenswert?

Vielen Dank erstmal! Jetzt erscheint mir das auch logisch ;)

Elektroniker 3.Lehrjahr schrieb:
> Bei der zweiten If wird ja eine Karte ausgewählt. Ich könnte mir
> vorstellen dass er die verschiedenen Karten durchtestet und immer wenn
> es nicht die vorgegebene Karte ist, passiert der Return

Das return steht also (in diesem Fall) nicht für einen Rückgabewert, 
sondern für eine Wiederholung, falls die Bedingung nicht erfüllt ist? 
Und kann dann auch außerhalb geschweifter Klammern stehen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren