Что означают эти строки в коде считывателя RFID-карт UID?
Сейчас я работаю над проектом с использованием RFID. Мне интересно, как работают эти строки кода. Я знаю, что это как-то связано с получением UID отсканированной/поднесенной карты, но может ли кто-нибудь объяснить или подробно рассказать мне о каждой строке, как она выполняется? Большое спасибо.
String ID = "";
for (byte i = 0; i < 4; i ++) {
ID += (rfid.uid.uidByte[i] < 0x10 ? "0" : "")
+ String(rfid.uid.uidByte[i], HEX)
+ (i != 3 ? ":" : "" );
}
@A. Raymundo, 👍0
Обсуждение1 ответ
Код форматирует UUID как строку из 4 шестнадцатеричных байтов (каждый байт — пара шестнадцатеричных цифр), разделенных двоеточиями.
String ID = ""
Очистить строку
for (byte i = 0; i < 4; i ++){
Выполнить итерацию по четырем байтам UUID
ID +=
Добавьте следующее к строке «ID»
(rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
Если шестнадцатеричное число, которое должно быть отображено, меньше 0x10, добавьте ведущий '0' к строке 'ID'. Это гарантирует, что все UUID выровнены, и все байты в UUID отображаются как две шестнадцатеричные цифры (даже если нужна только одна). Он использует тернарный оператор условия, который является компактным if/then/else, который может возвращать только одно из двух значений (а не выполнять фрагменты кода). Подробнее об операторе тернарного условия см. https://en.wikipedia.org/wiki/%3F:.
String(rfid.uid.uidByte[i], HEX) +
Добавьте UUID к строке «ID» в формате HEX.
(i != 3 ? ":" : "" );
Еще один пример оператора тернарного условия. Этот добавляет двоеточие к строке 'ID' после шестнадцатеричного байта, если только индекс не равен 3 (т.е. последний).
}
Конец цикла for. Это означает, что результатом будет nn:nn:nn:nn вместо nn:nn:n:nn: (без двоеточия в конце и различного количества шестнадцатеричных цифр).
Спасибо вам, ребята, за то, что вы мне это объяснили. Я это очень ценю. :), @A. Raymundo
- Как использовать RFID-RC522 с Arduino?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Использование прерываний с RC522
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- rfid_default_keys проверить с помощью RC522
- Использование RFID-RC522 с другими контактами
- MFRC522 не сканируется карта
какую часть кода вы понимаете? .... какую часть кода вы не понимаете?, @jsotola
Мне сложно понять 4-ю и 6-ю строки этой конкретной части, так что это операторы. Большое спасибо за разъяснения., @A. Raymundo
это тернарные операторы .... функция print() получит одну из двух строк в зависимости от результата логической проверки
print( 1<2 ? "это правда" : "это не правда")
....print( 1>2 ? "это правда" : "это не правда")
..... первая выведет "это правда" .... вторая выведет "это не правда", @jsotola