Нужна помощь в написании кода для моего 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);
    
    }
  }

, 👍0

Обсуждение

Я не совсем понимаю вашу проблему. Пожалуйста, объясните подробнее и на хорошем английском. Если вы недостаточно хорошо владеете английским, вы можете спросить кого-нибудь, кто может писать по-английски лучше., @chrisl

немного измените свою логику ... используйте флаги ... псевдокод "если card_1_is_present и card_1_is_read, то поднимите флаг_1" .... не выходите, не останавливайтесь, не делайте ничего, кроме установки значения flag_1 .... затем сделайте то же самое для card_2 flag_2 ........ далее, проверьте флаг_1 и флаг_2 ... продолжайте выполнение программы, если оба подняты, @jsotola


1 ответ


1

В самом начале вашего цикла у вас есть это (и другие подобные конструкции):

if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
}

Это означает, что если в считывателе 1 нет новой карты, то остальная часть цикла игнорируется. Ничего другого случиться не может.

Вам нужно перестроить всю вашу программу так, чтобы она работала совершенно противоположным образом - вместо того, чтобы говорить "Если нет карточки, ничего не делайте", вы должны сказать "Если есть карточка, тогда сделайте что-нибудь".

,