Arduino 如何解决入侵者报警中重复发送短信的问题
此代码用于在特定时间间隔检测入侵者,然后打开2个led和蜂鸣器,然后向预先编程的号码发送文本消息。但我面临的挑战是,当系统启动时,pir传感器会持续发送逻辑1,这反过来会使gsm模块即使在没有入侵者进入范围时也会持续发送文本消息,并且在预定时间过后,传感器会立即再次发送逻辑1,然后才最终关闭。其次,我收到的短信显示内容不支持。拜托,我真的需要帮助,我很困惑,我不知道该怎么办了Arduino 如何解决入侵者报警中重复发送短信的问题,arduino,Arduino,此代码用于在特定时间间隔检测入侵者,然后打开2个led和蜂鸣器,然后向预先编程的号码发送文本消息。但我面临的挑战是,当系统启动时,pir传感器会持续发送逻辑1,这反过来会使gsm模块即使在没有入侵者进入范围时也会持续发送文本消息,并且在预定时间过后,传感器会立即再次发送逻辑1,然后才最终关闭。其次,我收到的短信显示内容不支持。拜托,我真的需要帮助,我很困惑,我不知道该怎么办了 #include <SoftwareSerial.h> #include <DS3231.h>
#include <SoftwareSerial.h>
#include <DS3231.h>
SoftwareSerial SIM800(3, 2);
Time t;
DS3231 rtc(SDA, SCL);
String textForSMS;
int calibrationTime = 45;
int PirSensor = 12;
int LedSensorPin = 13;
int Buzzer = 11;
int LedPowerPin = 9;
int Power = 6; // 5V of sensor connected to pin6
int val =0;
const int OnHour = 23;
const int OnMin = 19;
const int OnSec = 0;
const int OffHour = 23;
const int OffMin = 25;
const int OffSec = 0;
void setup() {
randomSeed(analogRead(0));
Serial.begin(9600);
SIM800.begin(19200);
rtc.begin();
Serial.println("Logging Time Completed ");
pinMode(PirSensor, INPUT);
pinMode(Buzzer, OUTPUT);
pinMode(LedSensorPin, OUTPUT);
pinMode(LedPowerPin, OUTPUT);
pinMode(Power, INPUT);
digitalWrite(LedSensorPin, LOW);
delay(5000); //Wait for 5sec
}
void loop() {
t = rtc.getTime();
Serial.print(t.hour);
Serial.print("hr, ");
Serial.print(t.min);
Serial.print("min. ");
Serial.print(t.sec);
Serial.print("sec");
Serial.println(" ");
delay(1000);
if(t.hour == OnHour && t.min == OnMin && t.sec == OnSec){
analogWrite(Power, 255); // Turn ON the Sensor
digitalWrite(LedPowerPin, HIGH);
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i=i+1){
Serial.print(".");
delay(1000);
}
Serial.println(" done");
delay(50);
Serial.println("Sensor Activated");
}
else if(t.hour == OffHour && t.min == OffMin && t.sec == OffSec) {
analogWrite(Power, 0); // Turn OFF Sensor
digitalWrite(LedSensorPin, LOW); // Turn OFF LED
digitalWrite(LedPowerPin, LOW);
digitalWrite(Buzzer, LOW);
Serial.println("Sensor Deactivated");
}
val = digitalRead(PirSensor);
if ( val == HIGH){
textForSMS = "\Intruder Detected!";
digitalWrite(LedSensorPin, HIGH);
//digitalWrite(Buzzer, HIGH);
//delay(10000);
//digitalWrite(Buzzer, LOW);
sendSMS(textForSMS);
Serial.println(textForSMS);
Serial.println("message sent.");
delay(8000);
}
else{
//digitalWrite(LedSensorPin, LOW);
//Serial.println("No Intruder Detected");
digitalWrite(LedSensorPin, LOW);
//delay(1000); //delay for 1 sec;
}
}
void sendSMS(String message)
{
SIM800.print("AT+CMGF=1\r");
delay(1000);
SIM800.println("AT+CMGS=\"+2349037557071\"");
delay(1000);
SIM800.println(message);
delay(1000);
SIM800.println((char)26);
delay(1000);
SIM800.println();
delay(100);
}
#包括
#包括
软件串行SIM800(3,2);
时间t;
DS3231 rtc(SDA、SCL);
字符串textforms;
int校准时间=45;
int传感器=12;
int-LedSensorPin=13;
int蜂鸣器=11;
int-LedPowerPin=9;
整数幂=6;//连接到针脚6的传感器的5伏电压
int-val=0;
const int on hour=23;
const int OnMin=19;
const int OnSec=0;
const int OffHour=23;
const int OffMin=25;
常数int OffSec=0;
无效设置(){
随机种子(模拟读取(0));
Serial.begin(9600);
SIM800.贝京(19200);
rtc.begin();
Serial.println(“记录完成时间”);
pinMode(传感器,输入);
pinMode(蜂鸣器,输出);
引脚模式(LED传感器引脚,输出);
引脚模式(LED电源引脚,输出);
pinMode(电源、输入);
数字写入(LED传感器引脚,低电平);
延迟(5000);//等待5秒
}
void循环(){
t=rtc.getTime();
连续打印(t小时);
连续打印(“hr”);
连续打印(t.min);
连续打印(“最小值”);
连续打印(秒);
连续打印(“sec”);
Serial.println(“”);
延迟(1000);
如果(t.hour==OnHour&&t.min==OnMin&&t.sec==OnSec){
模拟写入(电源,255);//打开传感器
数字写入(LED电源引脚,高电平);
串行打印(“校准传感器”);
对于(int i=0;i
尝试获取1个变量以获得帮助。我给它起个名字叫“帮助”,只是为了展示一下。这将使文本消息仅在状态从低变高后第一次发送
If (Val == high) {
help ++;
}else if (Val == low){
Help = 0;
}
If (help == 1) {
textForSMS .....
..........................
}