конфликт датчика давления и датчика температуры

Serzh251
Offline
Зарегистрирован: 15.11.2017

добрый день всем

вопрос такой. создаю систему умного дома. на данный мометн установлены различные датчики, все они исправно работают, помимо прочих датчик давления BMP 280-1 шт, датчики температуры DS18B20- 4ш. При добавлении в код пятого датчика температуры (физически подключен) показания с датчика давления становятся равны нулю, при этом все 5 датчиков температуры показывают исправно. Сначала думал что DS18B20 кривой, паленый ( сетевой адрес как то отличался от прочих датчиков сильно), поставил другой. картина та же

да, с программированием я еще только учусь, поэтому не пинать, форум изучал, если нужен код целиком, выложу

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Конечно, нужен. И схема включения тоже. Этот датчик ведь можно по-разному подключить.

P.S. Вот здесь была большая тема, может поможет.

Serzh251
Offline
Зарегистрирован: 15.11.2017

///////////////////////Программа "умного дома" на основе MEGA2650////////////////////////

//Дисплей
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей

//датчики температуры
#include <OneWire.h>// библиотека для DS18B20
#include <DallasTemperature.h>// библиотека для DS18B20
#define ONE_WIRE_BUS 7  // датчики DS18B20 на 7 пин
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);  // Везде где встречается ds - это работа с датчиками Dallas DS18B20
DeviceAddress ZalC =    { 0x10, 0xC2, 0x8C, 0x30, 0x03, 0x08, 0x00, 0x3A }; // Сетевой адрес датчика DS18B20 в доме
DeviceAddress Spalna =  { 0x10, 0x49, 0x07, 0x31, 0x03, 0x08, 0x00, 0x1C }; // Сетевой адрес датчика DS18B20 в спальне
DeviceAddress podacha = { 0x10, 0xA9, 0x10, 0x31, 0x03, 0x08, 0x00, 0x18 }; // Сетевой адрес датчика DS18B20 температура тосола в подаче
DeviceAddress obratka = { 0x10, 0x81, 0x8A, 0x30, 0x03, 0x08, 0x00, 0x8A }; // Сетевой адрес датчика DS18B20 температура тосола в обратке
DeviceAddress kotel = { 0x28, 0xEE,0x85, 0x2B, 0x30, 0x16, 0x01, 0x1F }; // Сетевой адрес датчика DS18B20 температура котла
float tempC; // для работы с DS18B20
float  TempZalC    = 15;  // Переменная. Измеренная температура в зале    (По умолчанию 15гр.С)
float  TempSpalna  = 15;  // Переменная. Измеренная температура на улице  (По умолчанию 15гр.С)
float  Temppodacha = 15;  // Переменная. Измеренная температура на кухне  (По умолчанию 15гр.С)
float  Tempobratka  = 15;  // Переменная. Измеренная температура в подполе (По умолчанию 15гр.С)
int  Tempkotel  = 15;  // Переменная. Измеренная температура в подполе (По умолчанию 15гр.С)


//датчик атмосферного давления
#include <iarduino_Pressure_BMP.h>
iarduino_Pressure_BMP sensor;
float  AD=0;

//датчик уровня воды
int VodaPin = A0;
int VodaValue = 0; //промежуточная переменная
int Voda = 0; //переменная в литрах

//_______Все для цикла void otoplenie()______________________________________________________
int tempDust2kvt = 24;     // Уставка желаемой температуры в доме (По умолчанию 23гр.С)
int tempDECOust2kvt = 11;  // Уставка температуры в доме в режиме "Экономия"(По умолчанию 13гр.С)
int tempDust3kvt = 22;     // Уставка желаемой температуры в доме (По умолчанию 23гр.С)
int tempDECOust3kvt = 6;  // Уставка температуры в доме в режиме "Экономия"(По умолчанию 13гр.С)
boolean TimeSMSzapros=false; // Флаг "Отправлена СМС о состоянии дома по таймеру"
boolean SMSVoltIBP=false;    // Флаг "Отправлена СМС о низком заряде аккумулятора"
boolean EcoTempDust=false;   // Флаг "Экономия отопления"

#include <DHT.h>
DHT dht1(8, DHT22);
DHT dht2(6, DHT11);
int   VlagaDom=0;         // Значение влажности в цикле ventilyaciya()
int   VlagaUlica=0;         // Значение влажности в цикле ventilyaciya()
float TempUlica=0;         // Значение влажности в цикле ventilyaciya()
//_______Все для цикла void voltmetr()
float vout = 0.0;      // Напряжение на входе аналового входа
float Vpit = 0.0;      // Измеряемое напряжение на выходе ИБП
int volt = 0;          // Напряжение на входе АЦП

int statushome=0;      // переменная статуса включения умного дома 1 - включен, 0 -выключен
int statusotp2kvt=0;   // статус отопления дома  2 квт             0 - откл , 1- вкл , 2- экономия
int statusotp3kvt=0;   // статус отопления дома  3 квт             0 - откл , 1- вкл , 2- экономия
int statusAlarm=0;     // Переменная "Наличие тревоги"
int signaliz=0;        // Переменная "Режим работы охр.сигнализации" - 0 - откл , 1- вкл , 2- постановка на охрану, 3-в тревоге
int AlarmTemp=0;       // Переменная "Наличие тревоги по критической температуре"

long previousMillis = 0;    // храним время последнего замера влажности для цикла izmereniya()
long interval = 120000;     // интервал между замерами параметров для цикла  izmereniya() 2 минуты

//_______Для работы терминала по  Sim900______________________________
#include <GPRS_Shield_Arduino.h>// библиотека для работы с GPRS устройством
GPRS gprs(Serial1);// создаём объект класса GPRS и передаём в него объект Serial1 

// охрана
boolean ydarsperedi=false;//датчик удара спереди флаг
boolean ydarszadi=false;//датчик удара сзади флаг
const int ydarsperediPin = 4;//датчик удара спереди
const int ydarszadiPin =  5;//датчик удара сзади
const int maxcountPer = 1;
const int maxcountZad = 1;

int ydarsperediState = 0;
int ydarsperedicount = 0;
int ydarsperedioldstat = 0;

int ydarszadiState = 0;
int ydarszadicount = 0;
int ydarszadioldstat = 0;

void setup() {
  pinMode(53, OUTPUT); digitalWrite(53,HIGH);    // Управление отоплением 2 квт
  pinMode(51, OUTPUT); digitalWrite(51,HIGH);    // Управление отоплением 3 квт
  pinMode(13, OUTPUT); digitalWrite(13,LOW);    // Лампа УД включен
  pinMode(37, OUTPUT); digitalWrite(37,LOW);    // Управление видеонаблюдениеm
  pinMode(ydarszadiPin, INPUT);// датчик удара сзади
  pinMode(ydarsperediPin, INPUT);//датчик удара спереди
  Serial.begin(9600);// открываем последовательный порт для мониторинга действий в программе
  Serial1.begin(9600);// открываем Serial-соединение с GPRS Shield
  gprs.powerOn();// включаем GPRS шилд
    while (!gprs.init()) // проверяем есть ли связь с GPRS устройством
  {
    // если связи нет, ждём 1 секунду и выводим сообщение об ошибке
    // процесс повторяется в цикле пока не появится ответ от GPRS устройства
    delay(3000);
    Serial.print("GPRS Init error\r\n");
  }
  Serial.println("GPRS init success"); // вывод об удачной инициализации GPRS Shield
  NastroykaGSM();
  dht1.begin();                 // Замер влажности с DHT21
  dht2.begin();                 // Замер влажности с DHT11
  sensors.begin();             // Замер температуры с DS18B20
  sensors.setResolution(ZalC, 10);   
  sensors.setResolution(Spalna, 10); 
  sensors.setResolution(podacha, 10); 
  sensors.setResolution(obratka, 10);
  sensors.setResolution(kotel, 10);
  sensor.begin();              // Замер атмосферного давления с ВМР 280
  delay(2000);
  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея
  lcd.print("POLAR590");
  lcd.setCursor(0, 1);
  lcd.print("Privetstvyet");
}

void loop() {
  readsms();
  izmereniya();
  zapros();
//  readserial();
 // alarms();
  if (statushome==1){digitalWrite(13,HIGH);}   else {digitalWrite(13, LOW);} // Лампа "Умный дом включен"
  if (statusotp2kvt==1) {otoplenie2kvt();} else {digitalWrite(53, HIGH);}             // Управление работой котла 2 квт 1 - вкл., 0 - откл.
  if (statusotp3kvt==1) {otoplenie3kvt();} else {digitalWrite(51, HIGH);}             // Управление работой котла 3 квт 1 - вкл., 0 - откл.
  if (!signaliz==0){signalizSMS();}                                          // Работа сигнализации сигнализации при режимах 1,2,3
}
void readserial()
{
if(Serial.available()) //если порт что-то послал
  { 
    char ch = ' ';
    String valval = "";
    while(Serial.available())
     { 
      ch = Serial.read();
      valval += char(ch); //собираем принятые символы в строку
      delay(3);
     }
    Serial.print("Sim send> ");
    Serial.println(valval);
    
      if(valval.indexOf("On") > -1) {homeON(); Serial.println("SISTEMA UMNIY DOM-ON");} //включение УД

      if(valval.indexOf("Off") > -1){homeOFF(); Serial.println("SISTEMA UMNIY DOM-OFF");} //выключение УД
       
      if(valval.indexOf("OTOPLENIE-ON2") > -1) {statusotp2kvt=1; Serial.println("OTOPLENIE-ON2");} //включение отопления
  
      if(valval.indexOf("OTOPLENIE-OFF2") > -1) {statusotp2kvt=0; Serial.println("OTOPLENIE-OFF2");} //включение отопления

      if(valval.indexOf("OTOPLENIE-ECO2") > -1) {statusotp2kvt=2; Serial.println("OTOPLENIE-ECO2");} //включение отопления

      if(valval.indexOf("OTOPLENIE-ON3") > -1) {statusotp3kvt=1; Serial.println("OTOPLENIE-ON3");} //включение отопления
  
      if(valval.indexOf("OTOPLENIE-OFF3") > -1) {statusotp3kvt=0; Serial.println("OTOPLENIE-OFF3");} //включение отопления

      if(valval.indexOf("OTOPLENIE-ECO3") > -1) {statusotp3kvt=2; Serial.println("OTOPLENIE-ECO3");} //включение отопления

      if(valval.indexOf("OHRANA-ON") > -1) {signalizON(); Serial.println("OHRANA-ON");} //включение сигнализации

      if(valval.indexOf("OHRANA-OFF") > -1) {signalizOFF(); Serial.println("OHRANA-OFF");} //выключение сигнализации
   }
}
    
void readsms()
{
if(Serial1.available()) //если модуль что-то послал
  { 
    char ch = ' ';
    String val = "";
    while(Serial1.available())
     { 
      ch = Serial1.read();
      val += char(ch); //собираем принятые символы в строку
      delay(3);
     }
    Serial.print("Sim send> ");
    Serial.println(val);
    if(val.indexOf("+CMT") > -1) //если есть входящее sms
     {
      if(val.indexOf("On") > -1) { startOneSMS(); Serial1.println("SISTEMA UMNIY DOM-ON"); EndSMS(); homeON(); Serial.println("SISTEMA UMNIY DOM-ON");} //включение УД

      if(val.indexOf("Off") > -1){ startOneSMS(); Serial1.println("SISTEMA UMNIY DOM-OFF"); EndSMS(); homeOFF(); statusotp2kvt=0; statusotp3kvt=0; Serial.println("SISTEMA UMNIY DOM-OFF");} //выключение УД
       
      if(val.indexOf("Ot-on2") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ON2"); Serial1.print(TempZalC); EndSMS(); statusotp2kvt=1; Serial.println("OTOPLENIE-ON2");} //включение отопления
  
      if(val.indexOf("Ot-off2") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-OFF2"); EndSMS(); statusotp2kvt=0; Serial.println("OTOPLENIE-OFF2");} //выключение отопления

      if(val.indexOf("Ot-eco") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ECO"); EndSMS(); statusotp2kvt=2; statusotp3kvt=2; Serial.println("OTOPLENIE-ECO");} //включение отопления эко

      if(val.indexOf("Ot-on3") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ON3"); Serial1.print(TempZalC); EndSMS(); statusotp3kvt=1; Serial.println("OTOPLENIE-ON3");} //включение отопления
  
      if(val.indexOf("Ot-off3") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-OFF3"); EndSMS(); statusotp3kvt=0; Serial.println("OTOPLENIE-OFF3");} //выключение отопления

    //  if(val.indexOf("Ot-eco3") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ECO3"); EndSMS(); statusotp3kvt=2; Serial.println("OTOPLENIE-ECO3");} //включение отопления эко

  //    if(val.indexOf("Ot-off") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-OFF"); EndSMS(); statusotp2kvt=0; statusotp3kvt=0; Serial.println("OTOPLENIE-OFF");} //выключение отопления

    //  if(val.indexOf("Ot-on") > -1) { startOneSMS(); Serial1.println("OTOPLENIE-ON"); Serial1.print(TempZalC); EndSMS(); statusotp2kvt=1; statusotp3kvt=1; Serial.println("OTOPLENIE-ON");} //включение отопления

      if(val.indexOf("OHRANA-ON") > -1) { startOneSMS(); Serial1.println("OHRANA-ON"); EndSMS(); signalizON(); Serial.println("OHRANA-ON");} //включение сигнализации

      if(val.indexOf("OHRANA-OFF") > -1) { startOneSMS(); Serial1.println("OHRANA-OFF"); EndSMS(); signalizOFF(); Serial.println("OHRANA-OFF");} //выключение сигнализации

      if(val.indexOf("Zapros") > -1) { startOneSMS(); SMSzapros(); EndSMS();} //запрос параметров

      if(val.indexOf("Balans") > -1) {  Serial1.println("ATD#102#");} //запрос баланса  
     }
     else if (val.indexOf("+CUSD") > -1) {startOneSMS(); Serial1.println (val); EndSMS();}
  }
}
void izmereniya()   //  Замер температур с датчиков DS18B20 и влажности с датчика DHT11 
{
   unsigned long currentMillis = millis();
     
     delay(100);                          // Необязательная задержка
     VlagaUlica = dht1.readHumidity();// Уровень влажности % с DHT21
   //  delay(2000);
     TempUlica = dht1.readTemperature();// Уровень температуры С с DHT21
     VlagaDom = dht2.readHumidity();// Уровень влажности % с DHT11
     sensors.requestTemperatures();            // Замеры температур с DS18B20
     delay(750);                          // Необязательная задержка
     TempZalC    = sensors.getTempC(ZalC);     // Считываем температуру в зале
     delay(100);
     TempSpalna  = sensors.getTempC(Spalna);   // Считываем температуру в спальне
     delay(100);
     Temppodacha = sensors.getTempC(podacha);  // Считываем температуру в подаче
     delay(100);
     Tempobratka = sensors.getTempC(obratka);  // Считываем температуру в обратке
     delay(100);
     Tempkotel = sensors.getTempC(kotel);  // Считываем температуру котла
     delay(100);
     VodaValue = analogRead(VodaPin);//считываем показания с пина датчика уровня воды
     if (VodaValue<=12){Voda=10;}
     if (VodaValue>12&&VodaValue<=20){Voda=15;}
     if (VodaValue>20&&VodaValue<=32){Voda=20;}
     if (VodaValue>32&&VodaValue<=40){Voda=25;}
     if (VodaValue>40&&VodaValue<=47){Voda=35;}
     if (VodaValue>47&&VodaValue<=53){Voda=43;}
     if (VodaValue>53&&VodaValue<=60){Voda=50;}
     if (VodaValue>60&&VodaValue<=67){Voda=58;}
     if (VodaValue>67&&VodaValue<=76){Voda=68;}
     if (VodaValue>76&&VodaValue<=85){Voda=75;}
     if (VodaValue>85&&VodaValue<100){Voda=85;}
     if(TempZalC== -127 || TempSpalna== -127 || Temppodacha== -127 || Tempobratka== -127) // Перезапрос при ошибке датчика
     {
     sensors.requestTemperatures(); delay(750); // 
     TempZalC    = sensors.getTempC(ZalC);     // Считываем температуру в зале
     delay(100);
     TempSpalna  = sensors.getTempC(Spalna);   // Считываем температуру на улице
     delay(100);
     Temppodacha = sensors.getTempC(podacha);  // Считываем температуру в подаче
     delay(100);
     Tempobratka = sensors.getTempC(obratka);  // Считываем температуру в обратке
     delay(100);
     if(sensor.read(1)){AD=sensor.pressure;}// считываем показатель атмосферного давления
  else                     {Serial.println("нет ответа от сенсора давления");}
  delay(2000);
     
     
    // lcd.clear();
    //                      lcd.print("Podacha:");   lcd.setCursor(8, 0); lcd.print(Temppodacha) ;lcd.print("*C");//вывод температуры подачи антифриза на дисплей
    // lcd.setCursor(0, 1); lcd.print("Obratka:");   lcd.setCursor(8, 1); lcd.print(Tempobratka) ;lcd.print("*C");//вывод температуры обратки антифриза на дисплей

    
     lcd.clear();
                          lcd.print("AtmP:");   lcd.setCursor(5, 0); lcd.print(AD) ;lcd.print("mm.Hg");//вывод атмосферного давления на дисплей
     lcd.setCursor(0, 1); lcd.print("Voda:");   lcd.setCursor(5, 1); lcd.print(Voda) ;lcd.print("L");//вывод уровня воды в баке на дисплей
     delay(2000);
     lcd.clear();
                          lcd.print("VlagaUl:");   lcd.setCursor(9, 0); lcd.print(VlagaUlica); lcd.print("%");//вывод атмосферного давления на дисплей
     lcd.setCursor(0, 1); lcd.print("Ulica:");     lcd.setCursor(9, 1); lcd.print(TempUlica) ;lcd.print("C");//вывод уровня воды в баке на дисплей
    
     delay(2000);
     lcd.clear(); 
                          lcd.print("V");   lcd.setCursor(1, 0); lcd.print(VlagaDom);    lcd.print("%");  lcd.setCursor(5, 0); lcd.print("Pod"); lcd.print(Temppodacha);//вывод уровня влажности на дисплей
     lcd.setCursor(0, 1); lcd.print("Z");   lcd.setCursor(1, 1); lcd.print(TempZalC); lcd.print("C");  lcd.setCursor(8, 1); lcd.print("Obr"); lcd.print(Tempobratka);//вывод температуры спереди на дисплей
     delay(2000);
      }
     voltmetr();                            // Считываем напряжения на выходе ИБП (норма 13,5в)
     previousMillis = currentMillis;       // Сброс таймера
}
void voltmetr()  //____________Цикл "Вольтметр"__измерение напряжения на выходе ИБП
// Взято с http://digitrode.ru/computing-devices/mcu_cpu/87-voltmetr-na-arduino.html
{
   volt = analogRead(A1);                       // А0 аналоговый вход вольтметра
   vout = (volt * 5.0) / 1024.0;             
   Vpit = vout / (10000.0/(100000.0+10000.0));  // По формуле Vpit = vout / (R2/(R1+R2)) 
   if (Vpit<0.09) { Vpit=0.0;}                  // Округление до нуля 
}

void alarms()  //______________Цикл "тревожные сигналы"____// http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
{

             }

//else if (Vpit<=12.0 && SMSVoltIBP==false)             { startOneSMS(); Serial2.println("Alarm! Min zaryad akkumulyatora IBP!"); EndSMS(); SMSVoltIBP=true;}             // Низкий заряд аккумулятора
//else if (Vpit>=14.0 && SMSVoltIBP==false)             { startOneSMS(); Serial2.println("Alarm! Max zaryad akkumulyatora IBP!"); EndSMS(); SMSVoltIBP=true;}             // Перезаряд аккумулятора
//  else {statusAlarm=0; AlarmTemp=0;}

//}
void homeON() //Цикл включения умного дома
{
  statushome=1;      // статус умного дома                   0 - откл , 1- вкл
  Serial.print("HOME vkl");   
}
void homeOFF() //Цикл выключения умного дома
{
  statushome=0;      // статус питания дома                  0 - откл , 1- вкл
  Serial.print("HOME vikl");
}
void otoplenie2kvt() // Цикл управления электро котлом 2 квт (Сигнал инвертированный!(Особенность подключения к котлу))
{
  if ( statusotp2kvt==0) // Отключено
     {  digitalWrite(53,HIGH);
        Serial.println("Otoplenie vikl2");} // Отключить отопление
  
  if ( statusotp2kvt==1) // Климат-контроль
     {  if ( TempZalC > (tempDust2kvt)){digitalWrite(53,HIGH);
            Serial.println("Otoplenie2 vikl");} // Отключить отопление если температура больше желаемой
        if (TempZalC < tempDust2kvt)   {digitalWrite(53,LOW);
            Serial.println("Otoplenie2 vkl");}  // Включить отопление если температура меньше желаемой
     }
  if ( statusotp2kvt==2) // Экономия
     {  if ( TempZalC > (tempDECOust2kvt)){digitalWrite(53,HIGH);
            Serial.println("OtoplenieEco2 vikl");} // Отключить отопление если температура больше желаемой на 1грС
        if (TempZalC < tempDECOust2kvt)   {digitalWrite(53,LOW);
            Serial.println("OtoplenieEco2 vkl");}  // Включить отопление если температура меньше желаемой
     }
}  

void otoplenie3kvt() // Цикл управления электро котлом 3квт (Сигнал инвертированный!(Особенность подключения к котлу))
{
  if ( statusotp3kvt==0) // Отключено
     {  digitalWrite(53,HIGH);
        Serial.println("Otoplenie3 vikl");} // Отключить отопление
  
  if ( statusotp3kvt==1) // Климат-контроль
     {  if ( Temppodacha > 83 || Tempobratka> 75|| Tempkotel > 90){digitalWrite(51,HIGH);
            Serial.println("Otoplenie3 vikl");} // Отключить отопление если температура больше желаемой  
        if ( TempZalC > tempDust3kvt){digitalWrite(51,HIGH);
            Serial.println("Otoplenie3 vikl");} // Отключить отопление если температура больше желаемой
        if (TempZalC < tempDust3kvt&&Tempkotel < 85)   {digitalWrite(51,LOW);
            Serial.println("Otoplenie3 vkl");}  // Включить отопление если температура меньше желаемой

     }
  if ( statusotp3kvt==2) // Экономия
     {  if ( TempZalC > (tempDECOust3kvt)){digitalWrite(51,HIGH);
            Serial.print("OtoplenieEco3 vikl");} // Отключить отопление если температура больше желаемой на 1грС
        if (TempZalC < tempDECOust3kvt)   {digitalWrite(51,LOW);
            Serial.println("OtoplenieEco3 vkl");}  // Включить отопление если температура меньше желаемой
     }
} 
void zapros()  //Передача всех параметров в терминал
{
  Serial.print("SmartHOME = ");
  if (statushome==1){Serial.println("ON");}
  if (statushome==0){Serial.println("OFF");}
    Serial.print("KLIMAT2kvt=");    
    if (statusotp2kvt==1){Serial.print("ON :"); Serial.print(tempDust2kvt); Serial.println("*C");}
    if (statusotp2kvt==0){Serial.println("OFF");}
    if (statusotp2kvt==2){Serial.print("ECO");Serial.print(tempDECOust2kvt); Serial.println("*C");}
  
    Serial.print("KLIMAT3kvt=");    
    if (statusotp3kvt==1){Serial.print("ON :"); Serial.print(tempDust3kvt); Serial.println("*C");}
    if (statusotp3kvt==0){Serial.println("OFF");}
    if (statusotp3kvt==2){Serial.print("ECO");Serial.print(tempDECOust3kvt); Serial.println("*C");}
  Serial.print("OHRANA = ");
  if (signaliz==1){Serial.println("ON");}
  if (signaliz==0){Serial.println("OFF");}
  if (signaliz==3){Serial.println("TREVOGA");}
  
  Serial.println("Parametry:");
    
 // int chk = dht.read(DHT11PIN);
 // switch (chk)
// {
  //  case DHTLIB_OK: break; // Serial1.println("DHT-OK"); 
 //   case DHTLIB_ERROR_CHECKSUM: Serial1.println("DHT Checksum error"); break;
 //   case DHTLIB_ERROR_TIMEOUT:  Serial1.println("DHT Time out error"); break;
//    default: Serial1.println("DHT Unknown error"); break;
//  }
  Serial.print("Voda="); Serial.print(Voda);Serial.println("L");
  Serial.print("P="); Serial.print(AD); Serial.println(" mm.Hg");
  Serial.print("VlagaDom: ");    Serial.print(VlagaDom);    Serial.println(" %");
  Serial.print("VlagaUlica: ");    Serial.print(VlagaUlica);    Serial.println(" %");
  Serial.print("Zal: ");    Serial.print(TempZalC);    Serial.println(" *C");
  Serial.print("Spalna: ");    Serial.print(TempSpalna);    Serial.println(" *C");
  Serial.print("Ulica:");   Serial.print(TempUlica);  Serial.println(" *C");
  Serial.print("Podacha:"); Serial.print(Temppodacha); Serial.println(" *C");
  Serial.print("Obratka:"); Serial.print(Tempobratka); Serial.println(" *C");
  Serial.print("kotel:"); Serial.print(Tempkotel); Serial.println(" *C");
//  Serial.print("IBP:+");    Serial.print(Vpit);    Serial.println(" V");
//  if (Vpit<=12.0)   { Serial.println("Alarm! Min zaryad akkumulyatora IBP!"); }
//  if (Vpit>=14.0)   { Serial.println("Alarm! Max zaryad akkumulyatora IBP!"); }
//  Serial.print("SMS:");     Serial.println(SMSschet);
//  Serial.print("DS18B20 ERROR:");// Serial.println(dsshet);
}
void SMSzapros()
{
    Serial1.print("HOME=");
    if (statushome==1){Serial1.println("ON");}
    if (statushome==0){Serial1.println("OFF");}
//    Serial1.print("Ohrana:");
//    if (signaliz==2){Serial1.println("START");}
//    if (signaliz==1){Serial1.println("ON");}
//    if (signaliz==0){Serial1.println("OFF");}
    
//    if (AlarmTemp==1) { Serial1.println("Temperatura!"); }
    Serial1.print("KLIMAT2kvt=");    
    if (statusotp2kvt==1){Serial1.print("ON :"); Serial1.print(tempDust2kvt); Serial1.println("*C");}
    if (statusotp2kvt==0){Serial1.println("OFF");}
    if (statusotp2kvt==2){Serial1.print("ECO");Serial1.print(tempDECOust2kvt); Serial1.println("*C");}
    Serial1.print("KLIMAT3kvt=");    
    if (statusotp3kvt==1){Serial1.print("ON :"); Serial1.print(tempDust3kvt); Serial1.println("*C");}
    if (statusotp3kvt==0){Serial1.println("OFF");}
    if (statusotp3kvt==2){Serial1.print("ECO");Serial1.print(tempDECOust3kvt); Serial1.println("*C");}
  Serial1.print("Voda="); Serial1.print(Voda);Serial1.println("L");
  Serial1.print("P="); Serial1.print(AD); Serial1.println(" mm.Hg");
  Serial1.print("VlagaDom: ");    Serial1.print(VlagaDom);    Serial1.println(" %");
  Serial1.print("VlagaUlica: ");    Serial1.print(VlagaUlica);    Serial1.println(" %");
  Serial1.print("Zal: ");    Serial1.print(TempZalC);    Serial1.println(" *C");
  Serial1.print("Spalna:");   Serial1.print(TempSpalna);  Serial1.println(" *C");
 // Serial1.print("Ulica:"); Serial1.print(TempUlica); Serial1.println(" *C");
  Serial1.print("Podacha:"); Serial1.print(Temppodacha); Serial1.println(" *C");
  Serial1.print("Obratka:"); Serial1.print(Tempobratka); Serial1.println(" *C");
//  Serial1.print("IBP:+");    Serial1.print(Vpit);    Serial1.println(" V");
    EndSMS();                                 
}
void NastroykaGSM()
{
    Serial1.print("AT+CMGF=1\r"); //устанавливает текстовый режим смс-сообщения
    delay(500);
    Serial1.print("AT+IFC=1, 1\r");       //устанавливает программный контроль потоком передачи данных
    delay(500);
    Serial1.print("AT+CPBS=\"SM\"\r");    //открывает доступ к данным телефонной книги SIM-карты
    delay(500);
    Serial1.print("AT+CMGDA=\"DEL ALL\"\r"); //Очищаем накопившиеся СМС 
    delay(500);
    Serial1.print("AT+CNMI=1,2,2,1,0\r"); //включает оповещение о новых сообщениях
    delay(500);
    }
void startOneSMS() //__________________Цикл подготовки модуля к отправке СМС-сообщений по первому номеру
{
      delay(300);
      Serial1.print("AT+CMGF=1\r");
      delay(300);
      Serial1.println("AT + CMGS = \"+79025075325\""); 
      delay(300);
}      
void EndSMS() //__________________Цикл окончания и отправки СМС-сообщения_______________________
{
   delay(300);
   Serial1.println((char)26);    // Команда отправки СМС
   delay(5000);
}

ЕвгенийП пишет:

Конечно, нужен. И схема включения тоже. Этот датчик ведь можно по-разному подключить.

P.S. Вот здесь была большая тема, может поможет.

Serzh251
Offline
Зарегистрирован: 15.11.2017

ЕвгенийП пишет:

Конечно, нужен. И схема включения тоже. Этот датчик ведь можно по-разному подключить.

P.S. Вот здесь была большая тема, может поможет.

датчик давления ВМР280 подключен по шине I2C, датчики температуры все на 7 пине, без паразитного питания

Serzh251
Offline
Зарегистрирован: 15.11.2017

еще такая ситуация

открываю монитор порта, все температуры в норме, давление 0.00, сдергиваю датчики давления с пина ардуино (сигнальный провод), естественно вываливается по температуре -127, а давление начинает показывать, ставлю пин датчиков температуры обратно, температура в норме, давление тоже продолжает казать. перезапускаю ардуино (мега), снова давление 0..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Serzh251 пишет:

сдергиваю датчики давления с пина ардуино (сигнальный провод), естественно вываливается по температуре -127, а давление начинает показывать

Боюсь, что в этой ситуации медицина бессильна :(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А если по делу, то когда проблемы начинаются с добавлением датчика температуры, то скорее всего проблема в таймингах. Протокол OneWire к ним ОЧЕНЬ чувствителен. Если во время его работы вклинится I2C они могут сойти с ума.

Проверить можно так.

1. Закомментируйте в программе ВСЁ, связанное с температурными датчиками. Убедитесь, что датчик давления работает.

2. Закомментируйте в программе ВСЁ, связанное с датчиком давления. Убедитесь, что  все температурные датчики работают.

Если по отдельности всё работает, то программно разнесите опрос температуры и дваление по времени, чтобы в каждый момент времени гарантированно работало только что-то одно. И всё должно быть в порядке.

Если же п.1. и 2. не верны, то скажите. Мы пока забудем про один тип датчика и добъёмся. чтобы второй отдельно хорошо работал.

Serzh251
Offline
Зарегистрирован: 15.11.2017

ЕвгенийП пишет:

Serzh251 пишет:

сдергиваю датчики давления с пина ардуино (сигнальный провод), естественно вываливается по температуре -127, а давление начинает показывать

Боюсь, что в этой ситуации медицина бессильна :(

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

251 строка-перезапрос датчиков температуры, если есть где то -127

262 считывание показания давления

почему сначала работало, до добавления датчика? датчик физически висел на шине, но в коде был заведомо не верный адрес вбит, чтобы давление получать, временно, до выяснения причин, соотв вываливалось -127, давление есть

а как только ставлю нормальный адрес, ошибок датчиков температуры нет, показатель давления не получаем..как то так

надо быть впредь внимательнее)