Как сделать 2 режима Авто и Ручное управлеие через GSM, помогите пожалуйста!

stema85
Offline
Зарегистрирован: 19.09.2019

Moderator : пожалуйста, вставьте код правильно (новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

stema85
Offline
Зарегистрирован: 19.09.2019

Здравствуйте все!!!

Хотел реализовать временное (2-3 недели) отопление дома.

Суть заключается в поддержании температуры например от 3 до 7 градусов в режиме АВТО

Ручной режим должен включать и выключать при получении смс.

Не смог реализовать возможность активации нужного режима при получении смс.

Может кто разобрался, подскажет новичку пожалуйста!?

 

Moderator : пожалуйста, вставьте код правильно (новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

 

stema85
Offline
Зарегистрирован: 19.09.2019

Заранее благодарю!!!

b707
Offline
Зарегистрирован: 26.05.2017

код абсолютно нечитаем, вставьте его правильно

stema85
Offline
Зарегистрирован: 19.09.2019
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>

#define ONE_WIRE_BUS_1 A13                           // Вывод датчика температуры 1
#define ONE_WIRE_BUS_2 A12                           // Вывод датчика температуры 2
#define ONE_WIRE_BUS_3 A11                           // Вывод датчика температуры 3
#define ONE_WIRE_BUS_4 A10                           // Вывод датчика температуры 4
#define ONE_WIRE_BUS_5 A9                            // Вывод датчика температуры 5
#define ONE_WIRE_BUS_6 A8                            // Вывод датчика температуры 6

#define powerPin 9

OneWire oneWire_1(ONE_WIRE_BUS_1);
OneWire oneWire_2(ONE_WIRE_BUS_2);
OneWire oneWire_3(ONE_WIRE_BUS_3);
OneWire oneWire_4(ONE_WIRE_BUS_4);
OneWire oneWire_5(ONE_WIRE_BUS_5);
OneWire oneWire_6(ONE_WIRE_BUS_6);

DallasTemperature sensor_1(&oneWire_1);
DallasTemperature sensor_2(&oneWire_2);
DallasTemperature sensor_3(&oneWire_3);
DallasTemperature sensor_4(&oneWire_4);
DallasTemperature sensor_5(&oneWire_5);
DallasTemperature sensor_6(&oneWire_6);

SoftwareSerial mySerial(52, 53);             // Выводы SIM800L Tx &amp; Rx подключены к выводам Arduino 8 и 7
 //SoftwareSerial mySerial(2, 3); // RX, TX
 //Note:
 //Not all pins on the Mega and Mega 2560 support change interrupts,
 //so only the following can be used for RX:
 //10, 11, 12, 13, 50, 51, 52, 53, 
 //62, 63, 64, 65, 66, 67, 68, 69
 
 char incomingByte; 
 String inputString;
 
 int mode = 0; // РЕЖИМ: 2-ОТКЛ, 1-АВТО, 0-РУЧН
 int report = 0;
 
 int relay_1 = A0;                            // Вывод управления реле 1
 int relay_2 = A1;                            // Вывод управления реле 2
 int relay_3 = A2;                            // Вывод управления реле 3
 int relay_4 = A3;                            // Вывод управления реле 4
 int relay_5 = A4;                            // Вывод управления реле 5
 int relay_6 = A5;                            // Вывод управления реле 6


 void setup() 
 {
   pinMode(relay_1, OUTPUT);                  // Установим вывод как выход
   digitalWrite(relay_1, LOW);                // Устанавливаем низкий уровень
   pinMode(relay_2, OUTPUT);                  // Установим вывод как выход
   digitalWrite(relay_2, LOW);                // Устанавливаем низкий уровень
   pinMode(relay_3, OUTPUT);                  // Установим вывод как выход
   digitalWrite(relay_3, LOW);                // Устанавливаем низкий уровень
   pinMode(relay_4, OUTPUT);                  // Установим вывод как выход
   digitalWrite(relay_4, LOW);                // Устанавливаем низкий уровень
   pinMode(relay_5, OUTPUT);                  // Установим вывод как выход
   digitalWrite(relay_5, LOW);                // Устанавливаем низкий уровень
   pinMode(relay_6, OUTPUT);                  // Установим вывод как выход
   digitalWrite(relay_6, LOW);                // Устанавливаем низкий уровень


   Serial.begin(9600);                   
   mySerial.begin(9600); 

      powerON();

   delay(3000);  
      
 while(!mySerial.available()){                // Зацикливаем и ждем инициализацию SIM900
    mySerial.println("AT");                   // Отправка команды AT
   delay(1000);                              // Пауза
    Serial.println("Connecting…");           // Печатаем текст
    }
    Serial.println("Connected!");             // Печатаем текст
    mySerial.println("AT+CMGF=1");            // Отправка команды AT+CMGF=1
    delay(1000);                              // Пауза
    mySerial.println("AT+CNMI=1,2,0,0,0");    // Отправка команды AT+CNMI=1,2,0,0,0
    delay(1000);                              // Пауза
    mySerial.println("AT+CMGL=\"REC UNREAD\"");
 
   
    sensor_1.begin();
    sensor_2.begin();
    sensor_3.begin();
    sensor_4.begin();       
    sensor_5.begin();
    sensor_6.begin();

    mode = 2;
 }
 
 void loop()
 {    
   delay(3000);
    
    //Serial.print("Запрос температуры...");
    sensor_1.requestTemperatures();
    sensor_2.requestTemperatures();
    sensor_3.requestTemperatures();
    sensor_4.requestTemperatures();
    sensor_5.requestTemperatures();
    sensor_6.requestTemperatures();
    //Serial.println(" готово");

int temp1 = (sensor_1.getTempCByIndex(0));
int temp2 = (sensor_2.getTempCByIndex(0));
int temp3 = (sensor_3.getTempCByIndex(0));
int temp4 = (sensor_4.getTempCByIndex(0));
int temp5 = (sensor_5.getTempCByIndex(0));
int temp6 = (sensor_6.getTempCByIndex(0));

   // Serial.print("1: ");
   // Serial.print(temp1);
   // Serial.println("°C");

  //  Serial.print("2: ");
  //  Serial.print(temp2);
  //  Serial.println("°C");

  //  Serial.print("3: ");
  //  Serial.print(temp3);
  //  Serial.println("°C");

  //  Serial.print("4: ");
  //  Serial.print(temp4);
  //  Serial.println("°C");

  //  Serial.print("5: ");
  //  Serial.print(temp5);
  //  Serial.println("°C");

  //  Serial.print("6: ");
  //  Serial.print(temp6);
  //  Serial.println("°C");



  
   if(mySerial.available()){                  // Проверяем, если есть доступные данные
       delay(100);                            // Пауза
      while(mySerial.available()){            // Проверяем, есть ли еще данные.   
      incomingByte = mySerial.read();         // Считываем байт и записываем в переменную incomingByte   
      inputString += incomingByte;            // Записываем считанный байт в массив inputString   
}   
       delay(10);                             // Пауза        
       Serial.println(inputString);           // Отправка в "Мониторинг порта" считанные данные
       inputString.toUpperCase();             // Меняем все буквы на заглавные   


     if (inputString.indexOf("M0") > -1){ // Проверяем полученные данные, если MODE_0 все отключено (0-ОТКЛ) 
        mode = 0; 
        report = 0; }             
     if (inputString.indexOf("M1") > -1){ // Проверяем полученные данные, если MODE_1 выбран автоматический режим (1-АВТО)
        mode = 1;
        report = 0; }              
     if (inputString.indexOf("M2") > -1){ // Проверяем полученные данные, если MODE_2 выбран ручной режим (2-РУЧН)
        mode = 2; 
        report = 0; }             
        

  if (mode = 2)  //2-РУЧНое управление включением и выключением по смс
   {  
       if (inputString.indexOf("OFF_1") > -1){// Проверяем полученные данные, если OFF_1 выключаем реле 1 
        digitalWrite(relay_1, LOW);       
        sms(String("Relay 1 - OFF"), String("+79**********"));} // Отправка SMS      
       if (inputString.indexOf("ON_1") > -1){ // Проверяем полученные данные, если ON_1 включаем реле 1  
        digitalWrite(relay_1, HIGH);       
        sms(String("Relay 1 - ON"), String("+79**********"));}// Отправка SMS      
    
       if (inputString.indexOf("OFF_2") > -1){// Проверяем полученные данные, если OFF_2 выключаем реле 2
        digitalWrite(relay_2, LOW);       
        sms(String("Relay 2 - OFF"), String("+79**********"));}  // Отправка SMS    
       if (inputString.indexOf("ON_2") > -1){ // Проверяем полученные данные, если ON_2 включаем реле 2 
        digitalWrite(relay_2, HIGH);       
        sms(String("Relay 2 - ON"), String("+79**********"));} // Отправка SMS    
   
       if (inputString.indexOf("OFF_3") > -1){// Проверяем полученные данные, если OFF_3 выключаем реле 3
        digitalWrite(relay_3, LOW);       
        sms(String("Relay 3 - OFF"), String("+79**********"));}  // Отправка SMS    
       if (inputString.indexOf("ON_3") > -1){ // Проверяем полученные данные, если ON_3 включаем реле 3 
        digitalWrite(relay_3, HIGH);       
        sms(String("Relay 3 - ON"), String("+79**********"));} // Отправка SMS  

       if (inputString.indexOf("OFF_4") > -1){// Проверяем полученные данные, если OFF_4 выключаем реле 4
        digitalWrite(relay_4, LOW);       
        sms(String("Relay 4 - OFF"), String("+79**********"));}  // Отправка SMS    
       if (inputString.indexOf("ON_4") > -1){ // Проверяем полученные данные, если ON_4 включаем реле 4 
        digitalWrite(relay_4, HIGH);       
        sms(String("Relay 4 - ON"), String("+79**********"));} // Отправка SMS  
    
       if (inputString.indexOf("OFF_5") > -1){// Проверяем полученные данные, если OFF_5 выключаем реле 5
        digitalWrite(relay_5, LOW);       
        sms(String("Relay 5 - OFF"), String("+79**********"));}  // Отправка SMS    
       if (inputString.indexOf("ON_5") > -1){ // Проверяем полученные данные, если ON_5 включаем реле 5 
        digitalWrite(relay_5, HIGH);       
        sms(String("Relay 5 - ON"), String("+79**********"));} // Отправка SMS  

       if (inputString.indexOf("OFF_6") > -1){// Проверяем полученные данные, если OFF_6 выключаем реле 6
        digitalWrite(relay_6, LOW);       
        sms(String("Relay 6 - OFF"), String("+79**********"));}  // Отправка SMS    
       if (inputString.indexOf("ON_6") > -1){ // Проверяем полученные данные, если ON_6 включаем реле 6 
        digitalWrite(relay_6, HIGH);       
        sms(String("Relay 6 - ON"), String("+79**********"));} // Отправка SMS  


       if (inputString.indexOf("OFF_ALL") > -1){ // Проверяем полученные данные, если OFF_6 выключаем реле 6
        digitalWrite(relay_1, LOW); 
        digitalWrite(relay_2, LOW); 
        digitalWrite(relay_3, LOW);   
        digitalWrite(relay_4, LOW);
        digitalWrite(relay_5, LOW);
        digitalWrite(relay_6, LOW);            
        sms(String("Relay 1-6 - OFF"), String("+79**********"));}  // Отправка SMS    
      
       
       if (inputString.indexOf("ON_ALL") > -1){ // Проверяем полученные данные, если ON_6 включаем реле 6 
        digitalWrite(relay_1, HIGH);
        digitalWrite(relay_2, HIGH);
        digitalWrite(relay_3, HIGH);
        digitalWrite(relay_4, HIGH);
        digitalWrite(relay_5, HIGH);
        digitalWrite(relay_6, HIGH);               
        sms(String("Relay 1-6 - ON"), String("+79**********"));} // Отправка SMS  

   if ( report = 0) {
    sms(String("Mode: 2 (MANUALLY)"), String("+79**********"));  // Отправка SMS   
    report = 1; } 
   }


  if (mode = 1)  // 1-АВТОматическое вкл и выкл при низкой и высокой температуре
   { 
    if (temp1 < 3) // Если температура менее 3 градусов включаем реле 1 
        digitalWrite(relay_1, HIGH);    
    if (temp1 > 5) // Если температура более 5 градусов выключаем реле 1 
        digitalWrite(relay_1, LOW); 

    if (temp2 < 3) // Если температура менее 3 градусов включаем реле 2 
        digitalWrite(relay_2, HIGH);   
    if (temp2 > 5) // Если температура более 5 градусов выключаем реле 2 
        digitalWrite(relay_2, LOW); 

    if (temp3 < 3) // Если температура менее 3 градусов включаем реле 3 
        digitalWrite(relay_3, HIGH);   
    if (temp3 > 5) // Если температура более 5 градусов выключаем реле 3 
        digitalWrite(relay_3, LOW); 

    if (temp4 < 3) // Если температура менее 3 градусов включаем реле 4 
        digitalWrite(relay_4, HIGH);    
    if (temp4 > 5) // Если температура более 5 градусов выключаем реле 4 
        digitalWrite(relay_4, LOW); 

    if (temp5 < 3) // Если температура менее 3 градусов включаем реле 5 
        digitalWrite(relay_5, HIGH);   
    if (temp5 > 5) // Если температура более 5 градусов выключаем реле 5 
        digitalWrite(relay_5, LOW); 

    if (temp6 < 3) // Если температура менее 3 градусов включаем реле 6 
        digitalWrite(relay_6, HIGH);   
    if (temp6 > 5) // Если температура более 5 градусов выключаем реле 6 
        digitalWrite(relay_6, LOW); 

   if ( report = 0) {
    sms(String("Mode: 1 (AUTO)"), String("+79**********"));  // Отправка SMS   
    report = 1; } 
  
}


  if (mode = 0)  // 0-ОТКЛючение всех режимов()
   {    // Выключаем все реле
        digitalWrite(relay_1, LOW); 
        digitalWrite(relay_2, LOW); 
        digitalWrite(relay_3, LOW);   
        digitalWrite(relay_4, LOW);
        digitalWrite(relay_5, LOW);
        digitalWrite(relay_6, LOW);            
        
   if ( report = 0) {
        sms(String("Mode: 0 (OFF)"), String("+79**********"));   // Отправка SMS   
    report = 1; } 
    
   }        
              
        delay(50); 
       if (inputString.indexOf("OK") == -1){    
        mySerial.println("AT+CMGDA=\"DEL ALL\"");      
        delay(1000);}     
        inputString = "";} 



//Удалить 
Serial.println(mode);  

 
 }

 
 void sms(String text, String phone)          // Процедура Отправка SMS
 {
   Serial.println("SMS send started");
   mySerial.println("AT+CMGS=\"" + phone + "\"");
   delay(500);
   mySerial.print(text);
   delay(500);
   mySerial.print((char)26);
   delay(500);
   Serial.println("SMS send complete");
   Serial.println(phone);
   delay(2000);
 }

  void powerON(){
  pinMode(powerPin, OUTPUT);
  
  digitalWrite(powerPin, HIGH);
  delay(3000);

  digitalWrite(powerPin, LOW);
  delay(3000);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Залейте свой код на Ардуину, подключите модем и Сериал Монитор - и шлите на модем СМС-ки. Поскольку у вас в коде есть вывод в Сериал - вы сразу увидите, принимает ли ваша программа входящие СМС и если да - то в каком виде.

Попробуйте так сделать и я вас уверяю - результат будет для вас неожиданным.

stema85
Offline
Зарегистрирован: 19.09.2019

Пробовал, работает, смс отображается и входящие и исходящие, но если выключаю все реле они срабатывают при понижении температуры, пробовал 4 дня разные варианты... СМС приходит с текстом выбора режима работы: mode_1 (Авто) или mode_2 (ручной) , но режим не меняется...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

дак у тебя mode как в сетапе прописывается в 0, так ты её потом нигде и не меняешь, в зависимости от принятого. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

и, если код не вставишь правильно, с номерами строк, никто в него и не заглянет больше. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ну, покажи мне, тупому, где, кроме 64 строки меняется mode?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

значить, надо вставлять отладочный вывод в сериал, в те места, где приходит смс и должна меняться mode и смотреть, пошто она не меняется.  Ручками-ручками.  По-другому - никак. 

kalapanga
Offline
Зарегистрирован: 23.10.2016

stema85, Вас сейчас посылать начнут. Какой смысл приведённого огрызка? Вставьте этот фрагмент кода из сообщения #11 на место в скетч. Чтобы был конкретный полный код, который нужно обсуждать, в котором у Вас что-то не работает. Да и дополнительно на словах не грех пояснить - чем эти Ваши режимы должны отличаться и что именно не так работает.

kalapanga
Offline
Зарегистрирован: 23.10.2016

По всему коду в операторах if исправляйте в проверяемых условиях = на ==

Во всех if (mode = ...) , if (report = ...).

http://arduino.ru/Reference/If

stema85
Offline
Зарегистрирован: 19.09.2019

СПАСИБО БОЛЬШОЕ  kalapanga!!!!

Всё заработало!

ошибка из-за невнимательности...

Прошу понять и простить)))