DJ152
Members-
Постов
7 -
Зарегистрирован
-
Посещение
Информация
-
Город
Yekaterinburg
Электроника
-
Стаж в электронике
Менее года
Достижения DJ152
-
В общем доработал код, сейчас отправка по событиям идёт, но при попытке добавить монитор и вывод показаний на него код работать перестаёт. т.е показания выводит на монитор, но при сработке события экран перезагружается (видимо из-за delay после события) и смс не отправляется. Причина только в мониторе. Работает по I2C.
-
Шилд TinySine GSM вставлен бутербродом. Самое интересное что до добавления последующих датчиков и условий сработки с одним температурным далласом отлично работал и отправлял по условию смс. С последним кодом почему то идёт перезагрузка всего контроллера при наступлении события..т.е. провода и пин подключения не менял.
-
Код второго варианта, с switch-case: при котором наступает перезагрузка контроллера в случае наступления события: #include <SIM900.h> #include <sms.h> #include <DHT.h> #include <OneWire.h> #include <Wire.h> #include <SoftwareSerial.h> #include <DallasTemperature.h> #include <LiquidCrystal_I2C.h> #define ONE_WIRE_BUS 4 // DS18S20 подключаем к 4 пину #define analogInPin A0 // Датчик Газа к А0 DHT sensor; int pirPin = 7; // Контакт для подключения датчика движения к Arduino int motion = 0; // Переменная для хранения состояния датчика движения int komnata; LiquidCrystal_I2C lcd(0x27,20,4); // Liquide crystal is a 4x20 LCD with I2C support OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress bathroom = { 0x28, 0xFF, 0x32, 0x3D, 0x90, 0x15, 0x04, 0xC0 }; //Датчик в подвале unsigned int swt = 0; // flip for alternate the display btw temp and humidity SMSGSM sms; char number[]="+7ХХХХХХХХ"; // Destination number char message[180]; char pos; char *p; //char buffer1[] = "sensors"; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); // Backlight ON lcd.setCursor(0, 1); lcd.print(" Ardui'Home "); lcd.setCursor(0, 2); lcd.print(" Loading... "); sensors.begin(); sensors.setResolution(bathroom, 10); pinMode(pirPin, INPUT); //определить выходной контакт для датчика движения pinMode(analogInPin, INPUT); //определить выходной контакт для датчика газа Serial.begin(9600); if (gsm.begin(2400)) Serial.println("\nstatus=READY"); else Serial.println("\nstatus=IDLE"); (sms.SendSMS(number, "Starting ok !")); //sending sms when he starting up } void loop() { //swt++; // Alternate displaying betwen DS18 and DHT sensors //if ((swt % 15) > 5 ) sensors.requestTemperatures(); int tbathroom = sensors.getTempC(bathroom); // Bathroom sensor int sensorValue = analogRead(analogInPin); komnata = sensor.read(5); // нужно указать № вывода для DHT (сейчас 4pin) lcd.setCursor(0, 0); lcd.print("T1 "); lcd.print(tbathroom); lcd.setCursor(7, 0); lcd.print("G "); lcd.print(sensorValue); lcd.setCursor(0, 1); lcd.print((String)"T2 "+sensor.hum+"% "+sensor.tem+"C"); sensors.requestTemperatures(); //dtostrf(tbathroom, sizeof(buffer1)-1, 1, buffer1); switch (tbathroom) { case 27: sms.SendSMS(number, "Podval - High temp!"); break; case 21: sms.SendSMS(number, "Podval - Low temp!"); break; //default: // выполняется, если не выбрана ни одна альтернатива // default необязателен } motion = digitalRead(pirPin); //считываем состояние датчика движения switch (motion) { case HIGH: sms.SendSMS(number, "Motion!"); break; //default: // выполняется, если не выбрана ни одна альтернатива // default необязателен } switch (sensorValue) { case 300: sms.SendSMS(number, "GAZ - ALARM!"); break; case 400: sms.SendSMS(number, "GAZ - ALARM!!!!!"); break; //default: // выполняется, если не выбрана ни одна альтернатива // default необязателен } komnata = sensor.read(5); // нужно указать № вывода для DHT (сейчас 4pin) switch (komnata) { case 27: sms.SendSMS(number, "Room - High temp!!"); break; case 21: sms.SendSMS(number, "Room - Low temp!"); break; //default: // выполняется, если не выбрана ни одна альтернатива // default необязателен } }
-
Добавляйте по одному и выясните, для начала, в чём конкретно причина. Будет искать уже легче. Уже проделал. Причина судя по всему в перечне if и else if. Сейчас попытался заменить на Switch и Case но при достижении события указанного в case ардуина просто перезагружается не отправляя сообщение. Как бы корректно перечислить события чтобы они заработали корректно.
-
Проверить Код (Gsm Оповещение О Событиях)
DJ152 опубликовал тема в Arduino, ESP32, ESP8266, Raspberry Pi
Здравствуйте! Прошу помочь в таком вопросе: Есть рабочий код, который отправляет СМС при наступлении события от датчика температуры DS18B20. Но, когда добавил в него же ещё три датчика (DHT22, Датчик движения и Датчик газа MQ2) то код работать перестал и в мониторе порта видно, что ардуинка перестала находить GSM шилд. Тестирует все скорости подключения, затем пишет что шилд не доступен и переходит в idle. До подключения трёх дополнительных датчиков всё работало на ура. В чём может быть проблема? Подскажите пожалуйста, сам пока в начале изучения C++. Ну и может сразу в целом по коду какие замечания есть.. #include <SIM900.h> #include <sms.h> #include <OneWire.h> #include <Wire.h> #include <SoftwareSerial.h> #include <DallasTemperature.h> #include <LiquidCrystal_I2C.h> #include <DHT.h> DHT sensor; #define ONE_WIRE_BUS 3 // DS18S20 подключаем к 3 пину #define analogInPin A0 // Датчик Газа к А0 int pirPin = 7; // Контакт для подключения датчика движения к Arduino int motion = 0; // Переменная для хранения состояния датчика движения int komnata; LiquidCrystal_I2C lcd(0x27,20,4); // Liquide crystal is a 4x20 LCD with I2C support OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress podval = { 0x28, 0xFF, 0x32, 0x3D, 0x90, 0x15, 0x04, 0xC0 }; // Датчик в подвале unsigned int swt = 0; // flip for alternate the display btw temp and humidity SMSGSM sms; char number[]="+791ХХХХХХХХ"; // Номера телефона получателей char message[180]; char pos; char *p; char buffer1[] = "sensors"; int i; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); // Backlight ON lcd.setCursor(0, 0); lcd.print("Home"); lcd.setCursor(0, 1); lcd.print("Loading..."); sensors.begin(); sensors.setResolution(podval, 10); pinMode(analogInPin, INPUT); //определить выходной контакт для датчика газа pinMode(pirPin, INPUT); //определить выходной контакт для датчика движения Serial.begin(9600); if (gsm.begin(2400)) Serial.println("\nstatus=READY"); else Serial.println("\nstatus=IDLE"); (sms.SendSMS(number, "Starting ok !")); //Отправляем СМС при запуске системы } void loop() { lcds(); //Отображение данных на мониторе temps(); // Расчёт и отправка данных по СМС } void lcds() { swt++; // Alternate displaying betwen DS18 and DHT sensors if ((swt % 15) > 5 ) sensors.requestTemperatures(); float tpodval = sensors.getTempC(podval); // Датчик температуры в подвале int sensorValue = analogRead(analogInPin); lcd.setCursor(0, 0); lcd.print("T1 "); lcd.print(tpodval); lcd.setCursor(7, 0); lcd.print("G "); lcd.print(sensorValue); lcd.setCursor(0, 1); lcd.print((String)"T2 "+sensor.hum+"% "+sensor.tem+"C"); delay(1000); } void temps() { sensors.requestTemperatures(); float tpodval = sensors.getTempC(podval); // Датчик температуры в подвале dtostrf(tpodval, sizeof(buffer1)-1, 1, buffer1); Serial.println(analogRead(analogInPin)); int sensorValue = analogRead(analogInPin); motion = digitalRead(pirPin); //считываем состояние датчика движения komnata = sensor.read(4); // нужно указать № вывода для DHT (сейчас 4pin) if (tpodval < 3) { sms.SendSMS(number, "Podval - Low temp!"); Serial.println("\nSMS sent OK"); } else if (komnata < 25) { sms.SendSMS(number,"Room - Low temp!"); Serial.println("\nSMS sent OK"); } else if (sensorValue >= 400) { sms.SendSMS(number,"GAZ - ALARM!"); Serial.println("\nSMS sent OK"); } else if (motion == HIGH) { sms.SendSMS(number,"Motion"); Serial.println("\nSMS sent OK"); } delay(1000); }