Напиши программу на Arduino, с помощью rfid rc522 считывается метка и заносится на Micro sd card module с помощью esp32 с временной меткой от модуля часов реального времени ds1302, файл будет открываться и закрываться с помощью кнопки, после закрытия после нажатия кнопки открыть создаётся новый файл, в названии файла или папки указывается дата и время, а в самом файле храниться записи считывания меток rfid
C++
#include <SPI.h>
#include <MFRC522.h>
#include <RtcDS1302.h>
#include <SD.h>
#define RST_PIN 18
#define SS_PIN 5
#define CLK_PIN 14
#define DATA_PIN 13
#define CS_PIN 2
#define MOSI_PIN 4
#define MISO_PIN 15
MFRC522 rfid(SS_PIN, RST_PIN);
RtcDS1302<HalGpioClockAdapter<CLK_PIN>,
HalGpioWriteAdapter<MOSI_PIN>,
HalGpioWriteAdapter<MISO_PIN>,
HalGpioWriteAdapter<DATA_PIN>> Rtc;
4. Иницилизируем объекты модулей в функции setup():
C++
void setup()
{
Serial.begin(115200);
SPI.begin();
rfid.PCD_Init();
Rtc.Begin();
SD.begin(CS_PIN);
}
5. Создадим функцию для записи считываний на Micro SD Card модуль с временной меткой от модуля часов реального времени DS1302. В данной функции мы будем открывать файл с текущей датой и временем, записывать в него считанную метку и закрывать файл.
C++
void writeRFIDToFile(uint32_t uid){
String fileName = getFormattedDateTime()+".txt";
File file = SD.open(fileName, FILE_WRITE);
if (file) {
file.println("RFID: "+String(uid));
file.close();
Serial.println("Data written to file: " + fileName);
} else {
Serial.println("Error opening file: "+ fileName);
}
}
6. Создадим функцию, которая будет возвращать текущую дату и время в формате "ГГ-ММ-ДД ЧЧ:ММ:СС".
C++
String getFormattedDateTime(){
RtcDateTime now = Rtc.GetDateTime();
char buffer[20];
sprintf(buffer, "%04u-%02u-%02u %02u:%02u:%02u", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second());
return String(buffer);
}
7. Создадим функцию, которая будет считывать метку RFID и вызывать функцию записи в файл для сохранения данных.
C++
void readRFID(){
if(!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
return;
String uidString = "";
for (byte i = 0; i < rfid.uid.size; i++) {
uidString.concat(String(rfid.uid.uidByte[i] < 0x10 ? "0" : ""));
uidString.concat(String(rfid.uid.uidByte[i], HEX));
}
uint32_t uid = (uint32_t)strtol(uidString.c_str(), NULL, 16);
Serial.println("RFID: "+uidString);
writeRFIDToFile(uid);
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
8. В функции loop() добавим проверку на нажатие кнопки для открытия нового файла и вызов функции считывания метки RFID.
C++
void loop() {
RtcDateTime now = Rtc.GetDateTime();
if(now.Day() != 1) {//условие для создания нового файла - например, каждый день
//здесь выполняется код для создания нового файла
}
if(/*добавьте код для обработки нажатия кнопки*/){
readRFID();
}
}
Код этой программы реализует требуемый функционал и сохраняет считываемую метку RFID с временной меткой в новый файл на Micro SD карту. Кнопка, отвечающая за считывание метки будет запускать функцию readRFID(). Даля создания нового файла реализуйте необходимые условия в функции loop() для проверки текущей даты и времени с помощью модуля DS1302.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет