Нужна помощь в написании кода для моего fyp
как работает мое кодирование= 1 rfid-карта обнаруживается на первом rfid-считывателе и 2 rfid-карты обнаруживаются на втором rfid-считывателе, после чего сервопривод переходит на 90
мой второй rfid не обнаружен
это мое кодирование
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
Servo myservo;
int pos = 0;
int angle = 0;
int angle11 = 0;
#define RST_PIN2 8 // Настраиваемый, см. Типичное расположение выводов выше
#define SS_PIN 9 // Настраиваемый, см. Типичное расположение контактов выше
#define SS_PIN2 10 // Настраиваемый, см. Типичное расположение выводов выше
MFRC522 mfrc522(SS_PIN, RST_PIN2 ); // Создать экземпляр MFRC522.
MFRC522 mfrc522_2(SS_PIN2, RST_PIN2); // Создать экземпляр MFRC522.
void setup()
{
Serial.begin(9600); // Инициализировать последовательную связь с ПК
SPI.begin(); // Инициализация шины SPI
mfrc522.PCD_Init(); // Инициализация карты MFRC522
mfrc522_2.PCD_Init(); // Инициализация карты MFRC522
Serial.println("Approximate your card to the reader...");
Serial.println();
myservo.attach(5);
}
void loop()
{
// Ищите новые карты
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выберите одну из карт
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Дамп отладочной информации о карте; автоматически вызывается функция PICC_HaltA()
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
delay(1000);
// Ищите новые карты
if ( ! mfrc522_2.PICC_IsNewCardPresent()) {
return;
}
// Выберите одну из карт
if ( ! mfrc522_2.PICC_ReadCardSerial()) {
return;
mfrc522_2.PICC_DumpToSerial(&(mfrc522.uid));
}
//Показать UID на последовательном мониторе
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "09 99 55 B2") //измените здесь UID карты / карт, к которым вы хотите предоставить доступ
{
String content= "1";
byte letter;
for (byte ii = 0; ii < mfrc522_2.uid.size; ii++)
{
Serial.print(mfrc522_2.uid.uidByte[ii] < 0x10 ? " 0" : "1 ");
Serial.print(mfrc522_2.uid.uidByte[ii], HEX);
content.concat(String (mfrc522_2.uid.uidByte[ii] < 0x10 ? " 0" : "1 "));
content.concat(String (mfrc522_2.uid.uidByte[ii], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "09 99 55 B3") //измените здесь UID карты / карт, к которым вы хотите предоставить доступ
myservo.write(angle); delay(3000);
for(angle = 0; angle > 90; angle11)
myservo.write(angle11);
delay(3000);
myservo.write(angle11); delay(3000);
for(angle = 90; angle11 > 0; angle)
myservo.write(angle);
delay(3000);
}
else
{
Serial.println(" Access denied");
delay(3000);
}
}
@ AMEIR ADZNIL , 👍0
Обсуждение1 ответ
▲ 1
В самом начале вашего цикла у вас есть это (и другие подобные конструкции):
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
Это означает, что если в считывателе 1 нет новой карты, то остальная часть цикла игнорируется. Ничего другого случиться не может.
Вам нужно перестроить всю вашу программу так, чтобы она работала совершенно противоположным образом - вместо того, чтобы говорить "Если нет карточки, ничего не делайте", вы должны сказать "Если есть карточка, тогда сделайте что-нибудь".
,
@Majenko
Смотрите также:
- Использование прерываний с RC522
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- rfid_default_keys проверить с помощью RC522
- MFRC522: прошивка неизвестна
- MFRC522 не сканируется карта
- RFID-RC522 не работает, горит красный светодиод
- Считывание одновременно RFID-МЕТКИ с помощью нескольких RFID-считывателей [MFRC522]
- Arduino Uno - Как записать персональные данные в NTAG213 с помощью RFID-RC522
Я не совсем понимаю вашу проблему. Пожалуйста, объясните подробнее и на хорошем английском. Если вы недостаточно хорошо владеете английским, вы можете спросить кого-нибудь, кто может писать по-английски лучше., @chrisl
немного измените свою логику ... используйте флаги ... псевдокод "если card_1_is_present и card_1_is_read, то поднимите флаг_1" .... не выходите, не останавливайтесь, не делайте ничего, кроме установки значения flag_1 .... затем сделайте то же самое для card_2 flag_2 ........ далее, проверьте флаг_1 и флаг_2 ... продолжайте выполнение программы, если оба подняты, @jsotola