#include <Servo.h>
#include <MFRC522.h>
#include <SPI.h>
#define RST_PIN 9
#define SS_PIN 10
#define SERVO_PIN 5
#define TRIG_PIN 6
#define ECHO_PIN 7
MFRC522 rc522(SS_PIN, RST_PIN);
Servo servo;
int close_delay = 2000, serial_delay = 1000;
unsigned long duration = 0, distance = 0, stop_timer = 0, serial_timer = 0;
byte servo_pos = 0;
bool state_servo = false, state_all = false;
String protocol = "", key = "f039a059";
void setup() {
pinMode(ECHO_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
Serial.begin(9600);
SPI.begin();
rc522.PCD_Init();
delay(10);
rc522.PCD_DumpVersionToSerial();
servo.attach(SERVO_PIN);
servo.write(0);
}
void loop() {
if(rf()){
servoOpen();
}
if(state_servo && !state_all){
if(sr()){
servoOpen();
}else{
if( millis() - stop_timer >= close_delay ){
servo_pos--;
if(servo_pos > 0){
servoWrite();
}else{
state_servo = false;
}
}
}
}
}
void serialEvent(){
if(Serial.available()>0){
char c = (char)Serial.read();
if(c != '\n'){
protocol += c;
}else{
if(protocol.equals("OPEN")){
servoOpen();
}else if(protocol.equals("CLOSE")){
state_all = false;
state_servo = true;
}else if(protocol.equals("ALL")){
state_all = true;
servo_pos = 180;
servoWrite();
}
protocol = "";
}
}
}
bool sr(){
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = ((340 * duration)/1000)/2;
if(distance > 0 && distance < 100){
return true;
}
return false;
}
void servoOpen(){
servo_pos = 180;
state_servo = true;
stop_timer = millis();
servoWrite();
}
void servoWrite(){
servo.write(servo_pos);
}
bool rf(){
if(!rc522.PICC_IsNewCardPresent() || !rc522.PICC_ReadCardSerial()){
return false;
}
if( rc522.uid.size > 0 ){
String hexString = "";
for (byte i = 0; i < rc522.uid.size; i++){
hexString += String(rc522.uid.uidByte[i], HEX);
}
if( hexString == key ){
if(millis() - serial_timer >= serial_delay){
Serial.print("OK\n");
serial_timer = millis();
}
return true;
}else{
if(millis() - serial_timer >= serial_delay){
Serial.print("CARD_ERROR\n");
serial_timer = millis();
}
}
}
return false;
}
★ [ IOT코아 ]에서 실행방법은 아래 링크를 참고해주세요
https://koa-rea.tistory.com/63
★ 실제 동작 영상은 아래 링크를 참고해주세요
'아두이노 예제 코드' 카테고리의 다른 글
아두이노 LORA( RF-95) 화재( Server ) 코드 (0) | 2022.12.05 |
---|---|
아두이노 LORA( RF-95) 화재( Client ) 코드 (0) | 2022.12.05 |
아두이노 MLX90614, DHT11 코드 (0) | 2022.11.30 |
아두이노 초음파거리센서 코드( 연동 ) (0) | 2022.11.30 |
아두이노 32x8 매트릭스 코드( 연동 ) (2) | 2022.11.30 |
댓글