Контроль температуры, использую GSM модуль
- Войдите на сайт для отправки комментариев
Втр, 29/03/2016 - 22:51
Здравствуйте! При работе с 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 модуль перестоет отвечать.
ЕСЛИ ЕСТЬ КАКИЕ МЫСЛИ ПОДСКАЖИТЕ, ЗАРАНЕЕ СПАСИБО!