Ошибки кодирования дверных замков RFID

Я пытаюсь воссоздать дверной RFID-замок, который я видел в центре проекта Arduino, но столкнулся с несколькими проблемами. Мне пришлось немного манипулировать кодом, чтобы убедиться, что он включает правильные библиотеки, и я думаю, что это решило некоторые проблемы, но не все. Если бы кто-нибудь мог взглянуть на мой код и помочь мне, это было бы здорово, я новичок в программировании, и мне нужна вся помощь, которую я могу получить. Спасибо!

Вот сообщения об ошибках, которые я получаю при попытке загрузить код на свой Arduino: Arduino: 1.8.8 (Mac OS X), плата: «Arduino/Genuino Uno»

rfid_based_door_automatic_management_system:66:17: error: expected unqualified-id before numeric constant
 #define SDA_D1O 9
                 ^
/Users/gavinmiles/Documents/rfid_based_door_automatic_management_system/rfid_based_door_automatic_management_system.ino:70:9: note: in expansion of macro 'SDA_D1O'
 MFRC522(SDA_D1O, RESET_D1O); 
         ^
rfid_based_door_automatic_management_system:66:17: error: expected ')' before numeric constant
 #define SDA_D1O 9
                 ^
/Users/gavinmiles/Documents/rfid_based_door_automatic_management_system/rfid_based_door_automatic_management_system.ino:70:9: note: in expansion of macro 'SDA_D1O'
 MFRC522(SDA_D1O, RESET_D1O); 
         ^
/Users/gavinmiles/Documents/rfid_based_door_automatic_management_system/rfid_based_door_automatic_management_system.ino: In function 'void setup()':
rfid_based_door_automatic_management_system:120:10: error: expected unqualified-id before '.' token
   MFRC522.initial();
          ^
/Users/gavinmiles/Documents/rfid_based_door_automatic_management_system/rfid_based_door_automatic_management_system.ino: In function 'void loop()':
rfid_based_door_automatic_management_system:137:12: error: 'class MFRC522' has no member named 'isCard'
   if( rfid.isCard() )
            ^
rfid_based_door_automatic_management_system:141:16: error: 'class MFRC522' has no member named 'readCardSerial'
       if( rfid.readCardSerial() )
                ^
rfid_based_door_automatic_management_system:152:33: error: 'class MFRC522' has no member named 'serNum'
               Serial.print(rfid.serNum[i], HEX);
                                 ^
rfid_based_door_automatic_management_system:154:30: error: 'class MFRC522' has no member named 'serNum'
               lcd.print(rfid.serNum[i],HEX);
                              ^
rfid_based_door_automatic_management_system:165:42: error: 'class MFRC522' has no member named 'serNum'
               if( My_RFID_Tag[i] != rfid.serNum[i] )
                                          ^
rfid_based_door_automatic_management_system:274:8: error: 'class MFRC522' has no member named 'halt'
   rfid.halt();
        ^
Multiple libraries were found for "LiquidCrystal.h"
 Used: /Users/gavinmiles/Documents/Arduino/libraries/LiquidCrystal
 Not used: /Applications/Arduino.app/Contents/Java/libraries/LiquidCrystal
Multiple libraries were found for "Servo.h"
 Used: /Users/gavinmiles/Documents/Arduino/libraries/Servo
 Not used: /Applications/Arduino.app/Contents/Java/libraries/Servo
exit status 1
expected unqualified-id before numeric constant
/Users/gavinmiles/Downloads/untitled_file.ino

В этом отчете будет больше информации «Показывать подробный вывод во время компиляции» опция включена в меню «Файл» -> «Настройки».

/*
* RFID-модуль RC522
* Простой проект: Arduino будет считывать RFID-метку и отображать ее на последовательном мониторе!
*
* Конфигурация контактов RFID RC522 и Arduino Uno
*
* RFID RC522 Arduino Uno
* СС/ПДД Д10
* ССК Д13
* МОСИ Д11
* МИСО Д12
* IRQ не подключен
* Земля Земля
* РСТ Д9
* 3,3 В 3,3 В
*
* //Примечание: мы подключили ЖК-дисплей к аналоговым контактам.
* Помните, что аналоговые контакты могут действовать как цифровые контакты.
* Но цифровые контакты НЕ МОГУТ действовать как аналоговые.
*
* Подключения ЖК-дисплея (16x2)
*
* Контакт VSS к GND
* Вывод VCC на 5 В
* //Мы подключаем «Контрастный контакт к GND для максимальной яркости»
* //Вы также можете подключить его к 10K Pot, если хотите изменить яркость ЖК-дисплея.
* Вывод VEE к GND
* Вывод RS к аналоговому выводу A0
* Контакт R/W на землю
* Включить вывод аналогового вывода A1.
* Контакт D4 к аналоговому контакту 5
* Контакт D5 к аналоговому контакту 4
* Контакт D6 к аналоговому контакту 3
* Контакт D7 к аналоговому контакту 2
* Штырь LED+ к POWER
* Светодиодный контакт к GND
*
* Сервопривод подключен к цифровому контакту 5.
*
* RGB-светодиод
* Из светодиода RGB нам нужен только красный и зеленый цвет,
* Поэтому мы не подключаем синий контакт RGB.
*
* Красный контакт к цифровому контакту 6.
* Зеленый контакт к цифровому контакту 7.
*
* Зуммер к цифровому контакту 8
*
*
* Примечание: RFID использует протокол SPI для передачи информации.
* Мелодию (для зуммера) я взял отсюда,
* Файл -> Примеры -> Цифровой -> ТонМелодия
*/

//Включаем разделы
#include <MFRC522.h>
#include <SPI.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#include "pitches.h"

//Определение компонента для контактов Arduino
/* Define the DIO used for the SDA (SS) and RST (reset) pins. */
#define SDA_D1O 9
#define RESET_D1O 8

/* Create an instance of the RFID library */
MFRC522(SDA_D1O, RESET_D1O); 
#define SS_PIN 10
#define RST_PIN 9

#define SERVO_PIN 5

#define Red_LED 6
#define Green_LED 7

#define Buzzer 8


//инициализируем библиотеку номерами контактов интерфейса
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
Servo DoorLock;
MFRC522 rfid(SS_PIN, RST_PIN );

//Уникальный идентификатор RFID-метки, к которой вы хотите предоставить доступ.
int My_RFID_Tag[5] = {0x58,0x76,0x17,0x10,0x29};

//переменная для хранения вашей Access_card
boolean My_Card = false;  

//ноты в мелодии взяты из:
//Файл -> Примеры -> Цифровой -> ТонМелодия
int melody[] = {
  NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
};

// длительность нот: 4 = четвертная нота, 8 = восьмая нота , а не е и т. д.:
int noteDurations[] = {
  4, 8, 8, 4, 4, 4, 4, 4
};

void setup() 
{
  // поместите сюда свой код установки для однократного запуска:
  //устанавливаем контакты как вход/выход
  pinMode(Red_LED,OUTPUT);
  pinMode(Green_LED,OUTPUT);
  pinMode(Buzzer,OUTPUT);

  //Сервопривод подключен к цифровому контакту 5
  DoorLock.attach(SERVO_PIN);
  //открываем последовательный порт на скорости 9600 бод.
  Serial.begin(9600); 
  //Инициализируем ЖК-дисплей в формате символов 16x2
  lcd.begin(16,2);
  //Инициализируем сервопривод и RFID
  SPI.begin();
  MFRC522.initial();
}

void loop() 
{
  // поместите сюда свой основной код для многократного запуска:

  //Предполагаем, что первая обнаруженная карта (или тег) — My_Card,
  //Потом позже проверим, My_Card это или нет!
  My_Card = true; 
  DoorLock.write(0); //Сервопривод в положении 0, дверь закрыта.
  lcd.clear();
  lcd.print("Robodia Technology");
  lcd.setCursor(0,1);
  lcd.print("gy Solutions!");

  //Проверьте, обнаружены ли какие-либо RFID-метки или нет?
  if( rfid.isCard() )
  {
      //если RFID-метка обнаружена, проверьте уникальный идентификатор,
      //и распечатываем его в последовательном окне
      if( rfid.readCardSerial() )
      {   
          lcd.clear();      
          lcd.print("UNIQUE ID is:- ");
          delay(500);          
          lcd.setCursor(0,1); //Устанавливаем курсор ЖК-дисплея на вторую строку, первый символ

      //Уникальный идентификатор — пятизначный номер.
          //Печать в HEX для лучшего понимания
          for( int i = 0; i < 5; i++ )
          {
              Serial.print(rfid.serNum[i], HEX);
              Serial.print(" ");              
              lcd.print(rfid.serNum[i],HEX);
              lcd.print(" ");                            
          }  
          delay(500);

      //Сравните этот уникальный идентификатор RFID-метки с уникальным идентификатором вашего My_RFID_Tag
          for(int i = 0; i < 5; i++)
          {   
              //если какая-либо цифра уникального идентификатора не совпадает,
              //затем делаем My_Card = false и выходим из цикла
              //Не нужно проверять всю цифру!
              if( My_RFID_Tag[i] != rfid.serNum[i] )
              {
                My_Card = false;
                break;                
              }           
          }
          Serial.println(); 
          delay(1000); 

          //Если RFID-тег — My_Card, предоставьте доступ для входа в комнату
          //иначе не открывай дверь.
          if(My_Card)
          {
            Serial.println("\nWelcome To Your Room, Robodia!");
            lcd.clear();
            lcd.print("Welcome to Your");
            lcd.setCursor(0,1);
            lcd.print("Room, Robodia!");
            delay(2000);                        

            //Включаем зеленый светодиод при получении разрешения
            //чтобы получить доступ к комнате.
            digitalWrite(Green_LED,HIGH);

            //Конфигурация зуммера, взята из:
            //Файл -> Примеры -> Цифровой -> ТонМелодия
            // перебираем ноты мелодии:
            int i = 0;
            while(i < 2)
            {
              for (int thisNote = 0; thisNote < 12; thisNote++) 
              {          
                // для расчета продолжительности ноты потребуется одна секунда
                // делится по типу заметки.
                //например, четвертная нота = 1000/4, восьмая = 1000/8 и т. д.
                int noteDuration = 1000 / noteDurations[thisNote];
                tone(8, melody[thisNote], noteDuration);                        
                // чтобы различать ноты, установите минимальное время между ними.
                // продолжительность ноты +30%, кажется, работает хорошо:
                int pauseBetweenNotes = noteDuration * 1.30;
                delay(pauseBetweenNotes);              
                // остановить воспроизведение тона:
                noTone(8);
              }
              i =  i + 1;
              delay(500);              
            }
            delay(1000);            

            //Теперь откройте дверь с помощью серводвигателя
            DoorLock.write(180);            
            delay(200);
            lcd.clear();                                    
            lcd.print("Door is Open");
            lcd.setCursor(0,1);
            lcd.print("Now!");
            delay(2000);
            lcd.clear();

            //Даем 10 секунд задержки для входа в комнату
            //После этого дверь снова закроется!
            for(int i = 10; i > 0; i--)
            {
              lcd.print("Door will close");
              lcd.setCursor(0,1);
              lcd.print("in ");
              lcd.print(i);
              lcd.print(" Sec.HurryUp!");
              delay(1000);
              lcd.clear();
            }

            //Теперь дверь закрыта, а зеленый светодиод не горит.
            DoorLock.write(0);
            digitalWrite(Green_LED,LOW);
            delay(200);
            lcd.clear();
            lcd.print("Door is Close");
            lcd.setCursor(0,1);
            lcd.print("Now!");
            delay(2000);                            
          }

          // Если метка RFID не My_Card, то
          // Не открывайте Дверь и
          //Включение красного светодиода и зуммера в качестве индикации предупреждения:
          //Кто-то еще пытается войти в вашу комнату.
          else
          {
            Serial.println("\nGet Out of Here !");
            lcd.clear();
            lcd.print("Card isNOT FOUND!");
            lcd.setCursor(0,1);
            lcd.print("Get Out of Here!");

            for(int i = 0; i < 7; i++)
            {
              digitalWrite(Buzzer, HIGH);
              digitalWrite(Red_LED,HIGH);
              delay(500);
              digitalWrite(Buzzer, LOW);
              digitalWrite(Red_LED,LOW);
              delay(500);              
            }
            delay(1000);            
          }                 
      }      
   }
  //Остановить считыватель RFID до тех пор, пока он не обнаружит RFID-метку.
  rfid.halt();
}

, 👍0

Обсуждение

Как насчет добавления ссылки на исходный проект и дополнительной информации о а) ваших модификациях и б) ваших проблемах? «Вот мой код, скажите мне, что не так» — это не очень приятно и не соответствует правилам этого форума., @mic

вы говорите «Ошибки кодирования дверных замков RFID» и «решены некоторые проблемы, но не все»... мы должны угадать, в чем заключаются ошибки и проблемы?, @jsotola

Я найду исходный пост и дам ссылку. Извините за отсутствие информации, я новичок на сайте. Извините, если исходный пост показался грубым, это не было моими намерениями. Просто искал помощи и подумал, что спрошу, может ли кто-нибудь взглянуть на это и посмотреть, что я пропустил. Спасибо, @Gavin Miles

https://create.arduino.cc/projecthub/user8523373/rfid-based-automatic-door-system-7b2065?ref=platform&ref_id=424_popular__intermediate_&offset=30 вот ссылка на оригинальный проект. Все, что я сделал, это заменил библиотеку RFID на библиотеку MFRC522., @Gavin Miles


1 ответ


Лучший ответ:

1

Я видел много ошибок в вашем коде. Вот некоторые из них:

  1. MFRC522.initial(); замените его на rfid.initial();
  2. Такие библиотеки, как Liquidcrystal и Servo, являются библиотеками по умолчанию в Arduino, поэтому, если вы загрузили их из внешнего источника и скопировали в папку своей библиотеки, удалите их.
  3. Эта логика не поможет, поскольку, если первый идентификатор не соответствует, это разорвет цикл, и сравнение не будет идти дальше с другими, и в этом случае вы всегда найдете результат false.< /п>

          for(int i = 0; i < 5; i++)
      {   
          //если какая-либо цифра уникального идентификатора не совпадает,
          //затем делаем My_Card = false и выходим из цикла
          //Не нужно проверять всю цифру!
          if( My_RFID_Tag[i] != rfid.serNum[i] ) // предлагаемое изменение if( My_RFID_Tag[i] == rfid.serNum[i] )
          {
            My_Card = false;//Моя_Карта = правда
            break;                
          }           
      }
    
  4. Библиотечные функции, используемые в коде, отличаются от доступных в библиотеке, откройте файл библиотеки и найдите функции, используемые для той же цели.

  5. Удалите их

    #define SDA_D1O 9
    #define RESET_D1O 8
    MFRC522(SDA_D1O, RESET_D1O);
    

    вы уже определили их и используете в своем коде

    #define SS_PIN 10
    #define RST_PIN 9
    MFRC522 rfid(SS_PIN, RST_PIN );
    
,