Контроль температуры, использую GSM модуль

Нет ответов
serg87
Offline
Зарегистрирован: 24.09.2015

Здравствуйте! При работе с arduino возникла проблема.

Суть такая. Есть рабочий код:

#include <SoftwareSerial.h>
#include "DHT.h"
#include <UTFT.h>
UTFT    myGLCD(CTE32HR,38,39,40,41);
extern uint8_t BigFont[];
#define DHTPIN1 6     // наначения пина к которой подключендатчик 1
#define DHTPIN2 7  
#define DHTTYPE DHT11 
// переменные для датчика температуры 
  float h1;
  float t1;
  float h2;
  float t2;
 
// переменные для охранных датчиков
int opening = 14;
int openingty = 15;
int moves = 10;
int movety = 11;
int val = 0;
int fire = 16;
 
// константы для записываемых номеров для отпр тем
int telef1;
int telef2;
int telef3;
 
// переменные для gsm блока
String passwordStr="";// строка с информацией из sms для смены пароля и т.д.
String pin=""; //строка для записи пароля из SMS
String pinStr=""; //пароль
String kodStr=""; // код команда
String newpin=""; // строка для записи нового пароля из SMS
String newpinStr="*12*"; // код изменение пароля
String tel1="";// запись первой части номера из SMS
String tel2="";// запись второй части номера из SMS
String newtel1Str="*51*"; // код для записи номера телефона 1
String newtel11="";// запись первой части первого номера
String newtel12="";// запись второй части первого номера
String newtel2Str="*52*"; // код для записи номера телефона 2
String newtel21="";// запись первой части второго номера
String newtel22="";// запись второй части второго номера
String newtel3Str="*53*"; // код для записи номера телефона 3
String newtel31="";// запись первой части третьего номера
String newtel32="";// запись второй части третьего номера
String tem1="tem1";// код для запроса температуры
String wet1="wet1";// код для запроса влажности
 
DHT dht_1 (DHTPIN1, DHTTYPE);
DHT dht_2 (DHTPIN2, DHTTYPE);
SoftwareSerial mySerial(50, 51); // RX, TX
 
 void Buttons() //Ключевое слово используется при объявлении функций
{
 
// Рисуем кнопку temp №1
  myGLCD.setColor(95, 158, 160);// цвет прямоугольника
  myGLCD.fillRoundRect (20, 12, 143, 45);// закрашенный прямоугольник
  myGLCD.setColor(255, 255, 255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (20, 12, 143, 45);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (95, 158, 160);
  myGLCD.print("temp 1", 31, 22);//текст с координатами
 
// Рисуем кнопку temp №2
  myGLCD.setColor(95, 158, 160);// цвет прямоугольника
  myGLCD.fillRoundRect (20, 58, 143, 90);// закрашенный прямоугольник
  myGLCD.setColor(255, 255, 255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (20, 58, 143, 90);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (95, 158, 160);
  myGLCD.print("temp 2", 31, 68);//текст с координатами
 
// Рисуем кнопку wet №1
  myGLCD.setColor(0,0,255);// цвет прямоугольника
  myGLCD.fillRoundRect (20, 115, 143, 147);// закрашенный прямоугольник
  myGLCD.setColor(0,0,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (20, 115, 143, 147);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (0,0,255);
  myGLCD.print("wet 1", 31, 125);//текст с координатами
 
// Рисуем кнопку wet №2
  myGLCD.setColor(0,0,255);// цвет прямоугольника
  myGLCD.fillRoundRect (20, 160, 143, 192);// закрашенный прямоугольник
  myGLCD.setColor(0,0,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (20, 160, 143, 192);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (0,0,255);
  myGLCD.print("wet 2", 31, 170);//текст с координатами
 
// Рисуем кнопку показания датчика температуры №1
  myGLCD.setColor(0,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (163, 12, 272, 45);// закрашенный прямоугольник
  myGLCD.setColor(255,255,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (163, 12, 272, 45);// рамка прямоугольника
  
 
// Рисуем кнопку показания датчика температуры №2
  myGLCD.setColor(0,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (163, 58, 272, 90);// закрашенный прямоугольник
  myGLCD.setColor(255, 255, 255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (163, 58, 272, 90);// рамка прямоугольника
 
// Рисуем кнопку показания датчика влажности №1
  myGLCD.setColor(0,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (163, 115, 272, 147);// закрашенный прямоугольник
  myGLCD.setColor(255, 255, 255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (163, 115, 272, 147);// рамка прямоугольника
  
// Рисуем кнопку показания датчика влажности №2
  myGLCD.setColor(0,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (163, 160, 272, 192);// закрашенный прямоугольник
  myGLCD.setColor(255, 255, 255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (163, 160, 272, 192);// рамка прямоугольника
  
 
// Рисуем кнопку reley
  myGLCD.setColor(107,142,35);// цвет прямоугольника
  myGLCD.fillRoundRect (300, 12, 462, 45);// закрашенный прямоугольник
  myGLCD.setColor(255,255,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (300, 12, 462, 45);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (107,142,35);
  myGLCD.print("Reley", 351, 22);//текст с координатами
 
// Рисуем кнопку реле №1
  myGLCD.setColor(107,142,35);// цвет прямоугольника
  myGLCD.fillRoundRect (300, 58, 367, 80);// закрашенный прямоугольник
  myGLCD.setColor(255,255,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (300, 58, 367, 80);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (107,142,35);
  myGLCD.print("1", 320, 62);//текст с координатами
 
// Рисуем кнопку реле №2
  myGLCD.setColor(107,142,35);// цвет прямоугольника
  myGLCD.fillRoundRect (396, 58, 462, 80);// закрашенный прямоугольник
  myGLCD.setColor(255,255,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (396, 58, 462, 80);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (107,142,35);
  myGLCD.print("2", 416, 62);//текст с координатами
 
// Рисуем кнопку состояния реле №1
  myGLCD.setColor(0,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (300, 90, 367, 115);// закрашенный прямоугольник
  myGLCD.setColor(255, 255, 255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (300, 90, 367, 115);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (0,0,0);
       
  // Рисуем кнопку состояния реле №2
  myGLCD.setColor(0,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (396, 90, 462, 115);// закрашенный прямоугольник
  myGLCD.setColor(255, 255, 255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (396, 90, 462, 115);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (0,0,0);
 
       
 
// Рисуем кнопку Security
  myGLCD.setColor(255,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (300, 130, 462, 165);// закрашенный прямоугольник
  myGLCD.setColor(255,255,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (300, 130, 462, 165);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (255, 0 ,0);
  myGLCD.print("Security", 315, 140);//текст с координатами
 
// Рисуем кнопку состояния Security
  myGLCD.setColor(0,0,0);// цвет прямоугольника
  myGLCD.fillRoundRect (300, 170, 462, 195);// закрашенный прямоугольник
  myGLCD.setColor(255,255,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (300, 170, 462, 195);// рамка прямоугольника
  
 
   // Рисуем кнопку Sensors
  myGLCD.setColor(255,255,0);// цвет прямоугольника
  myGLCD.fillRoundRect (61, 201, 422, 227);// закрашенный прямоугольник
  myGLCD.setColor(255,255,255);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (61, 201, 422, 227);// рамка прямоугольника
  myGLCD.setColor(255, 0, 0);// цвет текста
  myGLCD.setBackColor (255,255,0);
  myGLCD.print("SENSORS", 192, 207 );//текст с координатами
 
 // Рисуем кнопку open 1
  myGLCD.setColor(184,184,184);// цвет прямоугольника
  myGLCD.fillRoundRect (10, 233, 88, 265);// закрашенный прямоугольник
  myGLCD.setColor(184,184,184);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (10, 233, 88, 265);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (184,184,184);
  myGLCD.print("open1", 10, 240);//текст с координатами
 
// Рисуем кнопку open 2
  myGLCD.setColor(184,184,184);// цвет прямоугольника
  myGLCD.fillRoundRect (102, 233, 183, 265);// закрашенный прямоугольник
  myGLCD.setColor(184,184,184);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (102, 233, 183, 265);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (184,184,184);
  myGLCD.print("open2", 102, 240);//текст с координатами
 
 
// Рисуем кнопку move 1
  myGLCD.setColor(184,184,184);// цвет прямоугольника
  myGLCD.fillRoundRect (197, 233, 279, 265);// закрашенный прямоугольник
  myGLCD.setColor(184,184,184);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (197, 233, 279, 265);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (184,184,184);
  myGLCD.print("move1", 197, 240);//текст с координатами
 
 
// Рисуем кнопку move 2
  myGLCD.setColor(184,184,184);// цвет прямоугольника
  myGLCD.fillRoundRect (292, 233, 374, 265);// закрашенный прямоугольник
  myGLCD.setColor(184,184,184);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (292, 233, 374, 265);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (184,184,184);
  myGLCD.print("move2", 292, 240);//текст с координатами
 
// Рисуем кнопку fire
  myGLCD.setColor(184,184,184);// цвет прямоугольника
  myGLCD.fillRoundRect (387, 233, 462, 265);// закрашенный прямоугольник
  myGLCD.setColor(184,184,184);// цвет рамки прямоугольника
  myGLCD.drawRoundRect (387, 233, 462, 265);// рамка прямоугольника
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (184,184,184);
  myGLCD.print("fire", 387, 240);//текст с координатами
 
 // Рисуем кнопку состояния open 1
 
          digitalRead(opening);       
          if (opening==HIGH){
          myGLCD.setColor(255,0,0);// цвет прямоугольника
          myGLCD.fillRoundRect (10, 278, 88, 305);// закрашенный прямоугольник
          myGLCD.setColor(255, 0, 0);// цвет рамки прямоугольника
          myGLCD.drawRoundRect (10, 278, 88, 305);// рамка прямоугольника
          myGLCD.setColor(255, 255, 255);// цвет текста
          myGLCD.setBackColor (255,0,0);
          myGLCD.print("alarm", 10, 280);//текст с координатами 
       }  
            // Рисуем кнопку состояния open 2
 
          digitalRead(openingty);       
          if (openingty==HIGH){
          myGLCD.setColor(255,0,0);// цвет прямоугольника
          myGLCD.fillRoundRect (102, 278, 183, 305);// закрашенный прямоугольник
          myGLCD.setColor(255, 0, 0);// цвет рамки прямоугольника
          myGLCD.drawRoundRect (102, 278, 183, 305);// рамка прямоугольника
          myGLCD.setColor(255, 255, 255);// цвет текста
          myGLCD.setBackColor (255,0,0);
          myGLCD.print("alarm", 102, 280);//текст с координатами
          }
 // Рисуем кнопку состояния move 1
 
          digitalRead(moves);       
          if (moves==HIGH){
          myGLCD.setColor(255,0,0);// цвет прямоугольника
          myGLCD.fillRoundRect (197, 278, 279, 305);// закрашенный прямоугольник
          myGLCD.setColor(255, 0, 0);// цвет рамки прямоугольника
          myGLCD.drawRoundRect (197, 278, 279, 305);// рамка прямоугольника
          myGLCD.setColor(255, 255, 255);// цвет текста
          myGLCD.setBackColor (255,0,0);
          myGLCD.print("alarm", 197, 280);//текст с координатами
          }
 
// Рисуем кнопку состояния move 2
 
          digitalRead(movety);       
          if (movety==HIGH){
          myGLCD.setColor(255,0,0);// цвет прямоугольника
          myGLCD.fillRoundRect (292, 278, 374, 305);// закрашенный прямоугольник
          myGLCD.setColor(255, 0, 0);// цвет рамки прямоугольника
          myGLCD.drawRoundRect (292, 278, 374, 305);// рамка прямоугольника
          myGLCD.setColor(255, 255, 255);// цвет текста
          myGLCD.setBackColor (255,0,0);
          myGLCD.print("alarm", 292, 280);//текст с координатами
          }
// Рисуем кнопку состояния fire
  
          digitalRead(fire);       
          if (fire==LOW){
          myGLCD.setColor(255,0,0);// цвет прямоугольника
          myGLCD.fillRoundRect (387, 278, 462, 305);// закрашенный прямоугольник
          myGLCD.setColor(255, 0, 0);// цвет рамки прямоугольника
          myGLCD.drawRoundRect (387, 278, 462, 305);// рамка прямоугольника
          myGLCD.setColor(255, 255, 255);// цвет текста
          myGLCD.setBackColor (255,0,0);
          myGLCD.print("alarm", 387, 280);//текст с координатами
          }
}
 
void setup() 
 
{
 
 myGLCD.InitLCD();
  myGLCD.clrScr();
 
  myGLCD.setFont(BigFont);
  Buttons();  
  delay(500);
 
  Serial.begin(19200);
  pinStr="0000";
  Serial.println(pinStr);
 
  Serial.println("Goodnight moon!");
 
  // set the data rate for the SoftwareSerial port
 
  mySerial.begin(19200);
 
  mySerial.println("Hello, world?");
 
  mySerial.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
        delay(300);
        mySerial.print("AT+IFC=1, 1\r"); // устанавливает программный контроль потоком передачи данных 
        delay(300);
        mySerial.print("AT+CPBS=\"SM\"\r"); // открывает доступ к данным телефонной книги SIM-карты. У вас может отличатся!
        delay(300);
        mySerial.print("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс в консоль. У вас может отличатся!
        delay(500);
       mySerial.print("ATS0=2\r"); // поднимать трубку после второго звонка
  
  delay(100);
 
}
 
String currStr = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
 
void loop() // run over and over
 
    gsm();
 
}
 
 
void gsm()
{
   if (!mySerial.available())
        return;
 
    char currSymb = mySerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
           
            passwordStr = currStr.substring(0, 12);// считываание инф из sms      
            pin = passwordStr.substring(0, 4);// считывание пин кода из sms
            newpin = passwordStr.substring(8, 12);// считывание нового пин кода из sms
            tel1=currStr.substring(8, 14);// считываание инф из sms о первой части номера телефона
            tel2=currStr.substring(13, 19);// считываание инф из sms о второй части номера телефона
            Serial.println( tel1);  
            Serial.println( tel2);  
            Serial.println( passwordStr);  
            Serial.println( pin);  
            Serial.println( newpin);  
               //проверка  пароля и считывании информации о команде
               if (! pin.compareTo(pinStr))
               { kodStr=currStr.substring(4,8);// считывании информации о команде
               if (! kodStr.compareTo(newpinStr))
                      {
                      pinStr=newpin;
                      Serial.println(pinStr);
                      }
                   
                   if (! kodStr.compareTo(newtel1Str))
                      {
                      newtel11=tel1;
                      newtel12= tel2;
                      Serial.println(newtel11);
                      Serial.println(newtel12);
                      telef1=77;
                      }
                     
                  if (! kodStr.compareTo(newtel2Str))
                      {
                      newtel21=tel1;
                      newtel22= tel2;
                      Serial.println(newtel21);
                      Serial.println(newtel22);
                      telef1=88;
                      }
 
                 if (! kodStr.compareTo(newtel3Str))
                      {
                      newtel31=tel1;
                      newtel32= tel2;
                      Serial.println(newtel31);
                      Serial.println(newtel32);
                      telef1=99;
                      }
                   
                  if (! kodStr.compareTo(newpinStr))
                      {
                      pinStr=newpin;
                      Serial.println(pinStr);
                      }
                   
                  if (! kodStr.compareTo(tem1))
                      {
                        Serial.println("pinStr2344");
                      t2 = dht_2.readTemperature(); 
                      if (telef1 == 77)
                      {
                        Serial.println("pinStr2");
                      mySerial.print("AT+CMGS=\"");
                      mySerial.print(newtel11);
                      mySerial.print("newtel12);
                      mySerial.println("\"\r");
                      delay(100);
                      mySerial.println(t2);
                      delay(100);
                      mySerial.println((char)26);
                      delay(100);
                      mySerial.println("AT+CMGD=1,4\r"); 
                      mySerial.flush();
                      }
                      if (telef2 == 88)
                      {
                       
                       mySerial.print("AT+CMGS=\"");
                      mySerial.print(newtel21);
                      mySerial.print("newtel22);
                      mySerial.println("\"\r");
                      delay(100);
                      mySerial.println(t2);
                      delay(100);
                      mySerial.println((char)26);
                      delay(100);
                      mySerial.println("AT+CMGD=1,4\r"); 
                      mySerial.flush(); 
                      }
                  if (telef3 == 99)
                      {
                        mySerial.print("AT+CMGS=\"");
                      mySerial.print(newtel31);
                      mySerial.print("newtel32);
                      mySerial.println("\"\r");
                      delay(100);
                      mySerial.println(t2);
                      delay(100);
                      mySerial.println((char)26);
                      delay(100);
                      mySerial.println("AT+CMGD=1,4\r"); 
                      mySerial.flush(); 
                      }
                      }
 
                   if (! kodStr.compareTo(wet1))
                      {
                    
                      h2 = dht_2.readHumidity();
                       if (telef1 == 77)
                      {
                    mySerial.print("AT+CMGS=\"");
                      mySerial.print(newtel11);
                      mySerial.print("newtel12);
                      mySerial.println("\"\r");
                      delay(100);
                      mySerial.println(h2);
                      delay(100);
                      mySerial.println((char)26);
                      delay(100);
                      mySerial.println("AT+CMGD=1,4\r"); 
                      mySerial.flush();
                      }
                      if (telef2 == 88)
                      {
                       
                     mySerial.print("AT+CMGS=\"");
                      mySerial.print(newtel21);
                      mySerial.print("newtel22);
                      mySerial.println("\"\r");
                      delay(100);
                      mySerial.println(h2);
                      delay(100);
                      mySerial.println((char)26);
                      delay(100);
                      mySerial.println("AT+CMGD=1,4\r"); 
                      mySerial.flush(); 
                      }
                  if (telef3 == 99)
                      {
                        mySerial.print("AT+CMGS=\"");
                      mySerial.print(newtel31);
                      mySerial.print("newtel32);
                      mySerial.println("\"\r");
                      delay(100);
                      mySerial.println(h2);
                      delay(100);
                      mySerial.println((char)26);
                      delay(100);
                      mySerial.println("AT+CMGD=1,4\r"); 
                      mySerial.flush(); 
                      }
                  
                      }         
               }   
                   
                   
                 
                              
 
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        } 
        
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
  }
 
  // работа датчика температуры и влажности
 
 
  void dh1()
  {
    h1 = dht_1.readHumidity();
    t1 = dht_1.readTemperature();
 
  
 
 
  myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (0,0,0);
  myGLCD.print(String(t1), 174, 22);//текст с координатами
 
   myGLCD.setColor(255, 255, 255);// цвет текста
  myGLCD.setBackColor (0,0,0);
  myGLCD.print(String(h1), 174, 125);//текст с координатами
    
    }
      
 
  
 
 
 
Все работает вот только до того момента когда я добовляю в loop функцию dh1():
void loop()
 
    gsm();
 
    dh1();
}
После этого gsm модуль перестоет отвечать.
ЕСЛИ ЕСТЬ КАКИЕ МЫСЛИ ПОДСКАЖИТЕ, ЗАРАНЕЕ СПАСИБО!