Как сделать 2 режима Авто и Ручное управлеие через GSM, помогите пожалуйста!
- Войдите на сайт для отправки комментариев
Чт, 19/09/2019 - 23:21
Moderator : пожалуйста, вставьте код правильно (новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Здравствуйте все!!!
Хотел реализовать временное (2-3 недели) отопление дома.
Суть заключается в поддержании температуры например от 3 до 7 градусов в режиме АВТО
Ручной режим должен включать и выключать при получении смс.
Не смог реализовать возможность активации нужного режима при получении смс.
Может кто разобрался, подскажет новичку пожалуйста!?
Moderator : пожалуйста, вставьте код правильно (новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Заранее благодарю!!!
код абсолютно нечитаем, вставьте его правильно
#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 & 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); }Залейте свой код на Ардуину, подключите модем и Сериал Монитор - и шлите на модем СМС-ки. Поскольку у вас в коде есть вывод в Сериал - вы сразу увидите, принимает ли ваша программа входящие СМС и если да - то в каком виде.
Попробуйте так сделать и я вас уверяю - результат будет для вас неожиданным.
Пробовал, работает, смс отображается и входящие и исходящие, но если выключаю все реле они срабатывают при понижении температуры, пробовал 4 дня разные варианты... СМС приходит с текстом выбора режима работы: mode_1 (Авто) или mode_2 (ручной) , но режим не меняется...
дак у тебя mode как в сетапе прописывается в 0, так ты её потом нигде и не меняешь, в зависимости от принятого.
и, если код не вставишь правильно, с номерами строк, никто в него и не заглянет больше.
ну, покажи мне, тупому, где, кроме 64 строки меняется mode?
значить, надо вставлять отладочный вывод в сериал, в те места, где приходит смс и должна меняться mode и смотреть, пошто она не меняется. Ручками-ручками. По-другому - никак.
stema85, Вас сейчас посылать начнут. Какой смысл приведённого огрызка? Вставьте этот фрагмент кода из сообщения #11 на место в скетч. Чтобы был конкретный полный код, который нужно обсуждать, в котором у Вас что-то не работает. Да и дополнительно на словах не грех пояснить - чем эти Ваши режимы должны отличаться и что именно не так работает.
По всему коду в операторах if исправляйте в проверяемых условиях = на ==
Во всех if (mode = ...) , if (report = ...).
http://arduino.ru/Reference/If
СПАСИБО БОЛЬШОЕ kalapanga!!!!
Всё заработало!
ошибка из-за невнимательности...
Прошу понять и простить)))