Ошибки кодирования дверных замков 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();
}
@Gavin Miles, 👍0
Обсуждение1 ответ
Лучший ответ:
Я видел много ошибок в вашем коде. Вот некоторые из них:
MFRC522.initial();
замените его наrfid.initial();
- Такие библиотеки, как Liquidcrystal и Servo, являются библиотеками по умолчанию в Arduino, поэтому, если вы загрузили их из внешнего источника и скопировали в папку своей библиотеки, удалите их.
Эта логика не поможет, поскольку, если первый идентификатор не соответствует, это разорвет цикл, и сравнение не будет идти дальше с другими, и в этом случае вы всегда найдете результат 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; } }
Библиотечные функции, используемые в коде, отличаются от доступных в библиотеке, откройте файл библиотеки и найдите функции, используемые для той же цели.
Удалите их
#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 );
- Как запомнить значения переменных после перезагрузки платы Arduino Uno R3
- Как использовать RFID-RC522 с Arduino?
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- Использование прерываний с RC522
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- rfid_default_keys проверить с помощью RC522
- Ethernet nodemcu
Как насчет добавления ссылки на исходный проект и дополнительной информации о а) ваших модификациях и б) ваших проблемах? «Вот мой код, скажите мне, что не так» — это не очень приятно и не соответствует правилам этого форума., @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