Skocz do zawartości

RFID rc522- dodanie 2 tagu


skorqion

Pomocna odpowiedź

Pomocy chcę dodać 2 tag do poprawnej karty i nie wiem jak to napisać


 

#define LED_Zielona 6 // Pin do którego będzie podłączona Zielona dioda
#define LED_Czerwona  7  //Pin do którego będzie podłączona czerwona dioda

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

const byte poprawna_karta[] = {0x6A,0x79,0x9C,0x89};


void setup() { 
  Serial.begin(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 
  pinMode(LED_Zielona,OUTPUT); // Ustawienie pinu LED_Zielona  jako wyjscie
  pinMode(LED_Czerwona,OUTPUT); // Ustawienie pinu LED_Czerwona jako wyjscie
    
}
 
void loop() {

  // Look for new cards
  if ( ! rfid.PICC_IsNewCardPresent()) 
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;

 
  if (rfid.uid.uidByte[0] == poprawna_karta[0] || 
      rfid.uid.uidByte[1] == poprawna_karta[1] || 
      rfid.uid.uidByte[2] == poprawna_karta[2] || 
      rfid.uid.uidByte[3] == poprawna_karta[3] ) 
     {
      
          Serial.println("Poprawna karta");  
          digitalWrite(LED_Zielona,HIGH);
          delay(1500);
          digitalWrite(LED_Zielona,LOW);
    
    
  }
  else 
  {
          Serial.println("Niepoprawna karta!!!");
          digitalWrite(LED_Czerwona,HIGH);
          delay(2000);
          digitalWrite(LED_Czerwona,LOW);
    
  }
  
  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}

 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

dodaj kolejny wymiar do tablicy poprawna_karta[] aby można zadeklarować więcej kart a

if (rfid.uid.uidByte[0] == poprawna_karta[0] || 
      rfid.uid.uidByte[1] == poprawna_karta[1] || 
      rfid.uid.uidByte[2] == poprawna_karta[2] || 
      rfid.uid.uidByte[3] == poprawna_karta[3] ) 

wywołuj w pętli aby sprawdzić dodatkowe karty.

Link do komentarza
Share on other sites

Przede wszystkim: w swoim programie masz błąd polegający na użyciu nieprawidłowego operatora (or zamiast and) - w Twoim przypadku wystarczy aby dowolny jeden bajt był zgodny z poprawnym wzorcem aby karta była uznana za ważną! Czyli ważna będzie np. karta o numerze {0x11,0x79,0x22,0x33 (bo na pozycji 1 bajt jest identyczny z wzorcem).

Rada: użyj funkcji z biblioteki którą ktoś już napisał zamiast ściubić bajty, zawsze jedno miejsce mniej gdzie można się machnąć. Czyli coś w stylu:
 

// na początku, dla funkcji memcmp

#include <string.h>

// i w porównaniu:
  
if (!memcmp(rfid.uid.uidByte, poprawna_karta, 4)) {
	// memcmp zwraca 0 czyli ciągi bajtów są identyczne
}

Już mamy jedną pętlę mniej. Teraz zgodnie z sugestią kol. @fast_rabbit możemy przerobić to na kilka kart:

// na początku, dla funkcji memcmp

#include <string.h>

const byte poprawne_karty[][4]={
  {0x11,0x22,0x33,0x44},
  {0x44,0x33,0x22,0x11}};

// i w porównaniu:
  
bool found = false;
for (int i = 0; i < 2; i++) {
	if (!memcmp(rfid.uid.uidByte, poprawna_karta[i], 4)) {
		// memcmp zwraca 0 czyli ciągi bajtów są identyczne
        found = true;
      	break; // dalej nie musimy sprawdzać
	}
}

if (found) {
  Serial.println("karta ważna")
}

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.