BASIC4MCU | 질문게시판 | 키패드 led 인체감지 질문
페이지 정보
작성자 면지지 작성일2022-06-02 14:24 조회8,587회 댓글0건본문
지금 도어락 코딩중인데 지금까지 구현한게
1.키패드로 비밀번호 입력하면 서보모터 동작
2.앱인벤터로 앱 개발해서 앱으로도 비밀번호 입력하면 서보모터 동작
3.인체감지센서 hc-sr501 사용해서 문 앞에 인체감지되면 앱인벤터로 푸시알람 보내기+uvc led 꺼짐(8초)
입니다
여기서 문제가 uvc led가 꺼져있는 8초동안에는 키패드랑 앱인벤터 비밀번호 입력이 안됩니다
어떻게 고쳐야할지 감이 안옵니다 ㅠㅠ
led꺼짐과 키패드 비밀번호 입력이 동시에 가능한건가요?
아두이노 우노 사용중입니다
//앱이랑 키패드로 문열기 알림감지
#include <Keypad.h>
#include <Servo.h> // 서보모터를 위한 Servo.h 라이브러리를 포함한다.
#include <SoftwareSerial.h> // SoftwareSerial을 통해 블루투스와 데이터 전송
SoftwareSerial BTserial(2, 3); // Tx2 Rx3
Servo myservo;
int num = 10000;
int b = 0;
int tru=0; // 비밀번호가 맞는지 확인
int count=0;
char PW[]= {"2222"}; //비밀번호
String str_data = "";
const byte ROWS = 4;
const byte COLS = 3;
byte rowPins[ROWS] = {10, 9, 8, 7};
byte colPins[COLS] = {6, 5, 4};
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
#define Sensing_pin A2 // 센서 신호선 핀 설정입니다.
#define UVC A3 // UVC 핀 설정입니다.
void setup(){
Serial.begin(9600);
myservo.attach(A1); // A1번핀에 서보모터 연결
BTserial.begin(9600); // 9600 속도로 블루투스시리얼(소프트웨어시리얼) 통신을 시작한다
delay(100);
}
//myservo.write(0);
void loop(){
num++; //num 1씩 증가
if ( num >= 10000 ) //num이 100000이상일 때 코드 실행
{
num = 0;
if (digitalRead(Sensing_pin) == HIGH)
{
myservo.detach();
BTserial.println("블루투스감지됨"); // 움직임이 감지됐어요!
Serial.println("감지되었습니다");
digitalWrite(A3,LOW); //UVC 꺼짐
delay(8000);
}
else
digitalWrite(A3,HIGH); //감지 안되면 UVC 켜져있음
myservo.attach(A1);
}
if(BTserial.available()){ // 블루투스를 통해 수신된 데이터가 있으면
str_data = getStringdata();
Serial.println(str_data);
if ( str_data == PW ){
myservo.write(180);
Serial.println("open");
BTserial.print('o');
delay(15);
}
else if (str_data != PW) {
Serial.println("close");
BTserial.print('x');
myservo.write(0);
}
}
char key = keypad.getKey(); // 키패드 입력받는 부분
if (key)
{
Serial.println(key);
if(key==PW[count]) //입력번호와 비밀번호가 맞을시 count,tru++
{
count++;
tru++;
}
else if(key!=PW[count])//입력번호와 비밀번호가 틀릴시 count만 ++
{
count++;
}
if(count==4)//count개수가 비밀번호 개수와 같을 시
{
if(tru==4)
Su();//성공함수
else
Fa();//실패함수
tru=0;
count=0;
}
}
}
String getStringdata(){
String str = ""; // str 를 String(문자열형)으로 선언
while(BTserial.available()){ // 블루투스가 실행되는 동안
str += (char)BTserial.read(); // 블루투스에서 읽어드리는값을 char 형으로 변환 하면서 str에 합치기
delay(5);
}
return str; // 합쳐진 문자열형 반환
}
void Su()//성공했을시 모터를 돌려주며 성공메세지 보내기
{
myservo.write(180);
Serial.println("open the door");
}
void Fa()//실패했을시 모터를 돌려주며 실패메세지 보내기
{
myservo.write(0);
Serial.println("close the door");
}
댓글 0
조회수 8,587등록된 댓글이 없습니다.