段软w 发表于 2021-6-14 18:06:24

怎么把uid转化为十进制后放到数组中

如题 现在在做一个RC522的实验TT
想问一下要是预先将一个卡号放进一个数组里,然后在读卡的时候进行两个数组匹配,来判断是否是有效的卡,应该如何弄呢?想的头都要秃了 求助各位大佬们!

读取uid的代码如下#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN);    //创建MFRC522实例
MFRC522::MIFARE_Key key;

byte nuidPICC;

void setup() {
Serial.begin(9600);
SPI.begin();            //初始化 SPI 总线
rfid.PCD_Init();      //初始化 MFRC522 卡

for (byte i = 0; i < 6; i++) {
    key.keyByte = 0xFF;
}

}

void loop() {

if(!rfid.PICC_IsNewCardPresent())
    return;


if(!rfid.PICC_ReadCardSerial())
    return;

    for (byte i = 0; i < 4; i++) {
      nuidPICC = rfid.uid.uidByte;
    }
   
    Serial.print(F("Dev1:"));
    printDec(rfid.uid.uidByte, rfid.uid.size);

//暂停PICC
rfid.PICC_HaltA();
//暂停PCD上的加密
rfid.PCD_StopCrypto1();
}


void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer < 0x10 ? "0" : "");
    Serial.print(buffer, DEC);//十进制
}
Serial.println(" ");
}如果能帮忙真的非常感谢



段软w 发表于 2021-6-14 18:08:28

题目若是说详细一些 就是如何从uid里按字节取出来 再去跟我设定好的数组进行相比较呢?十进制数的话

人造人 发表于 2021-6-14 19:49:35

直接用memcmp不行吗?

段软w 发表于 2021-6-17 10:39:48

人造人 发表于 2021-6-14 19:49
直接用memcmp不行吗?

但是uid里的是byte类型 数组里是int类型 可以互比吗{:5_100:}

人造人 发表于 2021-6-17 10:42:05

段软w 发表于 2021-6-17 10:39
但是uid里的是byte类型 数组里是int类型 可以互比吗

举个例子看看
你先给出一个uid,然后手动转换一下

段软w 发表于 2021-6-17 10:45:51

人造人 发表于 2021-6-17 10:42
举个例子看看
你先给出一个uid,然后手动转换一下

啊..是把提前设置好的uid int数组设置为byte类型的意思吗{:10_291:}不是很懂5555抱歉

人造人 发表于 2021-6-17 11:13:16

段软w 发表于 2021-6-17 10:45
啊..是把提前设置好的uid int数组设置为byte类型的意思吗不是很懂5555抱歉

你的uid是什么样子的?
这样?
0000-1234-5678-9870-0000
这样?
0000000-11111111
这样?
12-13-14-10-99-80

段软w 发表于 2021-6-17 22:42:28

人造人 发表于 2021-6-17 11:13
你的uid是什么样子的?
这样?
0000-1234-5678-9870-0000


我程序里显示卡的uid
十六进制
E9 96 07 87
十进制
233 150 07 135

人造人 发表于 2021-6-17 22:45:17

段软w 发表于 2021-6-17 10:39
但是uid里的是byte类型 数组里是int类型 可以互比吗

就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int

段软w 发表于 2021-6-18 11:16:44

人造人 发表于 2021-6-17 22:45
就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int

TT就是不太清楚怎么改{:10_250:}orz

段软w 发表于 2021-6-18 11:18:12

人造人 发表于 2021-6-17 22:45
就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int

void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer < 0x10 ? "0" : "");
    Serial.print(buffer, DEC);//十进制
}
Serial.println(" ");
}


是把括号里的byte直接改成int吗?{:10_266:}还是什么呢..orz

人造人 发表于 2021-6-18 11:35:54

段软w 发表于 2021-6-18 11:18
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
    Ser ...

这里面都是byte呀,哪来的int ?
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN);    //创建MFRC522实例
MFRC522::MIFARE_Key key;

byte nuidPICC;

void setup() {
Serial.begin(9600);
SPI.begin();            //初始化 SPI 总线
rfid.PCD_Init();      //初始化 MFRC522 卡

for (byte i = 0; i < 6; i++) {
    key.keyByte = 0xFF;
}

}

void loop() {

if(!rfid.PICC_IsNewCardPresent())
    return;


if(!rfid.PICC_ReadCardSerial())
    return;

    for (byte i = 0; i < 4; i++) {
      nuidPICC = rfid.uid.uidByte;
    }
   
    Serial.print(F("Dev1:"));
    printDec(rfid.uid.uidByte, rfid.uid.size);

//暂停PICC
rfid.PICC_HaltA();
//暂停PCD上的加密
rfid.PCD_StopCrypto1();
}


void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer < 0x10 ? "0" : "");
    Serial.print(buffer, DEC);//十进制
}
Serial.println(" ");
}

段软w 发表于 2021-6-18 15:37:58

人造人 发表于 2021-6-18 11:35
这里面都是byte呀,哪来的int ?

!喔 我直接设置byte了 谢谢!
页: [1]
查看完整版本: 怎么把uid转化为十进制后放到数组中