RFI модуль

Здравствуйте много уважаемые пользователи форума и программисты.

Пытаюсь разобраться с кодом для модуля RFI, вот исходный код, который работает:

#include “SPI.h”
#include “MFRC522.h”

#define RST_PIN 9 // RES pin
#define SS_PIN  10 // SDA (SS) pin

byte readCard[4];
String cardID = “967D86”; // замените на ID своей метки
String tagID = “”;

MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522

void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();

pinMode(6, OUTPUT);
}

void loop() {
while (getID()) {
if (tagID == cardID) {
Serial.println(“Access Granted!”);
digitalWrite(6, LOW);
}
else {
Serial.println(“Access Denied!”);
}
Serial.print("ID: ");
Serial.println(tagID);
delay(2000);
digitalWrite(6, HIGH);
}
}

boolean getID() {
if (! mfrc522.PICC_IsNewCardPresent()) {
return false;
}

if (! mfrc522.PICC_ReadCardSerial()) {
return false;
}

tagID = “”;

for (uint8_t i = 0; i < 4; i++) {
tagID.concat(String(mfrc522.uid.uidByte[i], HEX));
}

tagID.toUpperCase();
mfrc522.PICC_HaltA();
return true;
}

В данном коде используется один ID ключа, когда я пытаюсь использовать два кода, согласно коментария: Чтобы добавить несколько меток закомментируйте строку:
//String cardID = «20C3935E»; // замените на ID своей метки
В блоке loop скетча измените строку:
if (tagID == cardID) следующим образом:
if(tagID == «20C3935E» || tagID == «FD24565Y» || tagID == «12DF45GJE») // сколько угодно меток

то мне выдаёт следующую ошибку:

Компиляция скетча…
“C:\Users\Анатолий\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\Users\Анатолий\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.7\cores\arduino” “-IC:\Users\Анатолий\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.7\variants\eightanaloginputs” “-IC:\Users\Анатолий\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.7\libraries\SPI\src” “-Ic:\Users\Анатолий\Documents\Arduino\libraries\MFRC522\src” “C:\Users\Анатолий\AppData\Local\arduino\sketches\FA822A98C72DD9925BDB2C0C60F91894\sketch\Keypad.ino.cpp” -o “C:\Users\Анатолий\AppData\Local\arduino\sketches\FA822A98C72DD9925BDB2C0C60F91894\sketch\Keypad.ino.cpp.o”
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:17: error: stray ‘\302’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:18: error: stray ‘\253’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:26: error: stray ‘\302’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:27: error: stray ‘\273’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:41: error: stray ‘\302’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:42: error: stray ‘\253’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:50: error: stray ‘\302’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:51: error: stray ‘\273’ in program
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino: In function ‘void loop()’:
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:8: error: ‘tagID’ was not declared in this scope
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:23:43: error: ‘F365BD2’ was not declared in this scope
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:31:20: error: ‘tagID’ was not declared in this scope
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino: In function ‘boolean getID()’:
C:\Users\Анатолий\AppData\Local\Temp\Rar$DIa10320.11407\Keypad\Keypad.ino:46:3: error: ‘tagID’ was not declared in this scope
Используем библиотеку SPI версии 1.0 из папки: C:\Users\Анатолий\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.7\libraries\SPI
Используем библиотеку MFRC522 версии 1.4.12 из папки: C:\Users\Анатолий\Documents\Arduino\libraries\MFRC522
exit status 1

Compilation error: stray ‘\302’ in program

Так же , когда я данную строчку: String cardID = “967D86”; использую второй раз (копирую её ниже), меняя cardID на cardID1 и добовляя в соответствующих местах tagID, то у меня читаються все карты, в не зависимости от то, добавлен ли ID карты или нет.

Помогите пожалуйста разобраться с данной проблемой.

Ты что, за 2 года не удосужился прочесть вот этот текст?

Удосужился, просто подзабыл как правильно делать, я уже исправил.

1 лайк

Молодец! :slight_smile:

Напиши откуда скачивал библиотеку MFRC522.h ?

Из программы Arduino IDE 2.3.8

Выложи новым сообщением тот код, который выдает ошибку компиляции.

#include "SPI.h"
#include "MFRC522.h"

#define RST_PIN 9 // RES pin
#define SS_PIN  10 // SDA (SS) pin

byte readCard[4];
// String cardID = "967D86"; // замените на ID своей метки
String tagID = "";

MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
 
  pinMode(6, OUTPUT);
}

void loop() {
  while (getID()) {
    if(tagID == «5497646» || tagID == «F365BD2») {
      Serial.println("Access Granted!");
      digitalWrite(6, LOW);
    }
    else {
      Serial.println("Access Denied!");
    }
    Serial.print("ID: ");
    Serial.println(tagID);
    delay(2000);
    digitalWrite(6, HIGH);
  }
}

boolean getID() {
  if (! mfrc522.PICC_IsNewCardPresent()) {
    return false;
  }

  if (! mfrc522.PICC_ReadCardSerial()) {
    return false;
  }

  tagID = "";
  
  for (uint8_t i = 0; i < 4; i++) {
    tagID.concat(String(mfrc522.uid.uidByte[i], HEX));
  }

  tagID.toUpperCase();
  mfrc522.PICC_HaltA();
  return true;
}

По внимательнее нужно быть.
Вот компилирующийся код:

#include "SPI.h"
#include "MFRC522.h"

#define RST_PIN 9 // RES pin
#define SS_PIN  10 // SDA (SS) pin

byte readCard[4];
// String cardID = "967D86"; // замените на ID своей метки
String tagID = "";

MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();

  pinMode(6, OUTPUT);
}

void loop() {
  while (getID()) {
    if (tagID == "5497646" || tagID == "F365BD2") {
      Serial.println("Access Granted!");
      digitalWrite(6, LOW);
    }
    else {
      Serial.println("Access Denied!");
    }
    Serial.print("ID: ");
    Serial.println(tagID);
    delay(2000);
    digitalWrite(6, HIGH);
  }
}

boolean getID() {
  if (! mfrc522.PICC_IsNewCardPresent()) {
    return false;
  }

  if (! mfrc522.PICC_ReadCardSerial()) {
    return false;
  }

  tagID = "";

  for (uint8_t i = 0; i < 4; i++) {
    tagID.concat(String(mfrc522.uid.uidByte[i], HEX));
  }

  tagID.toUpperCase();
  mfrc522.PICC_HaltA();
  return true;
}

Скетч использует 5550 байт (38%) памяти устройства. Всего доступно 14336 байт.
Глобальные переменные используют 271 байт (26%) динамической памяти, оставляя 753 байт для локальных переменных. Максимум: 1024 байт.

Едем дальше.

Показывай код.

#include "SPI.h"

#include "MFRC522.h"




#define RST_PIN 9 // RES pin

#define SS_PIN  10 // SDA (SS) pin




byte readCard[4];

String cardID = "967D86"; // замените на ID своей метки

String cardID1 = "F365BD2"; // замените на ID своей метки

String tagID = "";




MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522




void setup() {

  Serial.begin(9600);

  SPI.begin();

  mfrc522.PCD_Init();

 

  pinMode(6, OUTPUT);

}




void loop() {

  while (getID()) {

    if (tagID == cardID,cardID1) {

      Serial.println("Access Granted!");

      digitalWrite(6, LOW);

    }

    else {

      Serial.println("Access Denied!");

    }

    Serial.print("ID: ");

    Serial.println(tagID);

    delay(2000);

    digitalWrite(6, HIGH);

  }

}




boolean getID() {

  if (! mfrc522.PICC_IsNewCardPresent()) {

    return false;

  }




  if (! mfrc522.PICC_ReadCardSerial()) {

    return false;

  }




  tagID = "";

  

  for (uint8_t i = 0; i < 4; i++) {

    tagID.concat(String(mfrc522.uid.uidByte[i], HEX));

  }




  tagID.toUpperCase();

  mfrc522.PICC_HaltA();

  return true;

}

А это что за “искусство”?

if (tagID == cardID,cardID1)

???

Вот исправленный код:

#include "SPI.h"
#include "MFRC522.h"

#define RST_PIN 9 // RES pin
#define SS_PIN  10 // SDA (SS) pin

byte readCard[4];

String cardID = "967D86"; // замените на ID своей метки

String cardID1 = "F365BD2"; // замените на ID своей метки

String tagID = "";

MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522

void setup() {

  Serial.begin(9600);

  SPI.begin();

  mfrc522.PCD_Init();

  pinMode(6, OUTPUT);
}

void loop() {

  while (getID()) {

    if (tagID == cardID || tagID == cardID1) {

      Serial.println("Access Granted!");
      digitalWrite(6, LOW);
    } else {

      Serial.println("Access Denied!");
    }

    Serial.print("ID: ");
    Serial.println(tagID);
    delay(2000);
    digitalWrite(6, HIGH);
  }
}

boolean getID() {

  if (! mfrc522.PICC_IsNewCardPresent()) {

    return false;
  }

  if (! mfrc522.PICC_ReadCardSerial()) {

    return false;
  }

  tagID = "";

  for (uint8_t i = 0; i < 4; i++) {

    tagID.concat(String(mfrc522.uid.uidByte[i], HEX));
  }

  tagID.toUpperCase();

  mfrc522.PICC_HaltA();

  return true;
}

Скетч использует 5700 байт (39%) памяти устройства. Всего доступно 14336 байт.
Глобальные переменные используют 281 байт (27%) динамической памяти, оставляя 743 байт для локальных переменных. Максимум: 1024 байт.

Дело, конечно же, ваше. Но за два то года можно было хоть немного разобраться, чтобы с такими глупыми ошибками на форум не идти…

Спасибо большое, заработало.

Извините за глупые вопросы, я просто не так чато программирую на ардуино, последний раз программировал год назад.

Если интересно, условие:

if (tagID == cardID, cardID1)

верно всегда, когда cardID1 больше ноля. А оно и было больше ноля, поэтому все карты и считались “Access Granted”…

спасибо.

Когда у меня встречается такая ошибка, то я исправляю её так. Становлюсь перед самой первой строкой скетча. Нажимаю . Весь текст скетча смещается вниз. Затем . после этого закрыть скетч с сохранением. И открыть его заново.

Не неси ересь. Это ошибка из-за неверного символа в тексте программы.
Никакое смешение вниз это не излечит.

Не городи чушь. Мне помогает именно это. А ошибка у меня эта встречается тогда, когда я поработаю с этим скетчем в PROTEUS.

Мал ещё такое писать мне.

А у меня огород не копан. Сыро ещё. И что?
Или ты не заметил, что проблема решена была без всяких «сдвигов вниз»? И именно заменой символов. Или не читал? Ну тогда понятно.