• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z modułem RFID
#1
Cześć,

jest to mój pierwszy post na tym forum, ale widzę że tematy jakie poruszacie są bardzo ciekawe. Jestem dość początkującym użytkownikiem Arduino, a tematem, którym zajmuję się aktualnie jest zestaw skrzyneczek, które chciałbym otwierać za pomocą breloków RFID. Stronę mechaniczną projektu mam mniej więcej opanowaną - planuję zrobić to z wykorzystaniem elektrozamków zasilanych zewnętrznie z użyciem przekaźników. Moduł RFID, który kupiłem to urządzenie, którego opis można znaleźć pod tym linkiem:

https://botland.com.pl/pl/grove-moduly-d...ntena.html

Udało mi się do niego ściągnąć biblioteki ze strony producenta, które wydają się działać poprawnie. Kod wygląda tak:
Kod:
#include "Suli.h"
#include "Wire.h"
#include "SoftwareSerial.h"

#include "Rfid_Reader_Arduino.h"


SoftwareSerial mySerial(A5, A4);

Rfid_Reader_Arduino rfid(&mySerial, -1);

void setup()
{
    Serial.begin(115200);

}

int len;
unsigned char dta[50];

void loop()
{
    if(rfid.isData())
    {
        len = rfid.getData(dta);
    }
   
    if(len>0)
    {
        for(int i=0; i<len; i++)
        {
            Serial.write(dta[i]);
        }
        len = 0;
    }
}


Program funkcjonuje prawidłowo - pokazuje w monitorze portu szeregowego numer breloka w formacie "02002428CBC5", przez co wnioskuje, że wszystko dobrze podłączyłem.

Mam natomiast problem z uchwyceniem zmiennej, która przechowuje odczytany kod. Kiedy próbuje konstruować jakąkolwiek funkcję w oparciu o zmienną len lub dta, to program pokazuje błąd lub układ po prostu nie działa. Chciałbym, aby działało to w ten sposób, że przy odczytaniu kodu x na pin 1 kontroler podaje napięcie wysokie, a jak kod y to wysokie na pin 2 itd.

Wydaje mi się, że biblioteka korzysta z funkcji tablicowej, niestety nie potrafię na jej podstawie nic sensownego stworzyć

Czy ma ktoś jakiś pomysł jak napisać kilka linijek, które to załatwią?
 
Odpowiedź
#2
A co się pokaże, gdy zamiast:
Kod:
        for(int i=0; i<len; i++)
        {
            Serial.write(dta[i]);
        }
        len = 0;

wpiszesz:
Cytat:Serial.print(dta);
 ???
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
Cześć,
dzięki za odpowiedź. Mam problem z kablem USB, jesli jutro dojdzie nowy to sprawdze i koniecznie dam znać.
Raz jeszcze dziekuję!
 
Odpowiedź
#4
Mam w końcu kabel i sprawdziłem Twoją sugestię. Po wklejeniu nowej frazy pojawia się komunikat:


no matching function for call to 'print(unsigned char [50])'

Czy wie ktoś co to może oznaczać?
 
Odpowiedź
#5
Masz dane w buforze.
Mozesz zrobic z tym co chcesz..

Zrob liste swoich bryloczkow (kodow) w osobnym buforze lub w osobnych i porownuj bufory.
Jak porownasz i sie zgadzaja,wystawiasz pin.
Mozesz bufor zamienic na String i porownywac.

Opcji jest duzo

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#6
A zrobiłeś to, o co prosiłem?
Podaj zmieniony kod.

Anyway.
Masz odczytane dane w tablicy dta.
Masz podaną długość łańcucha w zmiennej len.
W kodzie, który podałeś masz przykład jak wystawić dane na ekran.
W taki sam sposób możesz wysłać te dane do funkcji sprawdzającej.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości