Управление нагрузкой по SMS+замер температуры.

gatsby163
Offline
Зарегистрирован: 10.03.2014

Здравствуйте, помогите пожалуйста привести код в порядок. Планирую создать устройтство управления для теплых полов. Что бы включать и выключать нагрузку через sms, сбор показаний с 2х датчиков температуры и вывод их на дисплей по i2c. В программе 2 функции loop и temp, в loop основной цикл - ожидание смс и их обработка, вроде все должно работать - но не работает)) температуру показывает в серийном мониторе, дисплея пока нет под рукой проверить, но это не суть. Смс не обрабатываются никак(( на модуль они точно доходят но то ли не распознаются...не понятно.

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
#define ONE_WIRE_BUS 4             // Датчики ds18b20 подключены на 4 пин
#define TEMPERATURE_PRECISION 9

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = {0x28, 0xFF, 0x46, 0xB2, 0x50, 0x16, 0x04, 0xF7};
DeviceAddress sensor2 = {0x28, 0xFF, 0xA1, 0x92, 0x47, 0x16, 0x03, 0xBF};
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
int relayPin = 2;

void setup(){
  Serial.begin(9600);
  sensors.begin();
  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея
  lcd.print("iarduino.ru");
  lcd.setCursor(8, 1);
  lcd.print("LCD 1602");
    gprsSerial.begin(19200);
    pinMode(relayPin, OUTPUT);
   
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    delay(300);
    gprsSerial.print("AT+IFC=1, 1\r");
    delay(300);
    gprsSerial.print("AT+CPBS=\"SM\"\r");
    delay(300);
    gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
}

 

 
 void loop()
{
  
 
String currStr = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
    if (!gprsSerial.available())
        return;
 
    char currSymb = gprsSerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Heater on")) {
                digitalWrite(relayPin, HIGH);
            } else if (!currStr.compareTo("Heater off")) {
                digitalWrite(relayPin, LOW);
            } //else if (!currStr.compareTo("Yellow on")) {
                //digitalWrite(yellowPin, HIGH);
            //} else if (!currStr.compareTo("Yellow off")) {
              //  digitalWrite(yellowPin, LOW);
           // }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
    temp();
}

void temp(){
  
  float tempC;
      
  sensors.requestTemperatures();
  lcd.setCursor(0, 0);
  Serial.print("Temp1: ");
  Serial.print(sensors.getTempC(sensor1));
  Serial.println("C");
  lcd.setCursor(0, 1);
  Serial.print("Sensor 2: ");
  Serial.print(sensors.getTempC(sensor2));
  Serial.println("C");
  sensors.requestTemperatures();
 delay(2000);
 }

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Переменные, объявленные в начале loop нужно сделать глобальными.