Перейти к содержанию

DJ152

Members
  • Постов

    7
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Yekaterinburg

Электроника

  • Стаж в электронике
    Менее года

Достижения DJ152

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. В общем доработал код, сейчас отправка по событиям идёт, но при попытке добавить монитор и вывод показаний на него код работать перестаёт. т.е показания выводит на монитор, но при сработке события экран перезагружается (видимо из-за delay после события) и смс не отправляется. Причина только в мониторе. Работает по I2C.
  2. сломал всю голову убрал вообще всё лишнее из кода, оставил пока только вывод на экран всех датчиков и условие сработки для DS18. До сработки всё нормально, показывает на экране все датчики. Как только доходит до условия, идёт перезагрузка контроллера
  3. Шилд TinySine GSM вставлен бутербродом. Самое интересное что до добавления последующих датчиков и условий сработки с одним температурным далласом отлично работал и отправлял по условию смс. С последним кодом почему то идёт перезагрузка всего контроллера при наступлении события..т.е. провода и пин подключения не менял.
  4. Хорошо. В первом варианте работало до момента добавления первого else if. else if (komnata < 25). После этого шилд не откликается. при замене всех else if на простые if шилд находит, но регулярно перезагружается доходя до цикла loop.
  5. Код второго варианта, с 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 необязателен } }
  6. Добавляйте по одному и выясните, для начала, в чём конкретно причина. Будет искать уже легче. Уже проделал. Причина судя по всему в перечне if и else if. Сейчас попытался заменить на Switch и Case но при достижении события указанного в case ардуина просто перезагружается не отправляя сообщение. Как бы корректно перечислить события чтобы они заработали корректно.
  7. Здравствуйте! Прошу помочь в таком вопросе: Есть рабочий код, который отправляет СМС при наступлении события от датчика температуры 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); }
×
×
  • Создать...