一、目标实现:
需求:
a)光照与时间(系统的时间来代替-millis())控制探照灯 ①模拟早上七点 天亮 关灯
②模拟晚上七点 天黑 开灯
③模拟早上七点 天黑 依然保持开灯
Φ模拟晚上七点 天亮 依然保持关灯
PS:早上七点不一定天亮
晚上七点不一定天黑
b)地震报警
①倾斜度大于10度 蜂鸣器报警响起
②倾斜度为0度,蜂鸣器报警停止③设置报警开关,优先级最高可打开/关闭报警器
c)火灾报警
①当火焰探测器检验到火焰,消防灯亮起
二、前期准备:
软件准备:Arduino 18.8
硬件准备:Arduino开发板,面包板,杜邦线,220Ω电阻,1kΩ电阻,LED灯,火焰传感器,光敏电阻,倾斜传感器,蜂鸣器,按钮。
三、接线:
如下图:
四、编写程序:
判断是否地震了
void loop()
{
Light();
if (analogRead(A2) < 900) //确认是否地址了
{
earthquake = true;
Earthquake();
}
else
{
noearthquake = true;
noEarthquake();
}
}
如果地震发生的情况下
static void Earthquake() //地震发生的情况
{
if (noearthquake == true)
{
tone(buzzer, 1000);
}
if (digitalRead(button) == HIGH) //按下按钮后
{
noearthquake = false;
if (BuzzerReady == true)
{
tone(buzzer, 1000);
BuzzerReady = false;
}
else
{
noTone(buzzer);
BuzzerReady = true;
}
delay(200);
}
}
如果地震没有发生的情况下
static void noEarthquake() //地震没有发生的情况
{
if (earthquake == true)
{
noTone(buzzer);
}
if (digitalRead(button) == HIGH) //按下按钮后
{
earthquake = false;
if (BuzzerReady == true)
{
tone(buzzer, 1000);
BuzzerReady = false;
}
else
{
noTone(buzzer);
BuzzerReady = true;
}
delay(200);
}
}
探照灯
static void Light() //探照灯
{
if (analogRead(A0) < 200)
{
digitalWrite(LED, HIGH);
}
else
{
digitalWrite(LED, LOW);
}
}
火灾报警器
static void Fire()
{
if(1023 - analogRead(A5) >51)
{
digitalWrite(LED_FIRE,HIGH);
}
else
{
digitalWrite(LED_FIRE,LOW);
}
}
总代码
const int LED = 6;
const int buzzer = 5;
const int button = 7;
const int LED_FIRE = 8;
bool BuzzerReady = false;
bool earthquake = false;
bool Buzzer = false;
bool noearthquake = false;
void setup() {
pinMode(LED, OUTPUT);
pinMode(LED_FIRE,OUTPUT);
pinMode(button, INPUT);
Serial.begin(9600);
}
void loop()
{
Light();
if (analogRead(A2) < 900) //确认是否地址了
{
earthquake = true;
Earthquake();
}
else
{
noearthquake = true;
noEarthquake();
}
}
static void Earthquake() //地震发生的情况
{
if (noearthquake == true)
{
tone(buzzer, 1000);
}
if (digitalRead(button) == HIGH) //按下按钮后
{
noearthquake = false;
if (BuzzerReady == true)
{
tone(buzzer, 1000);
BuzzerReady = false;
}
else
{
noTone(buzzer);
BuzzerReady = true;
}
delay(200);
}
}
static void noEarthquake() //地震没有发生的情况
{
if (earthquake == true)
{
noTone(buzzer);
}
if (digitalRead(button) == HIGH) //按下按钮后
{
earthquake = false;
if (BuzzerReady == true)
{
tone(buzzer, 1000);
BuzzerReady = false;
}
else
{
noTone(buzzer);
BuzzerReady = true;
}
delay(200);
}
}
static void Light() //探照灯
{
if (analogRead(A0) < 200)
{
digitalWrite(LED, HIGH);
}
else
{
digitalWrite(LED, LOW);
}
}
static void Fire()
{
if(1023 - analogRead(A5) >51)
{
digitalWrite(LED_FIRE,HIGH);
}
else
{
digitalWrite(LED_FIRE,LOW);
}
}