RFID olvasó, azonosító

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
060as
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2013. február 5. kedd, 15:02

RFID olvasó, azonosító

Hozzászólás Szerző: 060as »

Az alábbi videó láttán szeretném megépíteni hasonló módon a rendszert.
http://www.youtube.com/watch?v=RcZI6fK948w

A videóból "begépeltem" a kódot(hibákat tartalmazhat):

Kód: Egész kijelölése

include <avr/pgmspace.h>
include <avr/interrupt.h> 
include <util/delay.h>
include "lcd_drv.h" 
include "uart.h"
volatile uint8_t counter_ms; 

int main(void)
{
char i,x,error; 
char c,count,timeout;
uint8_t: code[] * {0,0,0, 6,2,9,2,1, 9,0}; 
uint8_t scanned[20] ;
lcd__inlx ();
init_uart(0); 
lcd_clear(); 
lcd_pos(0,0) ;

TCCROB = (1<<CS01) | (1<<CS00); //clk/64 
OCROA = 125-1; //lms
TIMSK m (1<<OCIEOA); //Compa overflov Interrupt 
sei ();

while(1){
lcd_clear(); lcd_pos(0,0);
lcd_text_p(PSTR("Ready"));
error = 0;
i=0;
c = uart_getc();

// Peset Counter




 cli();
count er_ms =0; 
sei(); 
count =0; 
timeout = 0;
if(c == 189 && timeout == 0){ //Start-Byte? 
x = count;
count += uart_getc(); //No of Bytss

while(x < count){ 
c = uart_getc(); 
c -= 29;
if(c> 0 && c <= 10){
if(c == 10)	//10 => 0
scanned[xJ=O; 
else
scanned[x] = c; 
x++;
count++;
}
if(c == 11) //"Stop Byte” break;
}
c = uart_getc(); //Read ETX 
timeout = 1;
while(counter_ms < 100){ 
if(uart_char_received()) { 
c = uart_getc();
timeout = 0;
}

}
for(i = 0; i < 10; i++){
if(scanned[i] != code[i]){ 
error = 1; 
break;
}
)
lcd_clear();
lcd_pos(0,0); 
if(error — 0){
lcd_text_p (PSTR ("Granted"));


lcd_pos(1, 0);
for(i = 3; i < 10; i++) //print vithout leading "0" lcd_puthex(scanned[i]);
}
else{
lcd_text_p(PSTR("Denied"));
lcd__pos (1,0); 
for(i = 3; i < 10; i++)
lcd_puthex(scanned[i]);
}
_delay_ms(2000);
}
}
ISR(TIMERO_COMPA_vect){
counter__ms++;
}
A kód számomra nem teljesen egyértelmű, hisz nem teljesen az Arduino által használt "nyelv".

Egyenlőre odáig jutottam el, hogy soros porton kiírja a beolvasott kódsort:

Kód: Egész kijelölése

189
5
39
39
39
34
38
3
189
6
30
39
30
34
35
40
3

A kártya száma a következő: 0005910156

39 = 0
39 = 0
39 = 0
34 = 5
38 = 9
30 = 1
39 = 0
30 = 1
34 = 5
35 = 6

Ezt az átalakítást szeretném elvégezni, hogy soros portra, csak a kártyaszámot írja ki, a következő módon: 0005910156

A programom jelenleg így áll:

Kód: Egész kijelölése

uint8_t val ;

void setup()
{
Serial.begin(9600); 
}

void loop()
{   
  if ( Serial.available() > 0){
    val = Serial.read();
    
  Serial.println(val);
  
  }
  
}
Hogyan tudnám megvalósítani?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RFID olvasó, azonosító

Hozzászólás Szerző: Robert »

RFID típus? Azonosító?
Keress Arduiono + RFID neve (vagy belső IC neve).

A begépelt kód C, és messze van az Arduinotól....
060as
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2013. február 5. kedd, 15:02

Re: RFID olvasó, azonosító

Hozzászólás Szerző: 060as »

EM4100 . Az IC típusa ismeretlen, de kínai... :-) Teteje le van polírozva így nem látszik semmi.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RFID olvasó, azonosító

Hozzászólás Szerző: Robert »

Szintillesztővel kösd PCre és tudd meg mi jön ki az eszközből....

Jelenleg a "van egy járművem, hányas kereket vegyek rá?" szintű a kérdés:(
060as
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2013. február 5. kedd, 15:02

Re: RFID olvasó, azonosító

Hozzászólás Szerző: 060as »

A jel ismert. Jelenleg a soros porton a következőt olvasom be : 18953930363137318963039323533403

Ez tartalmazza a számomra nem szükséges információkat. én a következőket szeretném kiszűrni. A kód 19 adatból adódik össze, a következő sorrendben:
189,5,39,30,36,31,37,3,189,6,30,39,32,35,33,40,3

Szeretném a kódsorozat összeállításából kihagyni a 189,5,3,189,6 és a 3-ast. A kimenetként 39,30,36,31,37,30,39,32,35,33-at szeretném elérni, tehát 39303631373039323533

A nem szükséges bájtokat, hogy tudnám kiszűrni?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RFID olvasó, azonosító

Hozzászólás Szerző: Robert »

Adatot tömbbe olvasod be és a szükségeset címzed.
Vagy karakterlánc és kivágod ami neked kell...
060as
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2013. február 5. kedd, 15:02

Re: RFID olvasó, azonosító

Hozzászólás Szerző: 060as »

Megoldottam, köszönöm a segítséget.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RFID olvasó, azonosító

Hozzászólás Szerző: Robert »

Mások ha belefutnak ilyenbe akkor ne kelljen keresgélniük...
A megoldást lehetne röviden?
060as
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2013. február 5. kedd, 15:02

Re: RFID olvasó, azonosító

Hozzászólás Szerző: 060as »

A teljes kód:

Kód: Egész kijelölése

uint8_t c = 20;
#include <PCD8544.h>

static PCD8544 lcd;
int LED = 13;

String readString;

void setup()
{
  lcd.begin(84, 48);
  lcd.setCursor(0, 0);
  lcd.clearLine();
  lcd.print("RFID System ");
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
  Serial.begin(9600); 
}

void loop()
{
  readString=0;
  while(Serial.available() > 0)
  {
    c=Serial.read();

    c -= 29;
    if (c==10 ){ 
      c =0;
    }
    if (c==160 ){ 
      c =99;
    }
    if (c==233 ){ 
      c =99;
    }
    if (c==232 ){ 
      c =99;
    }
    if (c==230 ){ 
      c =99;
    }
    if (c==11 ){ 
      c =99;
    }

    if (c <90){

      readString+=c;
    }
  }
  lcd.setCursor(0, 3);
  lcd.clearLine();
  lcd.print(readString);

  lcd.setCursor(0, 4);
  lcd.clearLine();
  lcd.setCursor(0, 5);
  lcd.clearLine();

  if (readString.startsWith("0123456789", 0)) { // "10 jegyu, egyedi kartyaszam"
    Serial.println("OK");
    lcd.setCursor(0, 2);
    lcd.clearLine();
    lcd.print("Nyitva");
    digitalWrite(LED, HIGH);                  

    delay(2000);               // wait for a second

    digitalWrite(LED, LOW);
    lcd.setCursor(0, 2);
    lcd.clearLine();
  }            
  else {
    lcd.setCursor(0, 2);

    lcd.print("Zarva");

  }



  delay(1000);
}
A fenti videón szereplő EM4100 szabványú RFID olvasó(ebay, 8$) és Nokia 3310 LCD.
Windows belépésre is hazsnálható az olvasó:
http://www.youtube.com/watch?v=ZaOgn21q-vg
http://www.youtube.com/watch?v=adxECAe6qos

A kód jelenleg csak egy kártyát ismer.
Még azt szeretném megoldani, hogy egy halmazban szereplő kódokat engedélyezze.

Csak egy ötlet, ami persze nem működőképes:

kodok[] = [ 01231456789 , 01231456788, 01231456799 ] ;
...
if (readString.startsWith(kodok, 0)) {
...
}

Mivel tudnám ezt megoldani?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RFID olvasó, azonosító

Hozzászólás Szerző: Robert »

A beteszem tömbbe OK.
for index=1 .. mennyi kartya van
if kartya(index)= beolvasott - stimmel :)
next
060as
DrótVégénSzéndarab
Hozzászólások: 29
Csatlakozott: 2013. február 5. kedd, 15:02

Re: RFID olvasó, azonosító

Hozzászólás Szerző: 060as »

Kifejtenéd bővebben? Nem csináltam még ilyen.

A "for index=1 " nem világos. Ha én pl a 123, 234 és a 867-et akarom a tömbbe rakni, hogy fog kinézni ?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: RFID olvasó, azonosító

Hozzászólás Szerző: Robert »

60 nap alatt arduino tanfolyam ~7. fejezete?

Illetve az elején letölthető Arduino notebook kb. közepe?
Példa:

Kód: Egész kijelölése

int myInts[6];
  int myPins[] = {2, 4, 8, 3, 6};
  int mySensVals[6] = {2, 4, -8, 3, 2};
  char message[6] = "hello";
  int myArray[10]={9,3,2,4,3,2,7,8,9,11};

For minta alapja:

Kód: Egész kijelölése

int i;
for (i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: RFID olvasó, azonosító

Hozzászólás Szerző: dpsslaser »

Pn532 játszadozot már valaki?
Még elég átlátható protokol is van hozzá!

Mint sem kevesebb társához mc522 höz......
Válasz küldése