как записать int в тег RFID и при чтении сохранить его в массиве
Код записи взят из приведенного ниже примера MFRC522:
Я добавил массив для хранения значения, но он не сохраняет его как то же самое значение, записанное в него при записи. вместо этого он сохраняет его как байтовые значения. Я довольно новичок, поэтому буду признателен за любую помощь.
/*
* Запись данных карты MIFARE RFID с помощью считывателя RFID-RC522
* Использует MFRC522 — библиотеку для использования КОМПЛЕКТА МОДУЛЯ RFID ARDUINO 13,56 МГц С ТЕГАМИ SPI W И R ОТ COOQROBOT.
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*
* Требуемое оборудование:
* Ардуино
* PCD (бесконтактное соединительное устройство): ИС бесконтактного считывателя NXP MFRC522
* PICC (Proximity Integrated Circuit Card): карта или метка, использующая интерфейс ISO 14443A, например, Mifare или NTAG203.
* Ридер можно найти на eBay примерно за 5 долларов. Найдите «mf-rc522» на ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Настраиваемый, см. типичное расположение выводов выше
#define SS_PIN 10 // Настраиваемый, см. типичное расположение выводов выше
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем экземпляр MFRC522
void setup() {
Serial.begin(9600); // Инициализируем последовательную связь с ПК
SPI.begin(); // Инициируем шину SPI
mfrc522.PCD_Init(); // Инициализация карты MFRC522
Serial.println(F("Write personal data on a MIFARE PICC "));
}
void loop() {
// Подготовить ключ - все ключи установлены на FFFFFFFFFFFFh при доставке чипа с завода.
MFRC522::MIFARE_Key key;
for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
// Сбросить цикл, если на датчике/считывателе нет новой карты. Это сохраняет весь процесс при простое.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбираем одну из карт
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
byte buffer[34];
byte block;
MFRC522::StatusCode status;
byte len;
Serial.setTimeout(20000L) ; // ждем 20 секунд для ввода с серийного номера
// Запрашиваем личные данные: Фамилия
Serial.println(F("Enter the weight, ending with#"));
len = Serial.readBytesUntil('#', (char *) buffer, 30) ; // прочитать фамилию из серийного номера
for (byte i = len; i < 30; i++) buffer[i] = ' '; // дополнить пробелами
block = 1;
//Serial.println(F("Аутентификация по ключу A..."));
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F("PCD_Authenticate() failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println(F("PCD_Authenticate() success: "));
// Запись блока
status = mfrc522.MIFARE_Write(block, buffer, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("MIFARE_Write() failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println(F("MIFARE_Write() success: "));
}
и код чтения:
/*
* Первоначальный автор: ryand1011 (https://github.com/ryand1011)
*
* Считывает данные, записанные такой программой, как "rfid_write_personal_data.ino"
*
* См.: https://github.com/miguelbalboa/rfid/tree/master/examples/rfid_write_personal_data
*
* Использует карту MIFARE RFID с помощью считывателя RFID-RC522.
* Использует MFRC522 - библиотека
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Настраиваемый, см. типичное расположение выводов выше
#define SS_PIN 10 // Настраиваемый, см. типичное расположение выводов выше
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем экземпляр MFRC522
int weightArray[2];
int counter = 0;
//*************************************************** ******************************************* //
void setup() {
Serial.begin(9600); // Инициализируем последовательную связь с ПК
SPI.begin(); // Инициируем шину SPI
mfrc522.PCD_Init(); // Инициализация карты MFRC522
Serial.println(F("Read personal data on a MIFARE PICC:")); // показывает в сериале, что он готов к чтению
}
//*************************************************** ******************************************* //
void loop() {
// Подготовить ключ - все ключи установлены на FFFFFFFFFFFFh при доставке чипа с завода.
MFRC522::MIFARE_Key key;
for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
// некоторые переменные, которые нам нужны
byte block;
byte len;
MFRC522::StatusCode status;
//-----------------------------------------------------------
// Сбросить цикл, если на датчике/считывателе нет новой карты. Это сохраняет весь процесс при простое.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбираем одну из карт
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
Serial.println("Detected");
byte buffer1[18];
block = 4;
len = 18;
//--------------------------------------------------------- ПОЛУЧИТЬ ИМЯ
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //строка 834 файла MFRC522.cpp
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer1, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
// ПЕЧАТЬ ИМЯ
/* for (uint8_t i = 0; i < 16; i++)
{
if (buffer1[i] != 32)
{
Serial.write(buffer1[i]);
}
}
Serial.print(" ");
*/
//------------------------------------------------------- ПОЛУЧИТЬ ФАМИЛИЮ
byte buffer2[18];
block = 1;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //строка 834
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer2, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
// ПЕЧАТАТЬ ФАМИЛИЮ
for (uint8_t i = 0; i < 16; i++) {
Serial.write(buffer2[i]);
}
for(int i = 0; i < sizeof(weightArray) / sizeof(weightArray[1]); i++) {
Serial.print(weightArray[i]);
}
counter++;
Serial.println(F("\n**End Reading**\n"));
delay(1000); //изменить значение, если хотите быстрее читать карты
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
//*************************************************** ******************************************* //
````````````````````````````````````
@Jay, 👍0
Обсуждение1 ответ
▲ 1
Во-первых, вы не записываете значение int
во время записи как, буфер определен как тип byte
. Вы просто вводите его char*
во время последовательного чтения для хранения данных. И вы записываете только первые 16 значений в свою КАРТОЧКУ, поэтому вы можете не получить ожидаемых результатов.
byte
предоставляет только 8 бит
или 1 байт
ячейки памяти.
Тип данных int
предоставляет 2 байта
или 4 байта
ячейки памяти.
,
@Vaibhav
Смотрите также:
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Питание светодиодной ленты - Сколько ампер?
- Arduino nano как клавиатура HID
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
Итак, вы разместили код. Но для того, чтобы люди могли вам помочь, пожалуйста, также включите вопрос., @MichaelT