конфликт датчика давления и датчика температуры
- Войдите на сайт для отправки комментариев
Пт, 05/01/2018 - 15:23
добрый день всем
вопрос такой. создаю систему умного дома. на данный мометн установлены различные датчики, все они исправно работают, помимо прочих датчик давления BMP 280-1 шт, датчики температуры DS18B20- 4ш. При добавлении в код пятого датчика температуры (физически подключен) показания с датчика давления становятся равны нулю, при этом все 5 датчиков температуры показывают исправно. Сначала думал что DS18B20 кривой, паленый ( сетевой адрес как то отличался от прочих датчиков сильно), поставил другой. картина та же
да, с программированием я еще только учусь, поэтому не пинать, форум изучал, если нужен код целиком, выложу
Конечно, нужен. И схема включения тоже. Этот датчик ведь можно по-разному подключить.
P.S. Вот здесь была большая тема, может поможет.
///////////////////////Программа "умного дома" на основе 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. Вот здесь была большая тема, может поможет.
Конечно, нужен. И схема включения тоже. Этот датчик ведь можно по-разному подключить.
P.S. Вот здесь была большая тема, может поможет.
датчик давления ВМР280 подключен по шине I2C, датчики температуры все на 7 пине, без паразитного питания
еще такая ситуация
открываю монитор порта, все температуры в норме, давление 0.00, сдергиваю датчики давления с пина ардуино (сигнальный провод), естественно вываливается по температуре -127, а давление начинает показывать, ставлю пин датчиков температуры обратно, температура в норме, давление тоже продолжает казать. перезапускаю ардуино (мега), снова давление 0..
сдергиваю датчики давления с пина ардуино (сигнальный провод), естественно вываливается по температуре -127, а давление начинает показывать
Боюсь, что в этой ситуации медицина бессильна :(
А если по делу, то когда проблемы начинаются с добавлением датчика температуры, то скорее всего проблема в таймингах. Протокол OneWire к ним ОЧЕНЬ чувствителен. Если во время его работы вклинится I2C они могут сойти с ума.
Проверить можно так.
1. Закомментируйте в программе ВСЁ, связанное с температурными датчиками. Убедитесь, что датчик давления работает.
2. Закомментируйте в программе ВСЁ, связанное с датчиком давления. Убедитесь, что все температурные датчики работают.
Если по отдельности всё работает, то программно разнесите опрос температуры и дваление по времени, чтобы в каждый момент времени гарантированно работало только что-то одно. И всё должно быть в порядке.
Если же п.1. и 2. не верны, то скажите. Мы пока забудем про один тип датчика и добъёмся. чтобы второй отдельно хорошо работал.
сдергиваю датчики давления с пина ардуино (сигнальный провод), естественно вываливается по температуре -127, а давление начинает показывать
Боюсь, что в этой ситуации медицина бессильна :(
проблему нашел, как всегда не внимательность..
251 строка-перезапрос датчиков температуры, если есть где то -127
262 считывание показания давления
почему сначала работало, до добавления датчика? датчик физически висел на шине, но в коде был заведомо не верный адрес вбит, чтобы давление получать, временно, до выяснения причин, соотв вываливалось -127, давление есть
а как только ставлю нормальный адрес, ошибок датчиков температуры нет, показатель давления не получаем..как то так
надо быть впредь внимательнее)