Помогите! Как добавить второй UID в скетче

Здравствуйте! Помогите добавить второй UID в скетче для RFID замка. Просто сам не понимаю.

#include <Servo.h> //подключаем библиотеку для работы с сервоприводом
#include <SPI.h> //подключаем библиотеку
#include <MFRC522.h> //подключаем библиотеку №2
MFRC522 mfrc522(10, 9); //указываем порты подключения модуля и называем его "mfrc522"
Servo one; //даем имя сервоприводу "one"
void setup() {
one.attach(4); //указываем порт подключения сервопривода
SPI.begin(); //инициализируем интерфейс
pinMode(2, OUTPUT); //указываем режим порта, как выход
pinMode(3, OUTPUT); //указываем режим порта, как выход
mfrc522.PCD_Init(); //инициализируем модуль RFID-RC522 со своим именем "mfrc522"
}
void loop() {
one.write(0); //поворачиваем вал сервопривода в положение 0 градусов
digitalWrite(2, LOW); //выключаем синий светодиод
digitalWrite(3, HIGH); //включаем красный светодиод
byte uidCard[4] = {0x83, 0xD0, 0x2B, 0x11}; //указываем номер "ключ" карты "у каждого индивидуальный"
if ( ! mfrc522.PICC_IsNewCardPresent()) { //если новой карты нет, то перезапустить цикл "void loop"
  return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) { //если данные карты не читаются, то перезапустить цикл "void loop"
  return;
}
for (byte i = 0; i < 4; i++) { //Сверяем два массива, если какой то байт не совпал, выходим из цикла. Если все верно, то выполняем действия после цикла.
  if (uidCard[i] != mfrc522.uid.uidByte[i])
  return;
}
digitalWrite(3, LOW); //выключаем красный светодиод
digitalWrite(2, HIGH); //включаем синий светодиод
one.write(180); //поворачиваем вал сервопривода на 180 градусов
delay(5000); //задержка 5000 миллисекунд
}

1000р.

  1. Поставьте курсор в самый конец строки №17
  2. Нажмите Enter
  3. Впишите: byte vtoroyUidCard[4] = {0x12, 0x34, 0x56, 0x78}; // Второй UID

Собсна, всё. Добавили.

Добавили,да добавлили. Но только как его прописать?

Вопрос был какой?

Я помог. Благодарности пока не видел.

Что означает слово

в данном контексте, я не понимаю. Доктор пилюли прописывает, а здесь что можно прописывать?

1 лайк

Код вставил, uid заменил,а результата нет.

А какого результат Вы ожидали?

Ещё раз перечитал Ваш пост. Ни о каком другом (кроме как “вставить UID”) результате Вы там не писали.

Вам нужен какой-то другой результат? Какой именно? Почему Вы о нём ничего не сказали?

человек пошел копировать строки 24-27 для

только жалко, что это опять не заработает.

Может, научится вопросы задавать. А так … каков вопрос, таков и ответ. На его вопрос я ответил точно и исчерпывающе полно, проблема, поставленная в первом посте, решена. И, кстати,

Спасибо!

Доделал

#include <SPI.h> //подключаем библиотеку
#include <MFRC522.h> //подключаем библиотеку №2
MFRC522 mfrc522(10, 9); //указываем порты подключения модуля и называем его "mfrc522"
void setup() {
Serial.begin(9600); //инициализируем последовательный порт на скорости 9600бод
SPI.begin(); //инициализируем интерфейс
pinMode(2, OUTPUT); //указываем режим порта, как выход
pinMode(3, OUTPUT); //указываем режим порта, как выход
mfrc522.PCD_Init(); //инициализируем модуль RFID-RC522 со своим именем "mfrc522"
}
void loop() {
digitalWrite(2, LOW); //выключаем синий светодиод
digitalWrite(3, HIGH); //включаем красный светодиод
byte uidCard[4] = {0x2C, 0x2D, 0x11, 0x8C}; //указываем номер "ключ" карты "у каждого индивидуальный"
byte dwaUidCard[4] = {0xD3, 0xE0, 0x54, 0xCD}; // Второй UID
byte belUidCard[4] = {0x63, 0x81, 0x31, 0x25}; // Второй UID
if ( ! mfrc522.PICC_IsNewCardPresent()) { //если новой карты нет, то перезапустить цикл "void loop"
  return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) { //если данные карты не читаются, то перезапустить цикл "void loop"
  return;
}
for (byte i = 0; i < 4; i++) { //Сверяем два массива, если какой то байт не совпал, выходим из цикла. Если все верно, то выполняем действия после цикла.
  if (uidCard[i] != mfrc522.uid.uidByte[i])
  if (dwaUidCard[i] != mfrc522.uid.uidByte[i])
  if (belUidCard[i] != mfrc522.uid.uidByte[i])
  return;
}
digitalWrite(3, LOW); //выключаем красный светодиод
digitalWrite(2, HIGH); //включаем синий светодиод
delay(1500); //задержка 5000 миллисекунд
}

Кто знает, для этой библиотеки return из loop имеет какой-то сакральный смысл?
Ещё рекомендуют каждую секунду модуль перезагружать, типа защита от зависаний.

Для себя я так переписал чтение UID:

#include <SPI.h> //для SPI устройств
#include <MFRC522.h> //для RFID

#define RST_PIN         9        // Пин rfid модуля RST
#define SS_PIN          A0       // Пин rfid модуля SS (SDA)

MFRC522 rfid(SS_PIN, RST_PIN);   // Объект rfid модуля
MFRC522::MIFARE_Key key;         // Объект ключа
MFRC522::StatusCode status;      // Объект статуса

void setup() {
  Serial.begin(9600);            // Инициализация Serial
  SPI.begin();                   // Инициализация SPI
  rfid.PCD_Init();               // Инициализация модуля
  rfid.PCD_SetAntennaGain(rfid.RxGain_max);  // Установка усиления антенны
  rfid.PCD_AntennaOff();           // Перезагружаем антенну
  rfid.PCD_AntennaOn();            // Включаем антенну
  
  for (byte i = 0; i < 6; i++) { // Наполняем ключ
    key.keyByte[i] = 0xFF;       // Ключ по умолчанию 0xFFFFFFFFFFFF
  }
}
void loop() {

  static uint32_t rebootTimer = millis(); // Важный костыль против зависания модуля!
  if (millis() - rebootTimer >= 1000) {   // Таймер с периодом 1000 мс
    rebootTimer = millis();               // Обновляем таймер
    digitalWrite(RST_PIN, HIGH);          // Сбрасываем модуль
    delayMicroseconds(2);                 // Ждем 2 мкс
    digitalWrite(RST_PIN, LOW);           // Отпускаем сброс
    rfid.PCD_Init();                      // Инициализируем заново
    if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
      Serial.print("UID: ");
      for (uint8_t i = 0; i < 4; i++) {           // Цикл на 4 итерации
        Serial.print("0x");                       // В формате HEX
        Serial.print(rfid.uid.uidByte[i], HEX);   // Выводим UID по байтам
        Serial.print(", ");
      }
      Serial.println("");
  }
}

библиотеки тут не причем, return просто делает выход из loop, а так как перед компиляцией среда разработки arduino IDE в основном расширяется до (примитивно)

int main(void)
{
    setup();

    while (1) {
        loop();
    }

    return 0;
}

обратно попадаем в начало loop.

1 лайк