Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 如何解决入侵者报警中重复发送短信的问题_Arduino - Fatal编程技术网

Arduino 如何解决入侵者报警中重复发送短信的问题

Arduino 如何解决入侵者报警中重复发送短信的问题,arduino,Arduino,此代码用于在特定时间间隔检测入侵者,然后打开2个led和蜂鸣器,然后向预先编程的号码发送文本消息。但我面临的挑战是,当系统启动时,pir传感器会持续发送逻辑1,这反过来会使gsm模块即使在没有入侵者进入范围时也会持续发送文本消息,并且在预定时间过后,传感器会立即再次发送逻辑1,然后才最终关闭。其次,我收到的短信显示内容不支持。拜托,我真的需要帮助,我很困惑,我不知道该怎么办了 #include <SoftwareSerial.h> #include <DS3231.h>

此代码用于在特定时间间隔检测入侵者,然后打开2个led和蜂鸣器,然后向预先编程的号码发送文本消息。但我面临的挑战是,当系统启动时,pir传感器会持续发送逻辑1,这反过来会使gsm模块即使在没有入侵者进入范围时也会持续发送文本消息,并且在预定时间过后,传感器会立即再次发送逻辑1,然后才最终关闭。其次,我收到的短信显示内容不支持。拜托,我真的需要帮助,我很困惑,我不知道该怎么办了

#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 .....
  ..........................
}