Зчитувач RFID YR8001


0

Я роблю проект на пасивну систему RFID з використанням RFID-читача YR8001. Я новачок і не знаю багато про нього. Після читання різних статей і блогів я дізнався, що більшість читачів дозволяють користувачеві використовувати RS232 (YR 8001 також). RS232 і TTL працює на двох різних рівнях напруги, і якщо хтось хоче підключити читач до комп'ютера через мікроконтролер вам потрібно RS232-TTL перетворювач (я використовую MAX232 для цього).

Сайт, з якого я замовив частину, дає з продуктом програмне забезпечення, яке допоможе вам взаємодіяти з читачем, але це не дає можливості відправити вихід на мікроконтролер. Моя потреба полягає в тому, щоб читати RFID-мітку, і якщо вона робить це повинно виводити на мікроконтролер. Тому я намагаюся зробити свою власну програму за допомогою Arduino.

Для перевірки підключення мого читача до комп'ютера я використовую coolTerm (програмне забезпечення для послідовного зв'язку). Хоча я можу успішно підключити його, натиснувши на кнопку підключення в coolTerm, я не впевнений, що це насправді підключення, оскільки я не бачу нічого на екрані послідовного монітора і, як на моє розуміння після читання різних блогів, читач повинен відправити деякі \ t сповіщення про те, що ваш комп'ютер підключений до читача, і вони обидва можуть зараз спілкуватися.

Будь-який провідник на те, що я повинен зробити, буде дуже корисним для мене, оскільки я застряг, і я не можу думати про те, як діяти зараз.

Відповіді:


0

Це приклад, який я працював кілька місяців тому. Я думаю, що він працює нормально. Програма скидає antena, потім встановлює робочу антену, а потім працює як інвентар реального часу. Якщо ви знаєте деякі про arduino ви можете прочитати в коді. (Вона має деякі іспанські коментарі, тому що я в Мексиці)

#include <SPI.h>
#include <SD.h>

File myFile;

byte reset_Message[] = {0xA0, 0x03, 0x01, 0x70, 0xEC };
byte set_WorkingAntenna[] = {0xA0, 0x04, 0x01, 0x74, 0x00, 0xE7 };
byte real_TimeInventory[] = {0xA0, 0x04, 0x01, 0x89, 0x01, 0xD1 };

int cont = 0;
int contSD = 1;
byte tag_ID[21];
String tag_IDInt="";

unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change :
const long interval = 100;           // interval at which to blink (milliseconds)

boolean found = false;

void setup() {
  // initialize both serial ports:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial2.begin(115200);
  Serial.print("Inicializando Memoria SD...");
  if (!SD.begin(4)) {
    Serial.println("Inicializacion Fallida!");
    return;
  }
  Serial.println("Inicializacion Correcta.");
  delay(100);
  Serial2.write(reset_Message, sizeof(reset_Message));
  delay(500);
  Serial2.write(set_WorkingAntenna, sizeof(set_WorkingAntenna));
  delay(50);
  Serial2.write(real_TimeInventory, sizeof(real_TimeInventory));  
  tag_IDInt.reserve(200);
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    Serial2.write(set_WorkingAntenna, sizeof(set_WorkingAntenna));
    delay(50);
    Serial2.write(real_TimeInventory, sizeof(real_TimeInventory));
  }

  // read from port 2, send to port 0:
  if (Serial2.available()) {
    byte inByte = (byte)Serial2.read();
    tag_ID [cont] = inByte;
    //Serial.write(inByte);
    cont++;
    if (cont == 6 && tag_ID[3] == 116){ cont = 0;}
    if (cont == 12 && tag_ID[4] == 0 ){ cont = 0;}
    if (cont == 21){
      for (int i=7; i<19; i++){
        tag_IDInt += String(tag_ID[i],HEX);
        //Serial.print(tag_ID[i], HEX);
        //Serial.print(" ");
      }
      tag_IDInt += (char)'\r';
      Serial.print("Tu ID es: ");
      Serial.print(tag_IDInt);
      if (lookForID(tag_IDInt)){
        Serial.println(", Acceso Permitido");
      }else{
        Serial.println(", Acceso Denegado");
      }
      found = false;
      tag_IDInt = "";
      cont = 0;
    }
  }
}

boolean lookForID(String read_ID){
  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open("TAGIDS.csv", FILE_WRITE);

  // re-open the file for reading:
  myFile = SD.open("TAGIDS.csv");
  if (myFile) {
    // read from the file until there's nothing else in it:
    while (myFile.available() && !found) {
      String line = myFile.readStringUntil('\n'); 
      if (line == read_ID){  
        //Serial.print(" Found in Line ");
        //Serial.print(contSD);
        found = true;
        contSD = 1;
        return true;
      }
      else
        contSD++;
    }
    // close the file:
    myFile.close();
    if(!found){
      contSD = 1;
      return false;
    }
  } else {
    // if the file didn't open, print an error:
    Serial.println("Error Abriendo TAGIDS.csv");
  }
} 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.