Помогите с RFID !!!

Тема в разделе "Arduino & Shields", создана пользователем ZaikaBlogs, 25 июл 2014.

  1. ZaikaBlogs

    ZaikaBlogs Нерд

    Hello, ребзя,
    Я смотрел урок Джереми но ничего не понял про RFID.

    HELP ME !!!
     
  2. попробуй посмотреть еще раз
     
  3. ZaikaBlogs

    ZaikaBlogs Нерд

    пытался
     
  4. lerik2703

    lerik2703 Гик

    начните пересмотр с того момента когда уже не понятно!
     
  5. geher

    geher Гуру

    А что именно непонятно?
     
  6. ZaikaBlogs

    ZaikaBlogs Нерд

    само программирование
     
  7. lerik2703

    lerik2703 Гик

    Код (C):
    //Jeremy Blum's Arduino Tutorial Series - Episode 12 - RFID Cards
    //Sample Code - RFID Security
    //http://www.jeremyblum.com
    //Some Code Adapted from http://www.cooking-hacks.com
    //Some code from arudino Tone Library: http://arduino.cc/en/Tutorial/Tone
    //Some code from my 5th Arduino Tutorial on Motor Control: http://jeremyblum.com/2011/01/31/arduino-tutorial-5-motors-and-transistors/
    //Code Updated on 1/21/2012 to comply with Arduino 1.0 Changes

    #include <Servo.h>
    #include "pitches.h"
    byte data[5];  //For holding the ID we receive
    int val = 0;
    byte jeremy[5] = {0x3E,0x00,0xFC,0xBD,0x88};
    byte david[5]  = {0x3E,0x00,0xFC,0xFF,0xA5};
    int j_melody[] = {NOTE_G4,0,NOTE_A4,0, NOTE_B4,0,NOTE_A4,0,NOTE_B4,0, NOTE_C5,0};
    int j_noteDurations[] = {8,8,8,8,8,4,8,8,8,8,8,4};
    int d_melody[] = {NOTE_C4,0,NOTE_D4,0,NOTE_F4,0,NOTE_D4,0,NOTE_F4,0,NOTE_G4,0};
    int d_noteDurations[] = {8,8,8,8,8,4,8,8,8,8,8,4};
    int fail_melody[] = {NOTE_G2,0,NOTE_F2,0,NOTE_D2,0};
    int fail_noteDurations[] = {8,8,8,8,8,4};
    int speaker_pin = 8;
    int servoPin = 9;

    //Create Servo Object
    Servo doorLock;

    void setup()
    {

      //Attaches the Servo to our object
      doorLock.attach(servoPin);

      // Start serial port 19200 bps
      Serial.begin(19200);

      // Setting Auto Read Mode - EM4102 Decoded Mode - No password
      // command: FF 01 09 87 01 03 02 00 10 20 30 40 37
      Serial.write(0xFF);  //Header
      Serial.write(0x01);  //Reserved
      Serial.write(0x09);  //Length (Command + Data)
      Serial.write(0x87);  //Command (0x87 sets auto mode behavior
      Serial.write(0x01);  //Data 1: Enable Auto-Read
      Serial.write(0x03);  //Data 2: Mode – Parity decoded – Manchester RF/64
      Serial.write(0x02);  //Data 3: Total number of block to be read (2)
      Serial.write((byte)0x00);  //Data 4: No password expected
      Serial.write(0x10);  //Data 5: Password byte 1
      Serial.write(0x20);  //Data 6: Password byte 2
      Serial.write(0x30);  //Data 7: Password byte 3
      Serial.write(0x40);  //Data 8: Password byte 4
      Serial.write(0x37);  //Checksum

      delay(500);
      while(Serial.available()>0)
      {
        Serial.read();
      }
      Serial.println();
      Serial.println("RFID module started in Auto Read Mode, Waiting for Card...");
    }

    void loop()
    {
      val = Serial.read();
      while (val != 0xff)
      {  //On Successful read, first byte will always be 0xFF
          val = Serial.read();
          delay(1000);
      }

      //we already read the header (0xff)
      Serial.read();              // reserved
      Serial.read();              // length
      Serial.read();              // command (indicates tag data)
      data[0] = Serial.read();    // we read data 1
      data[1] = Serial.read();    // we read data 2
      data[2] = Serial.read();    // we read data 3
      data[3] = Serial.read();    // we read data 4
      data[4] = Serial.read();    // we read data 5
      Serial.read();              // checksum

      // Indentify RFID Card
      boolean j_card = true;
      boolean d_card = true;
      Serial.print("Card found - Code: ");
      for (int i=0; i<5; i++)
      {
        if (data[I] < 16) Serial.print("0");
        Serial.print(data[I], HEX);
       
        //cross-check
        if (data[I] != jeremy[I]) j_card = false;
        if (data[I] != david[I]) d_card = false;
      }
      Serial.println();

      if (j_card)
      {
        Serial.println("Hello Jeremy!");
        for (int i = 0; i < 12; i++)
        {
          int j_noteDuration = 1000/j_noteDurations[I];
          tone(speaker_pin, j_melody[I],j_noteDuration);
          int j_pauseBetweenNotes = j_noteDuration * 1.30;
          delay(j_pauseBetweenNotes);
          noTone(speaker_pin);
        }
      }
      else if (d_card)
      {
        Serial.println("Hello David!");
        for (int i = 0; i < 12; i++)
        {
          int d_noteDuration = 1000/d_noteDurations[I];
          tone(speaker_pin, d_melody[I],d_noteDuration);
          int d_pauseBetweenNotes = d_noteDuration * 1.30;
          delay(d_pauseBetweenNotes);
          noTone(speaker_pin);
        }
      }
      else
      {
        Serial.println("Not Recognized!  Get out of Here!");
        for (int i = 0; i < 6; i++)
        {
          int fail_noteDuration = 1000/fail_noteDurations[I];
          tone(speaker_pin, fail_melody[I],fail_noteDuration);
          int fail_pauseBetweenNotes = fail_noteDuration * 1.30;
          delay(fail_pauseBetweenNotes);
          noTone(speaker_pin);
        }
      }

      //Unlock Door for Authorized Users
      if (d_card || j_card)
      {
            doorLock.write(180);
            delay(5000);
            doorLock.write(0);
      }

      Serial.println();
    }
    с какой строки не понятно?
     
  8. ZaikaBlogs

    ZaikaBlogs Нерд

    Serial.write(0xFF);
     
  9. geher

    geher Гуру

    В последовательный порт, к которому подключен RFID сканер, выдаются команды.
    Выдаются они побайтно.
    Всякая команда сканера начинается с байта 0xFF и заканчивается байтом контрольной суммы.
    В данном случае передается команда активации режима сканирования общей длиной 13 байт.
     
  10. lerik2703

    lerik2703 Гик

    внесу и свои 5 копеек :) данная настройка требуется для RFID сканера использованного в видео уроке,а для RFID сканера который продаться в амперке этого не нужно ,он сразу готов к работе.