Код датчика RFID+отпечатков пальцев
Я пытаюсь создать защитную дверную систему, использующую RFID и датчик отпечатков пальцев (Adafruit), чтобы разрешать/запрещать доступ к двери. У меня датчик отпечатков пальцев и RFID подключены к светодиоду, но код работает не очень хорошо. Я хочу, чтобы светодиод загорался только и только тогда, когда проверены и отпечатки пальцев, и RFID. Вот мой предварительный код.
//ЗАГОЛОВНЫЕ ФАЙЛЫ
#include <SPI.h> // RFID
#include <MFRC522.h>//rfid
#include <Adafruit_Fingerprint.h> //ОТПЕЧАТОК
#include <SoftwareSerial.h> //ОТПЕЧАТОК
#include<stdint.h> //ОТПЕЧАТОК
//настройки RFID
#define RST_PIN 9 // RFID контакт 9 RST_pin
#define SS_PIN 10 // контакт RFID 10 SS_pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем экземпляр MFRC522
String read_rfid;
String ok_rfid_1 = "cbb427b2"; //белая карта
String ok_rfid_2 = "0ebb14f39"; //синий брелок
//настройки отпечатков пальцев
int getFingerprintIDez();
// контакт №2 ВХОДИТ от датчика (ЗЕЛЕНЫЙ провод)
// контакт № 3 ВЫХОДИТ из arduino (ЖЕЛТЫЙ провод)
SoftwareSerial mySerial(2, 3);
// активирует последовательную связь на выводе 2 & 3
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
// вывод контакта двери гаража
int door = 7; //двигатель к двери
void dump_byte_array(byte * buffer , byte bufferSize) { //почему это так важно
read_rfid = "";
for (byte i = 0; i < bufferSize; i++) {
read_rfid = read_rfid + String(buffer[i], HEX);
}
}
void setup() {
//настройка RFID
Serial.begin(9600);
// Инициализируем последовательную связь с ПК
while (!Serial);
// Ничего не делать, если последовательный порт не открыт (добавлено для Arduino на базе ATMEGA32U4)
finger.begin(57600);
SPI.begin(); // Инициируем шину SPI
mfrc522.PCD_Init(); // Инициализация MFRC522 RFID
pinMode (door, OUTPUT);
//настройка ОТПЕЧАТКА
{
while (!Serial); // Для Юн/Лев/Микро/Зеро/...
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
Serial.println("Waiting for valid finger...");
}
}
// ОК, успех!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
}
//СВОЙСТВА ДВЕРИ/ВЫХОДНОГО контакта ИЗМЕНЯЮТСЯ, ЧТОБЫ ОТРАЖАТЬ, КАК БЫСТРО И КАК ДОЛГО МОТОР ДЕРЖИТ ДВЕРЬ, ИСПОЛЬЗУЯ DIGITALWRITE; ПЕРЕРЫВ.. // СЕЙЧАС ИСПОЛЬЗУЕМ СВЕТОДИОД
void open_door() {
digitalWrite (door, HIGH);
delay (2000);
digitalWrite (door, LOW);
}
void loop() {
// НАСТРОЙКИ ПЕТЛИ RFID `
if ( ! mfrc522.PICC_IsNewCardPresent()) { // Ищем новые карты
return;
}
if ( ! mfrc522.PICC_ReadCardSerial()) { // Выбираем одну из карт
return;
}
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
// НАСТРОЙКИ ЦИКЛА ОТПЕЧАТКОВ
getFingerprintID(); // запускаем датчик отпечатков пальцев
delay(100);
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK && read_rfid == ok_rfid_1) {
Serial.println(ok_rfid_1);
open_door();
}
}
И это ошибка, которую я получаю
Arduino: 1.8.1 (Windows 10), Board: "Arduino/Genuino Uno"
fingerprint:127: error: expected unqualified-id before '{' token
{
^
exit status 1
expected unqualified-id before '{' token
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Я новичок в этом, поэтому, пожалуйста, потерпите меня и объясните по-детски, если это возможно.
@Barry, 👍0
Обсуждение2 ответа
Не могу сказать, что прочитал то, что вы здесь написали, или то, что вы пытаетесь сделать, тем не менее, я исправил ошибки в вашем сообщении. Это скомпилируется без проблем. Удачи в вашем проекте.
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
int getFingerprintIDez();
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
//ЗАГОЛОВНЫЕ ФАЙЛЫ
#include <SPI.h> // RFID
#include <MFRC522.h>//rfid
#include<stdint.h> //ОТПЕЧАТОК
//Настройки RFID
#define RST_PIN 9 // RFID контакт 9 RST_pin
#define SS_PIN 10 // RFID контакт 10 SS_pin
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем экземпляр MFRC522
String read_rfid;
String ok_rfid_1 = "cbb427b2"; //белая карта
String ok_rfid_2 = "0ebb14f39"; //синий брелок
int door = 7; //двигатель к двери
void dump_byte_array(byte * buffer , byte bufferSize) {
//почему так важно
read_rfid = "";
for (byte i = 0; i < bufferSize; i++) {
read_rfid = read_rfid + String(buffer[i], HEX);
}
}
void setup() {
//настройка RFID
finger.begin(57600);
Serial.begin(9600);
// Инициализируем последовательную связь с ПК
while (!Serial);
// Ничего не делать, если последовательный порт не открыт (добавлено для Arduino на базе ATMEGA32U4)
SPI.begin(); // Инициируем шину SPI
mfrc522.PCD_Init(); // Инициализация MFRC522 RFID
pinMode (door, OUTPUT);
//настройка ОТПЕЧАТКА
{
while (!Serial); // Для Юн/Лев/Микро/Зеро/...
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
Serial.println("Waiting for valid finger...");
}
}
// ОК, успех!
void open_door() {
digitalWrite (door, HIGH);
delay (2000);
digitalWrite (door, LOW);
}
void loop() {
// НАСТРОЙКИ ПЕТЛИ RFID
if (! mfrc522.PICC_IsNewCardPresent()) {
// Ищем новые карты
return;
}
if (!mfrc522.PICC_ReadCardSerial()) {
// Выбираем одну из карт
return;
}
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
// НАСТРОЙКИ ЦИКЛА ОТПЕЧАТКОВ
getFingerprintID(); // запускаем датчик отпечатков пальцев
delay(100);
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
// ОК, успех!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// ОК сконвертировано!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
// найдено совпадение!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
}
default:
Serial.println("Unknown error");
return p;
}
} <-- Why?
Правильный отступ показывает, что у вас есть лишняя закрывающая фигурная скобка.
- Отправка данных из ESP8266 в PHP
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Печатать на serial monitor, когда он обнаруживает изменение значения
- Arduino показывает "avrdude: ser_open(): can't open device ”\\.\COM3" после последней загрузки
- FlySky TH9X с Arduino: невозможно заставить функциюpulsIn() возвращать разумные значения для любого канала
- Получить изображение из модуля Fingerprint
- Вывести 2 числа, хранящиеся в 24-битном формате, в десятичном формате.
- Проблема с подключением датчика сердцебиения и температуры на arduino uno, но работает по отдельности
Добро пожаловать в Ардуино SE. Пожалуйста, посетите тур по адресу https://arduino.stackexchange.com/Tour. И кстати, когда вы вводите код, просто убедитесь, что у вас есть одна пустая строка вверху, а затем введите код с 4 пробелами в начале каждой строки. Так намного читабельнее., @SDsolar
Похоже, ваш оператор switch находится за пределами объявления функции., @Mazaryk