Всем привет. Есть рабочая схема,но датчики ну не как не устраивают эти dht22.Цена вопроса? Код (C++): #include <SoftwareSerial.h> #include "DHT.h" #define DHT_1_PIN 4 #define DHT_2_PIN 5 #define DHT_3_PIN 6 #define DHT_4_PIN 7// pin на котором висит датчик температуры #define DHT_5_PIN 12 //Датчик температуры на улице #define DHTTYPE DHT22 // DHT 22 тип датчика //Отсылается смс в формате: влажность;температура;устройство1;устройство2;устройство3;устройство4;Контроль периметра;Состояние периметра;Контроль автотемпературы;Установленная температура;STEWARD; int powerGSM = 9; //Пин включения GSM int unit1 = A1; //Террасса int unit2 = A2; //Ванна int unit3 = A3;//Гостинная int unit4 = A4;//Комната int unit5 = A5; // Роутер int perim = A0;// Датчик периметра int power = 10; // Контроль внешнего питания int svet = 11; // Включение света на терассе и крыльце int redLed = 13;// Cветодиод работы всего девайса String statusHome; int t1=0; int t2=0; int t3=0; int t4=0; int us1=0; int us2=0; int us3=0; int us4=0; int u1st; int u2st; int u3st; int u4st; int svetsost=0; char data;//Содержит символ полученый от сим модуля. unsigned long currentTime; unsigned long loopTime; unsigned long currentTimeGSM; unsigned long loopTimeGSM; boolean unit1status = false; //tersost boolean unit2status = false; //vannasost boolean unit3status = false;//gostinsost boolean unit4status = false;//roomsost boolean unit5status = false;//router int isPerimetr = 0; //Контроль периметра boolean sendSMS = false; //Для проверки что смс отсылаем только один раз boolean sendSMSPow = false; //Для проверки что смс отсылаем только один раз для цикл контроля питания int isAuto = 0; //Автоматическое управление температурой int autoTemp = 0; int delta = 2; DHT dht1(DHT_1_PIN, DHTTYPE); DHT dht2(DHT_2_PIN, DHTTYPE); DHT dht3(DHT_3_PIN, DHTTYPE); DHT dht4(DHT_4_PIN, DHTTYPE); DHT dht5(DHT_5_PIN, DHTTYPE); SoftwareSerial gprsSerial(2, 3); String currStr = ""; String bal = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void setup() { pinMode(unit1, OUTPUT); pinMode(unit2, OUTPUT); pinMode(unit3, OUTPUT); pinMode(unit4, OUTPUT); pinMode(unit5, OUTPUT); pinMode(powerGSM, OUTPUT); pinMode(perim, INPUT); pinMode(svet, OUTPUT); pinMode(redLed, OUTPUT); digitalWrite(unit1, LOW); digitalWrite(unit2, LOW); digitalWrite(unit3, LOW); digitalWrite(unit4, LOW); digitalWrite(svet, LOW); digitalWrite(powerGSM, LOW); digitalWrite(redLed, LOW); //Включаю GSM Модуль digitalWrite(powerGSM, HIGH); delay(1000); digitalWrite(powerGSM, LOW); delay(5000); gprsSerial.begin(19200); delay(300); // Настраиваем приём сообщений с других устройств // Между командами даём время на их обработку 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); gprsSerial.print("ATS0=6\r"); delay(300); gprsSerial.print("AT+CLVL=100\r"); // Устанавливает громкость динамика, значения от (0-100) delay(300); gprsSerial.print("AT+CALM=1\r"); // Отключает все мелодии и звуки при входящем звонке и СМС delay(300); //Инициализация температурного датчика Serial.begin(9600); Serial.println("DHT22 test!"); dht1.begin(); delay(3000); // ParseSMS("valdai;tersost;t1;h1;vannasost;t2;h2;gostinsost;t3;h3;roomsost;t4;h4;router;perimetr"); currentTime = millis(); loopTime = currentTime; currentTimeGSM = millis(); loopTimeGSM = currentTimeGSM; } void loop() { currentTimeGSM = millis(); if(currentTimeGSM >= (loopTimeGSM + 600000)) { if (testGsmOn()==1){ gsmOn();} loopTimeGSM = currentTimeGSM; } int sostPerimetr; //Состояние периметра int sostPower; // Сосотояние внешнего питания if (gprsSerial.available()){ char currSymb = gprsSerial.read(); Serial.print(currSymb); // return; // char currSymb = gprsSerial.read(); // Serial.println(gprsSerial.read()); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("Zapros")) { balance(); GetDatchik(); } else if (currStr.startsWith("Ardu")) { ParseSMS(currStr); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } } // Контроль периметра !!! //if (isPerimetr==1) { //Проверка Включен ли контроль периметра //digitalWrite(redLed, HIGH); //sostPerimetr = digitalRead(perim); // if (sostPerimetr==LOW) { //Проверка на разомкнутый периметри отсылаем СМС // if (sendSMS==false){ // sendTextMessage("WARNING! Valdai door open!"); // sendSMS=true; // } // } // // } else {digitalWrite(redLed, LOW); // sendSMS=false; // } // Контроль внешнего питания // sostPower = digitalRead(power); // if (sostPower==LOW) { //Проверка отключения внешнего питания // if (sendSMSPow==false){ // sendTextMessage("WARNING! Valdai, MAIN POWER OFF!"); // sendSMSPow=true; // } // } // else { // sendSMSPow=false; // } // Контроль температуры!!! if (isAuto==1) { //Проверка Включен автоуправление батареями //Замер температуры можно проводить не чаще раз в 5 минут currentTime = millis(); if(currentTime >= (loopTime + 10000)){ t1 = int(dht1.readTemperature()); t2 = int(dht2.readTemperature()); t3 = int(dht3.readTemperature()); t4 = int(dht4.readTemperature()); loopTime = currentTime; } // // Serial.print("t="); // Serial.println(t); // Serial.print("autoTemp+delta="); // Serial.println(autoTemp+delta); if (unit1status==true){ if (t1 > autoTemp-delta){ digitalWrite(unit1, HIGH); us1=0;} else if (t1 < autoTemp+delta) {digitalWrite(unit1, LOW); us1=1;} } if (unit2status==true){ if (t2 < autoTemp-delta){ digitalWrite(unit2, HIGH); us2=0;} else if (t2 > autoTemp+delta) {digitalWrite(unit2, LOW); us2=1;} } if (unit3status==true){ if (t3 < autoTemp-delta){ digitalWrite(unit3, HIGH); us3=0;} else if (t3 > autoTemp+delta) {digitalWrite(unit3, LOW); us3=1;} } if (unit4status==true){ if (t4 < autoTemp-delta){ digitalWrite(unit4, HIGH); us4=0; } else if (t4 > autoTemp+delta) {digitalWrite(unit4, LOW); us4=1;} } } } void GetDatchik() { // Пол // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h1 = dht1.readHumidity(); float t1 = dht1.readTemperature(); float h2 = dht2.readHumidity(); float t2 = dht2.readTemperature(); float h3 = dht3.readHumidity(); float t3 = dht3.readTemperature(); float h4 = dht4.readHumidity(); float t4 = dht4.readTemperature(); float t5 = dht5.readTemperature(); u1st = unit1status - us1; u2st = unit2status - us2; u3st = unit3status - us3; u4st = unit4status - us4; Serial.print("Unit1status="); Serial.println(u1st); Serial.print("Unit2status="); Serial.println(u2st); Serial.print("Unit3status="); Serial.println(u3st); Serial.print("Unit4status="); Serial.println(u4st); Serial.print("Temperature street="); Serial.println(t5); // check if returns are valid, if they are NaN (not a number) then something went wrong! //if (isnan(t1) || isnan(h1)) { // Serial.println("Failed to read from DHT"); //} else { statusHome = String("Valdai")+String(";")+int(u1st)+String(";")+int(t1)+String(";")+int(h1)+String(";")+int(u2st)+String(";")+int(t2)+String(";")+int(h2)+String(";")+int(u3st)+String(";")+int(t3)+String(";")+int(h3)+String(";")+int(u4st)+String(";")+int(t4)+String(";")+int(h4)+String(";")+int(unit5status)+String(";")+int(isPerimetr)+String(";")+int(autoTemp)+String(";")+String(bal)+String(";")+int(t5)+String(";")+int(svetsost); sendTextMessage(statusHome); bal = ""; // Serial.flush(); //Serial.print("Message send"); //Влажность // Serial.print(h); // Serial.print(";"); // Serial.print("T"); //Температура // Serial.print(t); // Serial.println(";"); // Serial.println(statusHome); // } } void ParseSMS(String currStr) { us1=0; us2=0; us3=0; us4=0; int firstSemicolon; //Распарсиваем SMS firstSemicolon = 1;//находим первую ; //Получаем значение Автоматического режима контроля температуры /
а влажность то, влажность откудова брать? мошт ты лучше DHT22 на BME280 заменишь? И переделок минимум
MIT App Inventor 2 Вот где засада! Прошу у Вас помощи по проекту. В виду изменения в appinventor подскажите что мне поменять что бы с запросом приходил ответ в виде распаренного сообщения.Мозгов хватило только на отправку смс переделать,а вот на прием приходит только обычное смс.