GSM сигнализация с элементами умного дома

Нет ответов
chulkov-93
Offline
Зарегистрирован: 01.05.2015

Здравствуйте!!! Делаем сигнализацию с элементами умного дома на диплом. Возникла такая проблема: при отправке смс на ардуино с командой постановки на охрану все работает исправно, но при отправке следующей смс , она не считывается, а сигнализация почему-то срабатывает . Пожалуйста подскажите, в чем проблема))

 

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