как записать 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();
}
//*************************************************** ******************************************* //
````````````````````````````````````









, 👍0

Обсуждение

Итак, вы разместили код. Но для того, чтобы люди могли вам помочь, пожалуйста, также включите вопрос., @MichaelT


1 ответ


1

Во-первых, вы не записываете значение int во время записи как, буфер определен как тип byte. Вы просто вводите его char* во время последовательного чтения для хранения данных. И вы записываете только первые 16 значений в свою КАРТОЧКУ, поэтому вы можете не получить ожидаемых результатов.

Тип данных

byte предоставляет только 8 бит или 1 байт ячейки памяти. Тип данных int предоставляет 2 байта или 4 байта ячейки памяти.

,