Сохранить ведущий нулевой HEX в строку RFID RC522 Arduino

Я использую RC522 для чтения RFID-карты. Все до тех пор, пока HEX, ведущий на 0, не сможет сохранить его в String. Но если я напечатаю его на Serial, все будет хорошо. Вот мой код:

#include <SPI.h>
#include <MFRC522.h>
#include <stdlib.h>

#define RST_PIN         9
#define SS_PIN          10

String inStringHex = "";

MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
}

void loop() {
  // Look for new cards
  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial())
  {
    //Serial.print("Card UID:");
    for (byte i = 0; i < 4; i++) {
      Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? "0" : "");
      Serial.print(mfrc522.uid.uidByte[i], HEX);
      inStringHex += String(mfrc522.uid.uidByte[i], HEX);
    }

    Serial.println();
    Serial.println(F("Hex normal"));
    Serial.print(inStringHex);
    Serial.println();
    Serial.println();

    inStringHex = "";
    delay(5000);
  }
}

Вот что отображается на серийном мониторе: введите описание изображения здесь

То, что я хочу, это String под «Hex normal» будет «04292e5a», а не «4292e5a»

Пожалуйста, помогите мне. Спасибо.

1 голос | спросил Ian 22 PMpSun, 22 Apr 2018 19:07:37 +030007Sunday 2018, 19:07:37

1 ответ


1

String(mfrc522.uid.uidByte[i], HEX) означает, что вы хотите преобразовать число в шестнадцатеричное представление строки, если вы передаете 4 в качестве входного параметра, он преобразует его в " 4 ", а не" 04 ". Вам необходимо применить аналогичный подход, как вы использовали при печати значения через UART. Например:

if (String(mfrc522.uid.uidByte[i] < 0x10) 
  inStringHex += " ";
inStringHex += String(mfrc522.uid.uidByte[i], HEX);

Лично я бы рекомендовал переключиться с Strings в статические буферы (потому что arduino имеет слишком маленькую память для динамического выделения и может возникнуть проблема с нехваткой памяти из-за фрагментации памяти):

char id[16]; 
sprintf(id, "%02x%02x%02x%02x", mfrc522.uid.uidByte[0], mfrc522.uid.uidByte[1], mfrc522.uid.uidByte[2], mfrc522.uid.uidByte[3]);
ответил gabonator 22 PMpSun, 22 Apr 2018 22:08:50 +030008Sunday 2018, 22:08:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132