Arduino读取RFID卡
本帖最后由 thomas 于 2012-5-7 18:39 编辑很随意的从tb买了个RF读卡模块,串口的,准备以后加在饮水机上或者改良一下考勤机。
公司的考勤卡都是125k的ID卡,应该可以直接用。
因为是成熟模块,过于简单,半小时就全部搞定了。
补充一个重要信息:由于RX TX口被占用,下一次更新程序时,可能需要断开模块的连接,否则可能会出现程序无法更新的错误。先上模块:
(公司名隐去)
说明:
管脚定义:(从上到下)
GND
VCC(3-5V)
天线1
天线2
EN卡有效信号输出
TXD串口输出
RXD串口输入
性能参数:
输入电压:3~5.5V
输入电流:刷卡电流<25mA
通讯格式:9600-8-1串口输出卡号
(格式:1bit:start、8bit:data、1bit:stop)
有效刷卡高度:3-20cm(视天线、卡和周围环境而定)
使用环境:-25~70摄氏度
尺寸:28mm*20mm(2010最mini版)
发货清单:模块一个,天线一个
Arduino连接方式:
RF模块 Arduino
1脚 GND
2脚 +5v
3脚天线
4脚天线
5脚 D2
6脚 RX0
7脚 TX0
测试代码
//RFID test by Thomas 2012.05.07
int incomingByte = 0; // for incoming serial data
const int ENPin = 2; // the number of the EN pin
int ENState = 1;//default EN state was HIGH
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
pinMode(ENPin, INPUT);
}
void loop() {
// read the state of the EN value:
ENState = digitalRead(ENPin);
// check if the EN is LOW,the output the data.
if (ENState == LOW&&Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
读出数据输出
说下以后的想法:考勤机,一个当日过生日的员工刷考勤卡上班时,如果能给他奏上一曲《生日快乐》,是多么惬意的事情。
饮水机,做成缩小版加油机形式,刷卡饮水,记录每人用水量。(看看谁喝水太少,就应该督促一下。这个纯属无聊,公司肯定不会收水费) 沙发:lol
incomingByte =incomingByte+= Serial.read();这句的语法不太懂
原理是不是有卡放在附近,模块的5脚就会出现低电平,自动在串口输出卡里的数据?
这个能把数据写到卡里的吗? 强,程序再麻烦点儿就能取代考勤机了 本帖最后由 thomas 于 2012-5-7 17:32 编辑
悠然小调 发表于 2012-5-7 17:24 static/image/common/back.gif
沙发
incomingByte =incomingByte+= Serial.read();这句的语法不太懂
原理是不是有卡放在附近,模块的 ...
嘿嘿,这句是改着玩儿忘了改回来了。
卡在读取范围内,就会输出低电平,然后输出 读出的卡号。
ID卡是最基础的卡,好像只能读,不能写入。
做考勤机,配套个时钟电路,Flash存储应该就可以了。
本帖最后由 txmg 于 2012-5-7 17:34 编辑
为什么不能读取卡号????
另外私信 模块地址!! 本帖最后由 thomas 于 2012-5-7 17:41 编辑
txmg 发表于 2012-5-7 17:31 static/image/common/back.gif
为什么不能读取卡号????
能读啊, 02218289这个 我在变亮用了int,所以输出就这样了。
默认功能是输出hex的
--------------------------------------------
操作说明:
当在有效的刷卡范围内有卡出现时,LED 灯点亮,并串口输出4
个字节十六进制卡号。如果卡一直检测有效,LED 灯一直点亮,EN
脚一直输出低电平,但串口只输出一次有效的数据。移开卡后,灯熄
灭,管脚恢复到高电平,重新刷卡后继续送出卡号。 thomas 发表于 2012-5-7 17:34 static/image/common/back.gif
能读啊, 02218289这个
哦!是分开来的啊!可以pm模块地址吗??? http://s.taobao.com/search?q=125k+%B4%AE%BF%DA+%C4%A3%BF%E9&searcy_type=item&s_from=newHeader&source=&ssid=s5-e&search=y&initiative_id=itemz_20120507
随便搜下关键字就行了 要把这些数字合并存到一个变量里,怎么写呢? 悠然小调 发表于 2012-5-7 17:46 static/image/common/back.gif
要把这些数字合并存到一个变量里,怎么写呢?
我还没想好最简洁的方法,目前可以用数组赋值的形式。
u8glib库可以直接显示数组在12864屏上 改进了一下,以数组的形式显示卡号。这次是以16进制显示的,比较合理。
//RFID test by Thomas 2012.05.07
char Str1;
int i=0;
const int ENPin = 2; // the number of the EN pin
int ENState = 1;//default EN state was HIGH
void setup(void) {
Serial.begin(9600);
pinMode(ENPin, INPUT);
}
void loop(void) {
// read the state of the EN value:
ENState = digitalRead(ENPin);
// check if the EN is LOW,the output the data.
if (ENState == LOW&&Serial.available() > 0) {
// read the incoming byte:
Str1 = Serial.read();
if(i>=3){
i=0;
Serial.println(" ");
}
else{
Serial.print(Str1, HEX);
i++;
}
}
else{
i=0;
}
}
自带的卡号是02246681 ,读数是:016FFFFFFB6
公司的某个考勤卡号是12601058 ,读数是:07E4
还有个考勤卡号是13129568, 读数是:0FFFFFF8373
用计算器算了半天都没发现关联,不求甚解的话,还是读十进制吧;P 转化为字符型,把这几个数连起来存到一个字符型变量里可以吗?不知道怎么写? 这东西也可以玩玩,但是最近在学画图,没有时间! thomas 发表于 2012-5-7 19:46 static/image/common/back.gif
自带的卡号是02246681 ,读数是:016FFFFFFB6
公司的某个考勤卡号是12601058 ,读数是:07E4
还有个考勤卡 ...
如果我预先将一个卡号放进一个数组里,然后在读卡的时候进行两个数组匹配,来判断是否是有效的卡,应该如何弄呢,倒腾一晚上都没个头绪。。
页:
[1]
2