Код датчика 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.

Я новичок в этом, поэтому, пожалуйста, потерпите меня и объясните по-детски, если это возможно.

, 👍0

Обсуждение

Добро пожаловать в Ардуино SE. Пожалуйста, посетите тур по адресу https://arduino.stackexchange.com/Tour. И кстати, когда вы вводите код, просто убедитесь, что у вас есть одна пустая строка вверху, а затем введите код с 4 пробелами в начале каждой строки. Так намного читабельнее., @SDsolar

Похоже, ваш оператор switch находится за пределами объявления функции., @Mazaryk


2 ответа


1

Не могу сказать, что прочитал то, что вы здесь написали, или то, что вы пытаетесь сделать, тем не менее, я исправил ошибки в вашем сообщении. Это скомпилируется без проблем. Удачи в вашем проекте.

#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);
}
,

1
default:
  Serial.println("Unknown error");
  return p;
}
} <-- Why?

Правильный отступ показывает, что у вас есть лишняя закрывающая фигурная скобка.

,