#include <IRremote.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#include "pitches.h"
const float BETA = 3950;
//#define SPEAKER_PIN A3 //蜂鸣器
#define PIN_RECEIVER 2 // Signal Pin of IR receiver
#define PIN_SERVO 3
Servo servo1;
IRrecv receiver(PIN_RECEIVER);
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int Pins[] = { 6,5 };//条形灯的引脚
int keyP=4;//开关的引脚
void setup()
{
//pinMode(SPEAKER_PIN, OUTPUT);
pinMode(keyP,INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print("HELLO 2022!");//显示屏初始页面
receiver.enableIRIn(); // Start the receiver
Serial.begin(9600);
servo1.attach(PIN_SERVO);
for (int thisLed = 0; thisLed < 2; thisLed++)
{
pinMode(Pins[thisLed], OUTPUT);//设置条形灯引脚输出
}
}
int thisLed=0;
int rotation=90;
void loop()
{
int analogValue = analogRead(A0);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
if(celsius > 45)//温度超过45火警电话
{
//tone(A3, 262, 250);
Serial.println(119);//输出119的信号模拟链接网络报警
}
servo1.write(rotation);//模拟关门
if(!digitalRead(keyP)){
if (receiver.decode()) {
if (receiver.decodedIRData.command == 162) // 162 "开始"键
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Welcome Home");
lcd.setCursor(0, 1);
lcd.print("code:");
int num = -1;
int rotation = 0;
Serial.println("start INPUT number");
receiver.resume();
delay(10);
while (1) //
{
if(receiver.decodedIRData.command == 168) break; //168 "play"键 表示确定
if( receiver.decode() )
{
num = inputNum(); //读入数字,0-9 非数字为-1
if (num != -1)
{
rotation = rotation * 10 + num;
Serial.println(rotation);
}
receiver.resume();
delay(10);
}
}
Serial.println("move point!");
if(rotation==124)//由正确的密码计算出要求的角度,门才会开
{
servo1.write(rotation);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SUCCES OPEN");
}
else{
digitalWrite(Pins[thisLed], HIGH);//每错误一次,条形灯亮一层
thisLed=thisLed+1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("code error");
}
}
receiver.resume(); // Receive the next value
}
}
delay(3000);//三秒后模拟关门
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("HELLO 2022!");
}
int inputNum()
{
int num;
switch (receiver.decodedIRData.command)//隐藏密码
{
case 104:
num = 0;
lcd.print('*');//隐藏密码代码
break;
case 48:
num = 1;
lcd.print('*');
break;
case 24:
num = 2;
lcd.print('*');
break;
case 122:
num = 3;
lcd.print('*');
break;
case 16:
num = 4;
lcd.print('*');
break;
case 56:
num = 5;
lcd.print('*');
break;
case 90:
num = 6;
lcd.print('*');
break;
case 66:
num = 7;
lcd.print('*');
break;
case 74:
num = 8;
lcd.print('*');
break;
case 82:
num = 9;
lcd.print('*');
break;
default:
num = -1;
}
return num;
}