Skocz do zawartości
skorqion

RFID rc522- dodanie 2 tagu

Pomocna odpowiedź

Napisano (edytowany)

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

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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")
}

 

Udostępnij ten post


Link to post
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!

Gość
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...