arduino 按下按键S1写入数据。 数据写入成功后OLED屏幕显示“write succcess!”按键S1弹起读取数据。 数据读取成功OLED屏幕显示“DATA:123456”。
时间: 2023-12-16 10:04:13 浏览: 69
arduino-onebutton:示例代码演示如何使用一个按钮进行输入
以下是可能的 Arduino 代码实现:
```C++
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define S1_PIN 2 // S1 button input pin
#define SS_PIN 10 // RFID SS pin
#define RST_PIN 9 // RFID RST pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // create MFRC522 instance
void setup() {
Serial.begin(9600);
pinMode(S1_PIN, INPUT_PULLUP); // S1 button is pull-up
SPI.begin(); // start SPI
mfrc522.PCD_Init(); // init MFRC522
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // init OLED
display.clearDisplay();
display.display();
}
void loop() {
if (digitalRead(S1_PIN) == LOW) { // S1 button pressed
writeRFID();
while (digitalRead(S1_PIN) == LOW) {} // wait for S1 button release
}
readRFID();
}
void writeRFID() {
byte data[] = {1, 2, 3, 4, 5, 6}; // data to write
if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("No card detected");
display.display();
return;
}
if (!mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, (byte*)"12345678", &(mfrc522.uid))) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Authentication failed");
display.display();
return;
}
if (!mfrc522.MIFARE_Write(4, data, sizeof(data))) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Write failed");
display.display();
return;
}
display.clearDisplay();
display.setCursor(0, 0);
display.println("Write success!");
display.display();
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
void readRFID() {
if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
return; // no card detected
}
if (!mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, (byte*)"12345678", &(mfrc522.uid))) {
return; // authentication failed
}
byte data[16];
byte size = sizeof(data);
if (!mfrc522.MIFARE_Read(4, data, &size)) {
return; // read failed
}
display.clearDisplay();
display.setCursor(0, 0);
display.print("DATA:");
for (int i = 0; i < sizeof(data); i++) {
display.print(data[i]);
}
display.display();
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
```
这段代码使用数字输入引脚 2 作为按键 S1,并在循环中轮询它。当按键 S1 被按下时,调用 `writeRFID` 函数写入数据到 RFID 卡片,并在 OLED 屏幕上显示 "Write success!"。在写入数据之前,需要使用 `PCD_Authenticate` 方法进行身份验证,并使用 `MIFARE_Write` 方法写入数据。当按键 S1 弹起时,等待它的释放。
在循环中,调用 `readRFID` 函数读取数据并在 OLED 屏幕上显示。在读取数据之前,同样需要进行身份验证,并使用 `MIFARE_Read` 方法读取数据。注意,在读取数据时,需要将 `sizeof(data)` 传递给 `MIFARE_Read` 方法,以确保正确读取数据的大小。
需要注意的是,具体的硬件连接方式可能因使用的 RFID 模块和 OLED 屏幕而异,需要根据实际情况进行调整。此外,需要使用 `PCD_Authenticate` 方法进行身份验证,使用 `MIFARE_Read` 和 `MIFARE_Write` 方法读写 RFID 卡片。在实际应用中,可能需要更复杂的身份验证和加密方案来保护数据的安全。
阅读全文