BASIC4MCU | 질문게시판 | rfid 태그 도어락
페이지 정보
작성자 코시 작성일2019-05-29 00:55 조회3,155회 댓글0건본문
RFID 를 이용해 서보모터를 컨트롤 하는데
우선 1번 태그하면 문이 열리고 타이머가 흘러가 30초 후에 문이 닫히는 기능인데
중간에 한 번 더 태그하면 타이머 흘러가는거 무시하고 그냥 바로 문 닫히게 하고싶습니다.
어떻게 코드를 바꿔야 할까요? 중간에 rfid를 읽는 코드같은거 한 번 넣어봤더니 이러면 읽기전까지 대기모드라서 타이머가 안흘러가네요 ㅠㅠ
#include <MFRC522.h>
#include <MFRC522Extended.h>
#include <SPI.h>
#include <Servo.h>const int RST_PIN = 9;
const int SS_PIN = 10;/*
RST --> Pin 9
SS --> Pin 10
MOSI --> Pin 11
MISO --> Pin 12
SCK --> Pin 13
*/MFRC522 mfrc(SS_PIN, RST_PIN); // MFR522를 이용하기 위해 mfrc객체를 생성
Servo servo;
int angle = 0;
boolean state = false; //Servo Moter 상태값
int timer = 0;void setup()
{
servo.attach(3); //모터 동작 핀 설정
Serial.begin(9600);
while (!Serial);
SPI.begin(); // Init SPI bus
mfrc.PCD_Init(); //Init MFRC522
Serial.println(F("Warning: this example clears your mifare UID, use with care!"));
servo.write(0);//모터 0도 설정
delay(50);}
void loop()
{if (!mfrc.PICC_IsNewCardPresent()) return; //새 카드 확인
if (!mfrc.PICC_ReadCardSerial()) return; //카드 읽기
//읽은 Card UID와 등록된 Card UID가 일치하는지 확인
if (mfrc.uid.uidByte[0] == 119 && mfrc.uid.uidByte[1] == 85 && mfrc.uid.uidByte[2] == 201 && mfrc.uid.uidByte[3] == 59)
{
Serial.println("ID Conformed");
state = !state;
if (state == true)
{
Serial.println("Door Open");
angle = 90;
servo.write(angle);
delay(500);
for (timer = 0; timer <= 30; timer++)
{
Serial.println(timer);
delay(100);
if (timer == 30)
{
goto Close;
}
}
}
else
{
Close:
Serial.println("Door Close");//시리얼모니터에 Close 출력
angle = 0;
servo.write(angle);
delay(500);
}
delay(10); // 필요한가?
}
else
{
angle = 0;
servo.write(angle);
Serial.println("ID not Matched");
delay(500);
}
delay(1000);
}
댓글 0
조회수 3,155등록된 댓글이 없습니다.