INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Rfid Reader für Handscanner
08.11.2013, 22:00
Beitrag #1
Rfid Reader für Handscanner
Hallo Leute,
Ich bin hier am Basteln eines Rfid Readers (Handscanner), der verschiedene Tags erkennen soll und je nach Tag verschieden Ausgaben vie LCD machen soll.
Das Auslesen der Tags funktioniert soweit, nur habe ich noch paar Probleme als Arduino-Neuling.
Nach erkennen eines Tags hört er nicht auf einzulesen, er soll desweiteren erst nach einem Tastendruck für eine bestimmte Zeit beginnen zu lesen.
Ich hoffe mir kann hier jemand einige Denkanstöße geben.
Hier der derzeitge Code:
Code:
// Rfid Reader für Handscanner mit Textausgabe
#include <SoftwareSerial.h>

#define ledPin 7
#define speakerPin 9

SoftwareSerial rfidReader = SoftwareSerial(11, -1);
byte tagCounter=0;
int stationen = 7;
char* cards[] = { // bekannte Tags
  "05000604E2",
  "",
  "",
  "",
  "",
  "",
  "4F0088925E"
};
char* station[] = { // Stationsnummer
  "Station 1",
  "Station 2",
  "Station 3",
  "Station 4",
  "Station 5",
  "Station 6",
  "Station 7"
};
char* sektor[] = { // Sektorangabe
  "X8   Y13",
  "X8   Y13",
  "X8   Y13",
  "X8   Y13",
  "X8   Y13",
  "X8   Y13",
  "X8   Y13"
};
char* info1[] = { // Hinweis zur naechsten Station
  "Suche nach",
  "",
  "",
  "",
  "",
  "",
  "",
  ""
};
char* info2[] = { // Hinweis zur naechsten Station
  "leerem Rohr",
  "",
  "",
  "",
  "",
  "",
  "",
  ""
};

void setup() {
    pinMode (ledPin, OUTPUT);
  pinMode (speakerPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(9600);
  while(!Serial);                       // nur bei Leonardo nötig
  rfidReader.begin(9600);
}
void loop (){
  
  digitalWrite(ledPin, HIGH);
   char cardNum[10];                    // array der Tagnummer
  byte cardBytes[6];                   // Byte-Version Tagnummer + Prüfsumme
  int index=0;                         // aktuelle Stelle
  byte byteIn=0;                       // byte vom RFID gelesen
  byte lastByte=0;                     // das letzte gelesene Byte
  byte checksum = 0;   // Prüfsumme Ergebnis wird hier gespeichert
  if (rfidReader.read()==2) {          // RFID reader auslesen
    while(index<12) {                  // 12 Stellen in eindeutige Seriennummer
      byteIn = rfidReader.read();      // speichert Wert in byteIn
      if ((byteIn==1) || (byteIn==2) || (byteIn==10) || (byteIn==13)) {
        return;                        // wenn STX, ETX, CR oder LF ->Pause
      }
      if (index<10) {
        cardNum[index]=byteIn;        // speichert die ersten 10 Hexzahlen (die letzten 2 sind Prüfsumme)
      }
      // Konvertiert ascii hex zu integer hex Wert
      if ((byteIn>='0') && (byteIn<='9')) {
        byteIn -= '0';
      }
      else if ((byteIn>='A') && (byteIn<='F')) {
        byteIn = (byteIn+10)-'A';
      }
      if ((index & 1) == 1) {                 // wenn ungerade Zahl verschmelzen 2 4-Bit-Ziffern zu 8-Bit-Byte
        cardBytes[index/2]= (byteIn | (lastByte<<4)); // Verschiebt die letzte Ziffer 4 Bits nach links und neue Ziffer
        if (index<10) {
          checksum ^= cardBytes[index/2];    // bis Prüfsummenwert
        }
      }
      lastByte=byteIn;                      // letze gelesen byte speichern
      index++;                              // Index hochzählen
      if (index==12) {
        cardNum[10] = '\0';                 // wenn  das Ende aller Ziffern erreicht  füge  ein Nullabschlusszeichen an
      }
    }
    int cardIndex =checkCard(cardNum);             // ob Tag gültig ist  zurück Index Nummer
    if(cardIndex>=0 && (cardBytes[5]==checksum)) { // wenn Tagnummer und Prüfsumme gültig
     bitSet(tagCounter, cardIndex);
            tongut();
      Serial.println(station[cardIndex]);      // Ausgabe Stationsnummer
      Serial.print("Stationgefunden");
      delay(1000);
      Serial.println(sektor[cardIndex]);          // Ausgabe Sektor der nächsten Station
      delay(1000);
      Serial.println(info1[cardIndex]);           // Ausgabe Info Zeile 1
      delay(1000);
      Serial.println(info2[cardIndex]);           // Ausgabe Info Zeile 2
      delay(1000);
      Serial.println(tagCounter,BIN);
      Serial.println();
      
    }
    else {
      Serial.println("unbekannte Karte");
      tone(speakerPin, 250, 250);                //Piezoton bei ungultigen Tag
      delay(250);
      tone(speakerPin, 150, 250);
      Serial.print(cardNum);
      Serial.println();
    }
  
  }
}
int checkCard(char cardNum[10]) {
  for (int x=0; x<=stationen; x++) {                // vergleiche alle bekannten Tag´s
    if(strcmp(cardNum, cards[x])==0) {          // Vergleichen mit zuletzt gelesener Tagnummer
      return (x);                               // zurück zum Index der Tagnummern
    }
  }
  return (-1);                                  // negativer Wert zeigt keine Übereinstimmung
}


//---------------------------------------------------------------------------------------------
void tongut() {                                //Piezoton bei richtigem Tag
  tone(speakerPin, 1000, 500);
  digitalWrite(ledPin, HIGH);
  delay(400);
  digitalWrite(ledPin, LOW);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  RFID ID Differenz RonSH 10 242 14.10.2016 08:42
Letzter Beitrag: RonSH
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 514 29.03.2016 16:45
Letzter Beitrag: MartinK
  Mit RFID Sensor NFC Tags steuern WIMunios 14 926 15.03.2016 12:07
Letzter Beitrag: WIMunios
  RFID-Reader an Analog Pins inski 9 654 02.03.2016 12:43
Letzter Beitrag: ArdHolger
Question Rfid Authentifizierung klebeband 16 1.402 06.01.2016 11:48
Letzter Beitrag: hotsystems
  HC-05 Ardurino Bluethooth werte übertragen RFID ChrisBeer222 0 657 10.04.2015 23:16
Letzter Beitrag: ChrisBeer222
  I2C Bytes lesen Master Reader/Slave Sender andre35 6 4.176 20.07.2014 14:42
Letzter Beitrag: andre35
Question Mit RFID relais schalten Dillinger 8 3.101 13.07.2014 13:37
Letzter Beitrag: robin
  RFID Doorlock maddig 1 1.279 10.05.2014 02:28
Letzter Beitrag: Hilgi
  RFID RC522 Arduino duemilanove Headhunter 15 7.991 11.04.2014 14:43
Letzter Beitrag: Sloompie

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste