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