BASIC4MCU | 질문게시판 | 아두이노 키패드 질문
페이지 정보
작성자 면지지 작성일2022-07-10 15:18 조회239회 댓글0건본문
아두이노 레오나르도 사용중입니다
앱으로 문열기,알림받기.체온측정 다 되는데
키패드로 문 여는것만 안됩니다.
코드를 어떻게 수정해야 할까요?
#include "Adafruit_VL53L0X.h"
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include "Arduino.h"
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <Wire.h>
#include <VL53L0X.h>
SoftwareSerial MP3Module(8, 9); // tx, rx
DFRobotDFPlayerMini myDFPlayer;
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
//Adafruit_VL53L0X lox = Adafruit_VL53L0X();
#include <Keypad.h>
#include <Servo.h>
Servo myservo;
VL53L0X d;
float Distance = 0;
float temperature = 0;
int value = 0; // 각도를 조절할 변수 value
int state; // 0의 신호가 출력되면 close, 1의 신호가 출력되면 open 되는 스위치 입니다.
const int sensor = A0;
#define Sensing_pin A2 // 센서 신호선 핀 설정입니다.
#define UVC A3 // UVC 핀 설정입니다.
char PW[]={"2222"}; //비밀번호
String str_data="";
const byte ROWS=4;
const byte COLS=3;
byte rowPins[ROWS]={11,4,5,7};
byte colPins[COLS]={10,12,6};
char keys[ROWS][COLS]={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
//int num=10000;
int b=0;
int tru=0;
int count=0;
int led_cnt=0;
Keypad keypad=Keypad( makeKeymap(keys),rowPins,colPins,ROWS,COLS );
void setup() {
Serial.begin(9600);
Wire.begin();
d.setTimeout(500);
if (!d.init())
{
Serial.println("Failed to detect and initialize sensor!");
while (1) {}
}
#if defined LONG_RANGE
// lower the return signal rate limit (default is 0.25 MCPS)
d.setSignalRateLimit(0.1);
// increase laser pulse periods (defaults are 14 and 10 PCLKs)
d.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
d.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif
#if defined HIGH_SPEED
// reduce timing budget to 20 ms (default is about 33 ms)
d.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
// increase timing budget to 200 ms
d.setMeasurementTimingBudget(200000);
#endif
pinMode (sensor, INPUT_PULLUP); //센서 핀을 입력핀으로 지정합니다.
myservo.attach(A1); // A1번핀에 서보모터 연결
Serial.begin(9600);
Serial1.begin(9600); // 9600 속도로 블루투스시리얼(소프트웨어시리얼)통신을 시작한다
digitalWrite(A3,1); // UVC ON
mlx.begin();
MP3Module.begin(9600);
if (!myDFPlayer.begin(MP3Module)) { // MP3 모듈을 초기화합니다. 초기화에 실패하면 오류를 발생시킵니다.
while (true);
}
delay(1);
myDFPlayer.volume(10); // 볼륨을 조절합니다. 0~30까지 설정이 가능합니다.
// wait until serial port opens for native USB devices
// power
}
void loop() {
//if(led_cnt){
// if(--led_cnt==0){
// }
// }
// else{
//if(++num>=100){ num=0; // 100ms 마다 실행
if(digitalRead(Sensing_pin)==HIGH){
Serial1.println("블루투스감지됨"); // 움직임이 감지됐어요!
Serial.println("감지되었습니다");
digitalWrite(A3,0); //UVC OFF
// led_cnt=8000;
}
//}
//}
if(Serial1.available()){
str_data=getStringdata();
Serial.println(str_data);
if(str_data==PW){ myservo.write(180); Serial.println("open "); Serial1.print('o'); delay(15); }
else { myservo.write( 0); Serial.println("close"); Serial1.print('x'); }
}
char key=keypad.getKey(); // 키패드 입력받는 부분
Serial.println(key);
if(key = '#')
{
while(1)
{
key = 0;
char key=keypad.getKey(); // 키패드 입력받는 부분
if(key)
{
Serial.println(key);
if(key==PW[count]){ tru++; } //입력번호와 비밀번호가 맞을시 tru++
count++;
key = 0;
}
if(tru = 4){
break;
}
}
}
if(count==4){ //count개수가 비밀번호 개수와 같을 시
if(tru==4)Su();//성공함수
else Fa();//실패함수
tru=0; count=0;
}
delay(1);
//Serial.print(d.readRangeSingleMillimeters());
//if (d.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Distance = d.readRangeSingleMillimeters();
if(Distance < 30 ){
Serial.println(Distance);
temperature = mlx.readObjectTempC();
//temperature = temperature - 8;
Serial.print(temperature);
Serial.println("C");
delay(1000);
if ( temperature >= 36.5 ) {//temperature
myDFPlayer.play(1); //Play 1 mp3
delay(100);
}
}
state = digitalRead(sensor); //센서핀을 디지털 입력신호로 받습니다.
/*
if (state == HIGH){ //만약 State 신호가 HIGH일시
delay(1000);
myDFPlayer.play(3);
delay(1000);
myDFPlayer.pause();
}
else if (state == LOW){
value = 0;
myservo.write(0);
digitalWrite(A3,1); // UVC ON
delay(500);
myDFPlayer.pause();
}
*/
delay(100);
}
String getStringdata(){
String str="";
while(Serial1.available()){
str +=(char)Serial1.read();
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
조회수 239등록된 댓글이 없습니다.