답변 : rfid 태그 도어락
페이지 정보
작성자 master 작성일19-05-29 07:01 조회4,290회 댓글1건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2019-05-29 오전 7:08:12
// by Ok-Hyun Park
//
RFID 를 이용해 서보모터를 컨트롤 하는데
우선 1번 태그하면 문이 열리고 타이머가 흘러가 30초 후에 문이 닫히는 기능인데
중간에 한 번 더 태그하면 타이머 흘러가는거 무시하고 그냥 바로 문 닫히게 하고싶습니다.
어떻게 코드를 바꿔야 할까요? 중간에 rfid를 읽는 코드같은거 한 번 넣어봤더니 이러면 읽기전까지 대기모드라서 타이머가 안흘러가네요 ㅠㅠ
//
/*
RST -->Pin 9
SS -->Pin 10
MOSI-->Pin 11
MISO-->Pin 12
SCK -->Pin 13
*/
#include <MFRC522.h>
#include <MFRC522Extended.h>
#include <SPI.h>
const int RST_PIN=9;
const int SS_PIN=10;
MFRC522 mfrc(SS_PIN,RST_PIN); // MFR522를 이용하기 위해 mfrc객체를 생성
//
#include <Servo.h>
Servo servo;
//
bool state=0;
int angle=0,timer=0;
//
void setup(){
servo.attach(3); servo.write(0);
SPI.begin(); mfrc.PCD_Init(); //Init MFRC522
Serial.begin(9600); while(!Serial);
delay(50);
}
//
void loop(){
if(mfrc.PICC_IsNewCardPresent()){ // 새 카드
if(mfrc.PICC_ReadCardSerial()){ // 카드 읽기
if(mfrc.uid.uidByte[0]==119&&mfrc.uid.uidByte[1]==85&&mfrc.uid.uidByte[2]==201&&mfrc.uid.uidByte[3]==59){ // UID 체크
Serial.println("ID Conformed"); state^=1;
if(state){ Serial.println("Door Open"); angle=90; timer=30; }
else { Serial.println("Door Close"); angle=0; timer= 0; }
}
else{ angle=0; Serial.println("ID not Matched"); }
servo.write(angle);
}
}
delay(1000);
//
if(timer){ Serial.println(timer);
if(--timer==0){ Serial.println("Door Close"); angle=0; servo.write(angle); }
}
}
댓글 : 1
조회수 : 4,290
코시님의 댓글
코시 작성일감사합니다. 근데 이게 어떨때는 되다가 어떨때는 안되고 막 그러네용... 왜그런지 아시나요? 스케치 업로드 하고 rfid가 읽힐때가 있고 안읽힐때가 있어요