BASIC4MCU | 질문게시판 | 답변 : 답변 : 답변 : 아두이노 인터럽트
페이지 정보
작성자 hello 작성일2019-11-11 15:51 조회15,282회 댓글5건본문
#include
#include
#include
//
const int RST_PIN=9,SS_PIN=10;
MFRC522 mfrc522(SS_PIN,RST_PIN); // MFRC522 인스턴스
//
Servo servo;
//
const int SERVO_PIN=8,TONEPIN=5;
const int LED1=A5,LED2=A4;
const int TRIG_PIN=7,ECHO_PIN=6;
//
byte cardkeyByte[4]={0xE9,0x85,0x59,0x98}; //card UID
bool status=0;
//
void setup(){
pinMode(TRIG_PIN,OUTPUT); pinMode(ECHO_PIN,INPUT);
pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT);
//
SPI.begin(); mfrc522.PCD_Init();
//
//
servo.attach(SERVO_PIN);
//
Serial.begin(9600); while(!Serial);
delay(50);
}
//
void loop(){
noTone(TONEPIN);
if(mfrc522.PICC_IsNewCardPresent()){ // 새 카드 확인if(mfrc522.PICC_ReadCardSerial()){ // 카드 읽기
if(!memcmp(mfrc522.uid.uidByte,cardkeyByte,4)){ // UID 일치
tone(TONEPIN,523,1000/8); delay(1000/4*1.30); noTone(TONEPIN); //카드 확인 메세지
status^=1;
if(status){
digitalWrite(TRIG_PIN,HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN,LOW);
float duration=pulseIn(ECHO_PIN,HIGH);
float distance=duration/57.5;
//
if(distance<10){
digitalWrite(LED1,LOW); digitalWrite(LED2,HIGH);
Serial.print("Close: "); Serial.println(distance);
noTone(TONEPIN); tone(TONEPIN,3700); if(myDelay(325))return;
noTone(TONEPIN); tone(TONEPIN,3900); if(myDelay(325))return;
noTone(TONEPIN); tone(TONEPIN,3700); if(myDelay(325))return;
noTone(TONEPIN); tone(TONEPIN,3900); if(myDelay(325))return;
noTone(TONEPIN); servo.write(0);
}
else{
digitalWrite(LED1,HIGH); digitalWrite(LED2,LOW);
Serial.println("Open"); servo.write(180);
}
}
}
delay(500);
}
}
}
//
int myDelay(int d){
for(int i=0;i
if(mfrc522.PICC_IsNewCardPresent())return 1;
delay(1);
}
return 0;
}
rfid 카드를 태그하면 작동이 시작되어open으로 모니터에 뜬후 초음파센서는 아무작동도 일어나지 않습니다 ㅠㅠ
댓글 5
조회수 15,282hello님의 댓글
hello 작성일
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <SoftwareSerial.h>
이부분은 다 입력되어 있습니다!
master님의 댓글
master 작성일
bool status=0; // 초기값 0
처음 초기값이 0 인 것을 잘 염두에 두시고
//
if(!memcmp(mfrc522.uid.uidByte,cardkeyByte,4)){ // UID 일치
tone(TONEPIN,523,1000/8); delay(1000/4*1.30); noTone(TONEPIN); //카드 확인 메세지
status^=1; // <-------------- 초기값 0에서 반전 시키면 1이 됩니다.
if(status){ // 처음 UID 일치되면 if()문이 동작합니다.
digitalWrite(TRIG_PIN,HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN,LOW);
float duration=pulseIn(ECHO_PIN,HIGH);
float distance=duration/57.5;
if()문이 실행되면 초음파센서 값을 읽습니다.
다시 카드를 대서 UDI가 일치되면
status^=1; // <-------------- 값 1에서 반전 시키면 0이 됩니다.
if()문은 실행되지 않습니다.
master님의 댓글
master 작성일
시리얼모니터에 어떤 값이 출력되는지를 보면
if()문 실행 시 어떤 코드가 실행되는지 알 수 있습니다.
//
status^=1;
Serial.print("status="); Serial.println(status); // <--- status를 출력해보면 추적이 더 쉽습니다.
if(status){
hello님의 댓글
hello
위에 사진과 같이 UID 를 태그한후open만 모니터에 뜨고 아예 초음파센서가 반응을 안하는데
master 님은 수정할 부분이 그럼 없다는 말씀이신거죠 ㅠㅠ?
master님의 댓글
master
if(distance<10){
Serial.print("Close: ");
}
else{
Serial.println("Open");
}
"Open"이 떳다는 얘기는 초음파 거리 측정을 했더니 10cm 이상이라는 얘기입니다.