arduino rc522 想要每次刷卡增值1,但为什么关掉串口监视器后每次刷卡第二次又返回到原值

#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