?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

RFID 몇가지 질문이 있습니다

페이지 정보

작성자 Divide 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-03-04 17:01 조회1,050회 댓글1건

본문

하드카피월드가 가장 설명이 잘 되어있는거 같아 예제와 강의 따라하면서

공부하고 있는 초보 비전공자 입니다. 코딩이랑 전자쪽으로 전혀 문외한에서 시작하다보니

단순한 작업인 RFID를 이용해 릴레이를 ON/OFF 시키는 동작하는데 2주가 걸렸네요.. ㅠ

동작 시키는데는 성공했는데요 추가로 몇가지 기능을 더 해보다가 궁금한점이 있어서 질문글 남겨봅니다

1. 이 스케치에서의 동작은 카드를 댔을때 릴레이가 ON 된 상태를 유지하고 있는데요

   유지되는게 원하는 동작이긴 한데 만약 ON 상태에서 다시 한번 카드를 댔을때 OFF

    즉 댈때마다 ON/OFF가 반복되게 하고 싶은데 생각나는 방법이

      1) if문 안에 if 문을 하나더 넣어서 ON일경우 OFF일경우를 구분 하기

      2) for문을 이용해서 읽는 횟수를 카운팅해서 변수가 홀수일때 짝수일때를 구분하기

       이런 방법 말고 다른 방법이 있을까요?

2. 만약 이 동작으로 도어락을 만든다고 했을때 가족 모두의 카드 4장을 전부 인식했을때

문이 열리게끔 하려면 아래 링크처럼 각 아두이노1대+RFID모듈1대씩

총 아두이노4대+RFID모듈4대 를 이용해서 릴레이를 서로 물리게끔 해보려고 하는데

가능한 방법일까요??

 

-------------스케치입니다----------

#include
#include

#define uchar unsigned char
#define uint unsigned int
uchar serNumA[5];

uchar fifobytes;
uchar fifoValue;

AddicoreRFID myRFID;

const int chipSelectPin = 10;
const int NRSTPD = 5;
int relay = 2;
#define MAX_LEN 16

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

   SPI.begin();
  pinMode(relay, OUTPUT);
  pinMode(chipSelectPin, OUTPUT);             
  digitalWrite(chipSelectPin, LOW);       
  pinMode(NRSTPD, OUTPUT);                  
  digitalWrite(NRSTPD, HIGH);

  myRFID.AddicoreRFID_Init();
}

void loop()
{
  uchar i, tmp, checksum1;
  uchar status;
  uchar str[MAX_LEN];
  uchar RC_size;
  uchar blockAddr; 
  String mynum = "";
  str[1] = 0x4400;
   status = myRFID.AddicoreRFID_Request(PICC_REQIDL, str);
  if (status == MI_OK)
  {
    Serial.println("RFID tag detected");
    Serial.print(str[0], BIN);
    Serial.print(" , ");
    Serial.print(str[1], BIN);
    Serial.println(" ");
  }

    status = myRFID.AddicoreRFID_Anticoll(str);
  if (status == MI_OK)
  {
    checksum1 = str[0] ^ str[1] ^ str[2] ^ str[3];
    Serial.println("The tag's number is  : ");
    //Serial.print(2);
    Serial.print(str[0]);
    Serial.print(" , ");
    Serial.print(str[1], BIN);
    Serial.print(" , ");
    Serial.print(str[2], BIN);
    Serial.print(" , ");
    Serial.print(str[3], BIN);
    Serial.print(" , ");
    Serial.print(str[4], BIN);
    Serial.print(" , ");
    Serial.println(checksum1, BIN);
    if (str[0] == 50)
    {
      digitalWrite(relay, HIGH);
    } else if (str[0] == 206) { 
      digitalWrite(relay, HIGH);
      delay(1000);
    }
  }

  myRFID.AddicoreRFID_Halt();  

}

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

1. 아래 처럼 전역 변수를 하나 선언해 두고 바꾸는 방법이 있습니다.
boolean isOn = false;
void toggleStatus() {
    isOn = !isOn;
}

2. RFID 수신기에 여러개의 ID 카드를 사용하실 수 있을겁니다. 아두이노1-RFID수신모듈1-카드4 이렇게 쓰시는 방법을 찾아보시면 될듯 합니다.