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,
; // 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 <
) {
// strip out header bytes :
tag[count-4] = bytefromreader;
}
// 4 bytes received: tag serial number complete:
if ((valid == 1) && (count ==
) {
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);
}
}
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,

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 <

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

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 arduinohow 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
Post a Comment