#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
//int incomingByte = 0; // for incoming data
byte sector = 1;
byte blockAddr = 4;
byte dataBlock[] = {
0x01, 0x02, 0x03, 0x04, // 1, 2, 3, 4,
0x05, 0x06, 0x07, 0x08, // 5, 6, 7, 8,
0x09, 0x0a, 0xff, 0x0b, // 9, 10, 255, 11,
0x0c, 0x0d, 0x0e, 0x0f // 12, 13, 14, 15
};
byte trailerBlock = 7;
MFRC522::StatusCode status;
byte buffer[18];
byte size = sizeof(buffer);
/**
* Initialize.
*/
void setup() {
Serial.begin(9600); // 初始化串口,设置波特率为9600
while (!Serial); //
如果串口没有打开,则死循环下去不进行下面的操作
SPI.begin(); // 初始化SPI总线,用来和射频卡芯片RC522通信
mfrc522.PCD_Init(); // 初始化射频卡芯片RC522
// 准备射频卡的A区和B区密码,出厂值为6个0xFF。即FFFFFFFFFFFF
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println("欢迎使用射频卡积分业务");
}
/**
* Main loop.
*/
void loop() {
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if ( ! mfrc522.PICC_IsNewCardPresent()) //
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
// Authenticate using key A
Serial.println("正在认证射频卡...");
//射频卡读操作,需要用A密码认证
status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print("认证失败,密码不对");
return;
}
// Show the whole sector as it currently is
Serial.print("卡内分值:");
status = (MFRC522::StatusCode)mfrc522.MIFARE_Read(4,buffer,&size);//读取size个第blockAddr块的数据到buffer
if (status != MFRC522::STATUS_OK) {
Serial.println("数据读取错误");
return;
}
Serial.print(buffer[0]);
Serial.println("分");
if(dataBlock[0] < 255) //判断数据是否小于255
{
Serial.print("正在积分:+1");
Serial.println("分");
//验证B区的密码,写数据需要B区密码
status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.println("认证失败,密码不对");
return;
}
dataBlock[0] += 1; //充值的数量,写入缓存
status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);
if (status != MFRC522::STATUS_OK) {
Serial.println("积分失败");
}
else
{
Serial.println("积分成功");
}
delay(1000);
}
// Halt PICC
mfrc522.PICC_HaltA();
// Stop encryption on PCD
mfrc522.PCD_StopCrypto1();
}
检查一下没打开串口的时候,是不是那个参数不符合条件没有写到卡里面
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632