Connecting CLRC663 to Arduino


hello,
i want connect clrc663 module arduino have problem receiving data clrc663, module recognize tag, in arduino not receiving anything.
this datasheet of module: http://www.nxp.com/documents/data_sheet/clrc663.pdf
this code using:



#include <wire.h>
#include <eeprom.h>

// there 512 bytes of eeprom available. data stored there
//remains when arduino switched off or reset
// each tag uses 5 bytes (1 byte status, 4 bytes tag number),
//so 512 / 5 = 102 cards may stored

#define max_no_cards 102


// define led pins:
#define waitingled 7
#define successled 8
#define failureled 9

int togglestate = 0;    // state of toggling led
long toggletime = 0;    // delay time of toggling led
byte tag[4];            // tag serial numbers 4 bytes long

void setup() {           
  wire.begin();                      // join i2c bus 
  serial.begin(9600);                // set serial port

  wire.begintransmission(0x28);      // rfid reader's address 42
  wire.write(0x00);                   // length
  wire.write(0x1f);                   // reset reader
 
  wire.endtransmission();           

   
  // initialize leds:
  pinmode(waitingled, output);
  pinmode(successled, output);
  pinmode(failureled, output);

  // print user instructions serially:
  serial.println("n - add card database");
  serial.println("c - clear entire database"); 
  serial.println("d - delete card database");
  serial.println("p - print database");

  // delay allow reader startup time:
  delay(2000);
}


void loop() {
  if (serial.available() > 0) {
    // read latest byte:
    char incomingbyte = serial.read(); 
   
    switch (incomingbyte) {
    case 'n':            // if user enters 'n' store tag number
      seeknewtag();
      break; 
    case 'c':   
      eraseeeprom();    // if user enters 'c' erase database
      serial.println("database deleted");
      break;     
    case 'd':           // if user enters 'd' delete last tag
      seekanddeletetag();
      break;
    case'p':            // if user enters 'p' print database
      printtags(); 
      break;     
    }
  }
  else {
    //if there's no serial data coming in,
    // default action seek new tags:
    seeknewtag();
  }
  // delay before next command reader:
  delay(200);
}

// erase entire eeprom memory storage:
void eraseeeprom(){                 
  for(int = 0; < 512; i++){
    eeprom.write(i, 0);   
  }
}
// writes tag number in location:
void writetag(int startingaddress, byte byte0, byte byte1, byte byte2, byte byte3){   
  eeprom.write( startingaddress*5, byte(1));   
  eeprom.write(startingaddress*5+1, byte0);
  eeprom.write(startingaddress*5+2, byte1);
  eeprom.write(startingaddress*5+3, byte2);
  eeprom.write(startingaddress*5+4, byte3);

}

// delete tag specified location
void deletetag(int startingaddress){                                   
  eeprom.write( startingaddress*5, byte(0));   
  eeprom.write(startingaddress*5+1, byte(0));
  eeprom.write(startingaddress*5+2, byte(0));
  eeprom.write(startingaddress*5+3, byte(0));
  eeprom.write(startingaddress*5+4, byte(0));
}
// find first empty entry in database:
int findemptytag(){                             
  (int startingaddress = 0; startingaddress< max_no_cards; startingaddress++){
    byte value = eeprom.read(startingaddress*5);
    if (value == byte(0)) {
      return(startingaddress);
    }
  } 
  return(200);
}

// print entire database
void printtags(){                               
  (int thistag = 0; thistag< max_no_cards; thistag++){
    printonetag(thistag);
  }   
}

void printonetag(int address) {
  serial.print(address);
  serial.print(":");
  (int offset = 1; offset < 5; offset++) {
    int thisbyte = int(eeprom.read(address*5+offset));
    // if byte less 16, i.e. 1 hex character
    // add leading 0:
    if (thisbyte < 0x10) {
      serial.print("0");
    }
    // print value:
    serial.print(thisbyte,hex);
  }
  // add final linefeed , carriage return:
  serial.println();
}
//lookup tag in database:
int lookuptag(byte byte0, byte byte1, byte byte2, byte byte3){   
  (int thiscard = 0; thiscard< max_no_cards; thiscard++){
    byte value = eeprom.read(thiscard*5);   
    if (value != byte(0)){                    //it valid tag
      //see if 4 bytes same ones we're looking for
      if(byte0 == eeprom.read(thiscard*5+1) && byte1 == eeprom.read(thiscard*5+2)
        && byte2 == eeprom.read(thiscard*5+3) && byte3 == eeprom.read(thiscard*5+4)) {
        return(thiscard);
      }
    }
  }
  // if don't find tag, return 200;
  return(200);   
}

int gettag(){
  byte count = 0;
  byte valid = 0;
  byte bytefromreader = 0;

  wire.begintransmission(0x28);
  wire.write(0x01);           // length
  wire.write(0x82);           // seek tags
  wire.write(0x83);           // checksum
  wire.endtransmission();

  delay(100);
  wire.requestfrom(0x28, 8); // data (8 bytes) reader

  count = 0;                 // keeps track of byte in response reader
  valid = 0;                 // used indicate there tag there   
  while(wire.available())  { // while data coming reader
    bytefromreader = wire.read();
    // no rfid found: reader sends character 2:
    if ((count == 0) && (bytefromreader == 2)) {
      return(0);
    }
    if ((count == 0) && (bytefromreader== 6)) {
      //if reader sends 6, tag serial number coming:
      valid = 1;                                   
    }
    count++;

    if ((valid == 1) && (count > 3) && (count < 8)) {
      // strip out header bytes  :
      tag[count-4] = bytefromreader;           
    }
    // 4 bytes received: tag serial number complete:
    if ((valid == 1) && (count == 8)) {         
      return(1);
    }
  } 
}

void seeknewtag() {
  serial.println("waiting card");
  while(gettag() == 0){
    // wait tag
    if (millis() - toggletime > 1000) {
      toggle(waitingled);
      toggletime  = millis();
    }
    // unless byte of serial data,
    if (serial. available()) {
      // break out of while loop
      // , out of seeknewtag() method:
      return;
    }
  }
  blink(successled, 100, 1);

  // in database:
  int tagtocheck = lookuptag(tag[0], tag[1], tag[2], tag[3]);     

  if (tagtocheck != 200){
    serial.println("that tag stored");
    printonetag(tagtocheck);   
  }
  else {
    int emptytaglocation = findemptytag();
    if (emptytaglocation != 200){
      writetag(emptytaglocation, tag[0], tag[1], tag[2], tag[3]);   
      serial.println("that tag new"); 
      printonetag(emptytaglocation);
      blink(successled, 100, 1);
    }
    else {
      serial.println("maximum number of cards stored"); 
      blink(failureled, 50, 10);
    }
  }
}

void seekanddeletetag() {
  serial.println("deleting next card");
  serial.println("waiting card");
  while(gettag() == 0){
    // nothing; wait tag
    // unless byte of serial data,
    if (serial. available()) {
      // break out of while loop
      // , out of method:
      return;
    }
  }
  int tagtodelete = lookuptag(tag[0], tag[1], tag[2], tag[3]);     
  if (tagtodelete == 200){
    serial.print("that tag not stored");     
  }
  else {
    deletetag(tagtodelete);       
  }
}

void toggle(int thisled) {
  togglestate = !togglestate;
  digitalwrite(thisled, togglestate);
}

void blink(int thisled, int interval, int count) {
  (int = 0; < count; i++) {
    digitalwrite(thisled, high);
    delay(interval/2);
    digitalwrite(thisled, low);
    delay(interval/2);
  }
}

quote
i want connect clrc663 module arduino
how did connect it? did better job of did of reading stickies @ top of forum, ones read before posting code incorrectly.


Arduino Forum > Using Arduino > Networking, Protocols, and Devices (Moderator: fabioc84) > Connecting CLRC663 to Arduino


arduino

Comments