BASIC4MCU | 질문게시판 | 서보모터 시간제어
페이지 정보
작성자 코시 작성일2019-05-25 15:12 조회9,234회 댓글1건본문
RFID를 이용하여 서보모터가 if문 만족시(올바른 카드 태그) 작동하여 90도 움직고 작동이 시작된 시점부터 이후 30초동안만 상태 유지한 후 30초 이후에 다시 0도로 돌아가게 만드려면 아래 코드에서 무엇을 추가하면 될까요?
아래는 서보모터 작동시키는 조건문입니다.
state는 카드가 1 번 태그될 경우 문을열고 다시 한 번 태그될 경우 문을 닫기 위해 삽입하였는데 이 기능과 자동으로 문이 닫히는 기능 둘 다 포함하는 코드를 작성하고 싶습니다.
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;
delay(500);
}
else
{
Serial.println("Door Close");//시리얼모니터에 Close 출력
angle = 0;
delay(500);
}
delay(10);
}
코드 전체
#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 상태값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;
delay(500);
}
else
{
Serial.println("Door Close");//시리얼모니터에 Close 출력
angle = 0;
delay(500);
}
delay(10); // 필요한가?
}
else
{
angle = 0;
Serial.println("ID not Matched");
delay(500);
}
servo.write(angle);
delay(1000);
}
댓글 1
조회수 9,234master님의 댓글
master 작성일
아래 질문에서 60초 후에 close 시키는 것에 관해서 질문 하셨는데요
답글에서 어떻게 처리했는지 공부해서 동일한 방법으로 적용하면 되겠습니다.