使用RFID在OLED显示屏上显示卡的详细信息-Arduino Uno

时间:2019-04-21 10:49:47

标签: arduino arduino-uno rfid

我仍然在学习绳索,如果答案很明显,请原谅我。我正在使用Arduino Uno和RC522 RFID读卡器。我的目的是在读卡器上扫描卡,并让I2C OLED显示屏向我显示扫描卡的人员的姓名。这是我正在使用的程序的代码-

#include <U8glib.h>
#include <LiquidCrystal.h>
#include <RFID.h>
#include <SPI.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN); 
int serNum[5];
String cardno;
int interval = 15000; // millisec 
long now = 0;
long lasttime = millis();

// change Reader ID to your name 
String readerID = "CCE3050";

void setup() { 
  Serial.begin(9600); 
  SPI.begin(); 
  rfid.init();
}

void loop() {
  now = millis();
  if (now > lasttime + interval) {
    lasttime = now; 
    Serial.print(readerID); 
    Serial.print(":"); 
    Serial.println("I am alive");
  }

  if (rfid.isCard()) {
    if (rfid.readCardSerial()) { 
      lasttime = now;

      cardno = String(rfid.serNum[0]) +
               String(rfid.serNum[1]) +
               String(rfid.serNum[2]) + 
               String(rfid.serNum[3]) + 
               String(rfid.serNum[4]);
      
      Serial.print(readerID); 
      Serial.print(":"); 
      Serial.println(cardno);
    } 
  }

  delay(5000); 
}

到目前为止,每次标记卡时,卡号都会显示在串行监视器上。但是,我想为卡分配一个名称,并在将卡标记到读取器上时在OLED上显示该名称。有办法吗?

1 个答案:

答案 0 :(得分:0)

我建议创建一个struct来保存一个ID及其相关名称。

typedef struct { 
  String id; 
  String name; 
} User;

创建一个数组以容纳该结构的多个实例。

User users[MAX_USER_NUM];    // define the size

User user1 = {"123", "A"};   // {"id", "name"}
users[0] = user1;

User user2 = {"234", "B"};
users[1] = user2;

User user3 = {"345", "C"};
users[2] = user3;

然后您可以通过将id传递给这样的函数来检索用户名。

String lookup(String id) {
  for (int i = 0; i < MAX_USER_NUM; i++) {
    if (users[i].id == id) {
      return users[i].name;
    }
  }
  return "";
}