GSM сигнализация с элементами умного дома
- Войдите на сайт для отправки комментариев
Пт, 01/05/2015 - 12:16
Здравствуйте!!! Делаем сигнализацию с элементами умного дома на диплом. Возникла такая проблема: при отправке смс на ардуино с командой постановки на охрану все работает исправно, но при отправке следующей смс , она не считывается, а сигнализация почему-то срабатывает . Пожалуйста подскажите, в чем проблема))
#include "SIM900.h"
#include "call.h"
#include <SoftwareSerial.h>
#include <dht.h>
#include "sms.h"
DHT sensor = DHT();
CallGSM call;
SMSGSM sms;
#define GSM_ON 9
SoftwareSerial phone(2, 3); // RX, TX
char number[]="+79141377585";
char num='+79141377585';
char message[500];
char pos;
char *p;
int f = 0;
boolean flag = true;
int c;
int val = 0;
int pirPin = 7; //вывод подключения PIR сенсора
int hallPin = 5;
int blueled = 11;
int greenled = 12;
int led = 10;
boolean tumb = false;
char x;
void setup()
{
Serial.begin(9600);
pinMode(GSM_ON, OUTPUT);
digitalWrite(GSM_ON, HIGH);
delay(3000);
gsm.begin(4800);
Serial.println("Setup end");
if (gsm.begin(4800))
Serial.println("\nstatus=READY");
else Serial.println("\nstatus=IDLE");
pinMode(greenled, OUTPUT);
pinMode(blueled, OUTPUT);
pinMode(led, OUTPUT);
sensor.attach(A3);
//pinMode(greenled, INPUT);
//pinMode(blueled, INPUT);
pinMode(pirPin, INPUT);
pinMode(hallPin, INPUT);
}
void loop()
{
Wait();
pos=sms.IsSMSPresent(SMS_UNREAD);
Serial.println((int)pos);
if((int)pos>0&&(int)pos<=10){
Serial.print("New message, POSITION=");
Serial.println((int)pos);
sms.GetSMS((int)pos,number,message,1000);
Serial.println("number: ");
Serial.println(number);
Serial.println("message: ");
Serial.println(message);
Serial.print("First Symbol=");
Serial.println(message[0]);
//number1=number[];
x=message[0];
Serial.print("Command=");
Serial.println(x);
delay(2000);
if ((number[0]=='+')&&(number[1]=='7')&&(number[2]=='9')&&(number[3]=='1')&&(number[4]=='4')&&(number[5]=='1')&&(number[6]=='3')&&(number[7]=='7')&&(number[8]=='7')&&(number[9]=='5')&&(number[10]=='8')&&(number[11]=='5')) //если номер "наш"
{
switch (x)
{
case '0':
tumb=true;
Serial.print("System on");
break;
case '1':
if (tumb==true)
{
tumb=false;
Serial.print("System off");
}
else
Serial.print("Incorrect command");
break;
case '2':
Temperature();
break;
default:
Serial.print("Incorrect command");
break;
}
char message [] = "";
for (int i=0; i<=(int)pos; i++)
sms.DeleteSMS(i);
}
}
if (tumb==true)
{
digitalWrite(hallPin, HIGH);
digitalWrite(pirPin, LOW);
digitalWrite(greenled, HIGH);
if ((digitalRead(pirPin)==HIGH) || (digitalRead(hallPin)==LOW))
{
Alarm();
}
}
else
{
tumb=false;
}
}
void LEDalarm()
{
for (int i=0; i <= 20; i++)
{
digitalWrite(blueled, HIGH);
delay(100);
digitalWrite(blueled, LOW);
delay(100);
}
}
void Wait()
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(100);
}
void Temperature()
{
// метод update заставляет сенсор выдать текущие измерения
sensor.update();
switch (sensor.getLastError())
{
case DHT_ERROR_OK:
char msg[128];
// данные последнего измерения можно считать соответствующими
// методами
sprintf(msg, "Temperature = %dC, Humidity = %d%%",
sensor.getTemperatureInt(), sensor.getHumidityInt());
sms.SendSMS(number,msg);
Serial.println(msg);
break;
case DHT_ERROR_START_FAILED_1:
Serial.println("Error: start failed (stage 1)");
break;
case DHT_ERROR_START_FAILED_2:
Serial.println("Error: start failed (stage 2)");
break;
case DHT_ERROR_READ_TIMEOUT:
Serial.println("Error: read timeout");
break;
case DHT_ERROR_CHECKSUM_FAILURE:
Serial.println("Error: checksum error");
break;
}
delay(2000);
}
void Alarm()
{
//if ((digitalRead(pirPin)==HIGH) || (digitalRead(hallPin)==LOW))
//{
digitalWrite(greenled, LOW);
LEDalarm();
call.Call("+79141377585");
//}
tumb=false;
}