Skocz do zawartości

Odczyt wielu kart RFID


Zbyszko66

Pomocna odpowiedź

Dzień dobry!

Pobieżnie przejrzalem forum i nie znalazlem odpowiedzi na moje pytanie, wiec moze ktos bedzie umial mi pomoc. Od razu zaznaczam, ze jestem slaby w elektronice i programowaniu, wiec pytanie moze byc dla niektorych banalne, jednak ja mam z tym problem. Chodzi o odczyt wielu kart RFID, jedna po drugiej, z tym ze musza byc one przylozone w odpowiedniej kolejnosci (jest to jedna z zagadek w escape roomie). W zalaczniku znajduje sie kod, jakim probowalem zrobic to w arduino - jest to przerobiony kod z filmiku będącego instrukcją do zakupionego modulu ( https://botland.com.pl/rfid/6765-modul-rfid-mf-rc522-1356mhz-spi-karta-i-brelok.html - link do modulu i filmiku). Generalnie moduł bez problemu odczytuje pierwszą karte - i to niezaleznie od tego, ktora z nich ustale jako numer jeden. Jednakze przy probie odczytu drugiej karty za kazdym razem wyswietlana jest informacja o niepoprawnosci karty. Czy ktos ma moze jakis pomysl ,jak sprawe rozwiazac? Z gory dziekuje za odpowiedzi i pozdrawiam

rfid.txt

Link do komentarza
Share on other sites

Postaram się pomóc, najwyżej ktoś bardziej znający się na temacie będzie musiał pomóc.

Problem leży w tej linijce:

     if (rfid.uid.uidByte[0] == UID2[0] && 
         rfid.uid.uidByte[1] == UID2[1] &&
         rfid.uid.uidByte[2] == UID2[2] &&
         rfid.uid.uidByte[3] == UID2[3])
         { karta2 = true;
         if (karta1==true&&karta2==true)

W tym momencie zagnieździłeś if'a w if'ie, a powinny być to moim zdaniem dwa osobne if'y.

Link do komentarza
Share on other sites

Jeżeli odczytuje karty, to może kwestia logiki?

odczytajKarte();

if (karta1 == false && karta2 == false) {
     if (UID karty == UID karta1) {
     karta1 == true;
   }

i ten warunek już się nie wykona przy kolejnym przejściu przez loop().

Jezeli dopiszesz kolejny warunek

 
if (karta1 == true && karta2 == false) {
     if (UID karty == UID karta2) {
         karta2 == true; 
     } else {
         karta2 == false;
         karta1 == false; // i sekwencje powtarzasz od początku (lub zostawiasz true)

i pozostaje sprawdzenie:

 
if (karta1 && karta2) {
     otworzDrzwi();
}

Sorry za pseudo kod - ale pewnie próbowałbym to zrobić w ten sposób.

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.