Не включается реле
- Войдите на сайт для отправки комментариев
Чт, 13/12/2018 - 13:24
Здравствуете, говорю сразу, я в ардуино 0, нуждаюсь в помощи решения проблемы в скече
выставляю в меню значения вкл реле по повышению влажности или же температуры, но достигая значений реле не вкл( помогите пожалуйста 4 дня не могу решить проблему.
#include <Wire.h> #include <EEPROM.h> #include <LiquidCrystal.h> #include "DHT.h" #define DHTPIN 13 DHT dht(DHTPIN, DHT11); float temperature; float humidity; int old_val = 0 ; #define DS1307_I2C_ADDRESS 0x68 #define ALTITUDE 21.0 // Altitude in Sparta, Russia LiquidCrystal lcd(8, 9, 4, 5, 6, 7); const byte outPin = 1; // выход на реле const byte outPin1 = 2 ; // выход на реле по управлению влажностью ( вентиляция ) const byte outPin2 = 3 ;// выход управляющий по контролю за температурой ( обогреватель ) byte setMinClockOn; // переменные для хранения минут срабатывания по таймеру byte setHorClockOn;// переменные для хранения значения часов срабатывания по таймеру byte setMinClockOff; // то же самое только значение времени отключения ( минут ) byte setHorClockOff;// -//- ( часов ) byte setH_ON ; // переменная для контроля за влажностью byte setH_OFF ; // переменная для хранения внешнего значения влажности ( вне дома ) (датчик предполагается вынести на улицу) byte setT_ON ; // переменная для хранения температуры которую нужно поддерживать ( нижний порог ) byte setT_OFF ; // переменная для хранения верхнего порога температуры при достижения которой нужно отключить нагревательную систему byte key(){ //// для кнопок ЛСДшилда int val = analogRead(0); if (val < 50) return 5; else if (val < 150) return 3; else if (val < 350) return 4; else if (val < 500) return 2; else if (val < 800) return 1; else return 0; } /////////// часы .. byte decToBcd(byte val){ return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) ); } void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } //// void setClock(){ // установка часов byte pos = 1; byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); lcd.clear(); lcd.blink(); while(key() != 1){ // крутим цикл byte KEY = key(); // читаем состояние кнопок delay(200); lcd.setCursor(1, 1); lcd.print("set to save"); lcd.setCursor(0, 0); // выводим инфу if (hour < 10) lcd.print("0"); lcd.print(hour); lcd.print(":"); if (minute < 10) lcd.print("0"); lcd.print(minute); lcd.print(" "); if (dayOfMonth < 10) lcd.print("0"); lcd.print(dayOfMonth); lcd.print("/"); if (month < 10) lcd.print("0"); lcd.print(month); lcd.print("/"); if (year < 10) lcd.print("0"); lcd.print(year); lcd.setCursor(pos, 0); // устанавливаем курсор согласно позиции if (KEY == 5 && pos < 13) pos += 3; // крутим позицию else if (KEY == 2 && pos > 1) pos -= 3; else if (pos == 1 && KEY == 3) hour++; // крутим значения else if (pos == 1 && KEY == 4) hour--; else if (pos == 4 && KEY == 3) minute++; else if (pos == 4 && KEY == 4) minute--; else if (pos == 7 && KEY == 3) dayOfMonth++; else if (pos == 7 && KEY == 4) dayOfMonth--; else if (pos == 10 && KEY == 3) month++; else if (pos == 10 && KEY == 4) month--; else if (pos == 13 && KEY == 3) year++; else if (pos == 13 && KEY == 4) year--; if (hour > 23) hour = 0;// защита от переполнения часов else if (minute > 59) minute = 0;// защита от переполнения минут else if (dayOfMonth > 31) dayOfMonth = 0;// защита от переполнения переменной - день месяца else if (month > 12) month = 1;// предел значания день месяца else if (year > 99) year = 0; }// конец цикла setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // установить дату в память часов lcd.noBlink(); lcd.clear(); lcd.print(" Saved"); delay(1500); }/// void setOnOff(){ byte pos = 0; lcd.clear(); lcd.blink(); while(key() != 1){ // крутим цикл byte KEY = key(); // читаем состояние кнопок delay(200); lcd.setCursor(1, 1); lcd.print("set to save"); lcd.setCursor(0, 0); // выводим инфу if (setHorClockOn < 10) lcd.print("0"); lcd.print(setHorClockOn); lcd.print(":"); if (setMinClockOn < 10) lcd.print("0"); lcd.print(setMinClockOn); lcd.print(" "); if (setHorClockOff < 10) lcd.print("0"); lcd.print(setHorClockOff); lcd.print(":"); if (setMinClockOff < 10) lcd.print("0"); lcd.print(setMinClockOff); lcd.setCursor(pos, 0); // устанавливаем курсор согласно позиции if (KEY == 5 && pos < 9) pos += 3; // крутим позицию else if (KEY == 2 && pos > 1) pos -= 3; else if (pos == 0 && KEY == 3) setHorClockOn++; // крутим значения else if (pos == 0 && KEY == 4) setHorClockOn--; else if (pos == 3 && KEY == 3) setMinClockOn++; else if (pos == 3 && KEY == 4) setMinClockOn--; else if (pos == 6 && KEY == 3) setHorClockOff++; else if (pos == 6 && KEY == 4) setHorClockOff--; else if (pos == 9 && KEY == 3) setMinClockOff++; else if (pos == 9 && KEY == 4) setMinClockOff--; if (setHorClockOn > 23) setHorClockOn = 0;// устанавливаем предел переполнения переменных else if (setMinClockOn > 59) setMinClockOn = 0;// минуты больше 59 не переполнятся так как в часе 60 минут else if (setHorClockOff > 23) setHorClockOff = 0;// а часы больше 23 не переполнятся ))) else if (setMinClockOff > 59) setMinClockOff = 0; } // конец цикла lcd.noBlink(); lcd.clear(); EEPROM.write(0, setMinClockOn); EEPROM.write(1, setHorClockOn); EEPROM.write(3, setMinClockOff); EEPROM.write(4, setHorClockOff); lcd.print(" Saved"); delay(1500); } // обработчик установки контроля за температураой void setT_ONOFF () { byte pos = 0; lcd.clear(); lcd.blink(); while(key() != 1){ // крутим цикл byte KEY = key(); // читаем состояние кнопок delay(200); lcd.setCursor(1, 1); lcd.print("set to save"); lcd.setCursor(0, 0); // выводим инфу if (setT_ON < 10) lcd.print("0"); lcd.print( "ON:"); lcd.print(setT_ON); lcd.print( " OFF:"); if (setT_OFF < 10) lcd.print("0"); lcd.print(setT_OFF); lcd.setCursor(pos+1, 0); // устанавливаем курсор согласно позиции if (KEY == 5 && pos < 9) pos += 3; // крутим позицию else if (KEY == 2 && pos > 1) pos -= 3; else if (pos == 0 && KEY == 3) setT_ON++; // крутим значения else if (pos == 0 && KEY == 4) setT_ON--; else if (pos == 6 && KEY == 3) setT_OFF++; else if (pos == 6 && KEY == 4) setT_OFF--; if (setT_ON > 100) setT_ON = 0;// устанавливаем предел переполнения переменных else if (setT_OFF > 100) setT_OFF = 0;// минуты больше 59 не переполнятся так как в часе 60 минут } // конец цикла lcd.noBlink(); lcd.clear(); EEPROM.write(5, setT_ON);// записываем в память епром значение температуры EEPROM.write(6, setT_OFF);// записываем в память епром значение температуры lcd.print(" Saved"); delay(1500); } // обработчик установки контроля за влажностью void setH_ONOFF() { byte pos = 0; lcd.clear(); lcd.blink(); while(key() != 1){ // крутим цикл byte KEY = key(); // читаем состояние кнопок delay(200); lcd.setCursor(1, 1); lcd.print("set to save"); lcd.setCursor(0, 0); // выводим инфу if (setH_ON < 10) lcd.print("0"); lcd.print( "ON:"); lcd.print(setH_ON); lcd.print( " OFF:"); if (setH_OFF < 10) lcd.print("0"); lcd.print(setH_OFF); lcd.setCursor(pos+1, 0); // устанавливаем курсор согласно позиции if (KEY == 5 && pos < 9) pos += 3; // крутим позицию else if (KEY == 2 && pos > 1) pos -= 3; else if (pos == 0 && KEY == 3) setH_ON++; // крутим значения else if (pos == 0 && KEY == 4) setH_ON--; else if (pos == 6 && KEY == 3) setH_OFF++; else if (pos == 6 && KEY == 4) setH_OFF--; if (setH_ON > 100) setH_ON = 0;// устанавливаем предел переполнения переменных else if (setH_OFF > 100) setH_OFF = 0;// минуты больше 59 не переполнятся так как в часе 60 минут } // конец цикла lcd.noBlink(); lcd.clear(); EEPROM.write(7, setH_ON);// записываем в память епром значение температуры EEPROM.write(8, setH_OFF);// записываем в память епром значение температуры lcd.print(" Saved"); delay(1500); } ///далее идет обработчик меню void menu(){ lcd.clear(); char menuTxt[5][14] = {"set ON/OFF >>","set clock >>","set T_ON/OF>>","set H_On/OF>>"};// массив - пять строк на 14 символов byte pos = 0; while(1){ delay(200); byte KEY = key(); lcd.setCursor(0, 0); lcd.print(pos+1); lcd.print("."); lcd.print(menuTxt[pos]); if (KEY == 3 && pos != 0) pos--; else if (KEY == 4 && pos < 4) pos++;// тут мы устанавливае защиту от переполнения меню, т.е. сколько строк мы вызовем из массива указанного выше menuTxt[5][14] - пять строк на 14 символов if (KEY == 5 && pos == 0) setOnOff(); else if (KEY == 5 && pos == 1) setClock(); else if (KEY == 5 && pos == 2) setT_ONOFF(); else if (KEY == 5 && pos == 3) setH_ONOFF(); } } void skroll() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if (setMinClockOff == minute && setHorClockOff == hour && second == 0) digitalWrite(outPin, LOW); if (setMinClockOn == minute && setHorClockOn == hour && second == 0) digitalWrite(outPin, HIGH); if(setT_OFF <= temperature) digitalWrite(outPin1,LOW); if(setT_ON >= temperature) digitalWrite(outPin1,HIGH); if(setH_OFF >= humidity) digitalWrite(outPin2,LOW); if(setH_ON <= humidity) digitalWrite(outPin2,HIGH); delay(50); getHumidity(); getTemperature(); lcd.clear(); //Printing Temperature String temperatureString = String(temperature,1); lcd.print("T:"); lcd.print(temperatureString); lcd.print((char)223); lcd.print("C "); //Printing Humidity String humidityString = String(humidity,0); lcd.print("H: "); lcd.print(humidityString); lcd.print("%"); //Printing Pressure } float getTemperature() { temperature = dht.readTemperature(); } float getHumidity() { humidity = dht.readHumidity(); } float getPressure() { }void kroll(){ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); lcd.clear(); lcd.setCursor(0, 0); if (hour < 10) lcd.print("0"); lcd.print(hour); lcd.print(":"); if (minute < 10) lcd.print("0"); lcd.print(minute); // lcd.print(":"); // if (second < 10) lcd.print("0"); // lcd.print(second); // lcd.setCursor(8, 0); // lcd.print(" "); lcd.setCursor(0, 1); if (dayOfMonth < 10) lcd.print("0"); lcd.print(dayOfMonth); lcd.print("/"); if (month < 10) lcd.print("0"); lcd.print(month); lcd.print("/"); if (year < 10) lcd.print("0"); lcd.print(year); // lcd.setCursor(11, 0); if (setHorClockOn < 10) lcd.print("0"); lcd.print(setHorClockOn); lcd.print(":"); if (setMinClockOn < 10) lcd.print("0"); lcd.print(setMinClockOn); lcd.setCursor(11, 1); if (setHorClockOff < 10) lcd.print("0"); lcd.print(setHorClockOff); lcd.print(":"); if (setMinClockOff < 10) lcd.print("0"); lcd.print(setMinClockOff); lcd.setCursor(7, 0); if (digitalRead(outPin)) lcd.print("ON "); else lcd.print("Off"); delay(200); // нужно для нармальной работы кнопок } void setup(){ Wire.begin(); lcd.begin(16, 2); lcd.clear(); pinMode(outPin, OUTPUT); digitalWrite(outPin, LOW); analogWrite(10,255); setMinClockOn = EEPROM.read(0); setHorClockOn = EEPROM.read(1); setMinClockOff = EEPROM.read(3); setHorClockOff = EEPROM.read(4); setT_ON = EEPROM.read(5); setT_OFF = EEPROM.read(6); setH_ON = EEPROM.read(7); setH_OFF = EEPROM.read(8); bool status; // default settings dht.begin(); //Считываем влажность float h = dht.readHumidity(); // Считываем температуру float t = dht.readTemperature(); }void loop() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); int8_t val = 0; // переменная для состояния дисплея ( отображаемые данные ) int i = 0; // обработка кнопок if (key() == 1) menu(); // если нажата селект else if (key() == 3) digitalWrite(outPin, HIGH); else if (key() == 4) digitalWrite(outPin, LOW); else if (key() == 5){ i= 1-i; if (i== 1) {kroll();} else {kroll();} } skroll(); if (setMinClockOff == minute && setHorClockOff == hour && second == 0) digitalWrite(outPin, LOW); if (setMinClockOn == minute && setHorClockOn == hour && second == 0) digitalWrite(outPin, HIGH); if(setT_OFF <= temperature) digitalWrite(outPin1,LOW); if(setT_ON >= temperature) digitalWrite(outPin1,HIGH); if(setH_OFF >= humidity) digitalWrite(outPin2,LOW); if(setH_ON <= humidity) digitalWrite(outPin2,HIGH); }
Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча.
BigProblem - outPin наверно, в исходном скетче был, а outPin1 outPin2 небось сами добавляли? - забыли описать эти пины как выход в Сетапе, вот и не работает.
Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча.
если бы было все просто так, я бы не содавал тем, автор болт положил
BigProblem - outPin наверно, в исходном скетче был, а outPin1 outPin2 небось сами добавляли? - забыли описать эти пины как выход в Сетапе, вот и не работает.
на выходе все вроде добавлено
на выходе все вроде добавлено
ну как знаете.
Номер строки, где у вас "вроде бы добавлено" - можете указать?
на выходе все вроде добавлено
ну как знаете.
Номер строки, где у вас "вроде бы добавлено" - можете указать?
414 с половиной )))
Автор не указал на какой ардуине испытывает
Автор не указал на какой ардуине испытывает
да какая разница... ни на какой работать не будет
BigProblem - outPin наверно, в исходном скетче был, а outPin1 outPin2 небось сами добавляли? - забыли описать эти пины как выход в Сетапе, вот и не работает.
на выходе все вроде добавлено
ну как знаете.
Номер строки, где у вас "вроде бы добавлено" - можете указать?
про это имеете ввиду ?
338
if
(setT_OFF <= temperature) digitalWrite(outPin1,LOW);
339
if
(setT_ON >= temperature) digitalWrite(outPin1,HIGH);
340
if
(setH_OFF >= humidity) digitalWrite(outPin2,LOW);
341
if
(setH_ON <= humidity) digitalWrite(outPin2,HIGH);
на выходе все вроде добавлено
ну как знаете.
Номер строки, где у вас "вроде бы добавлено" - можете указать?
414 с половиной )))
Автор не указал на какой ардуине испытывает
arduino uno
ребята, я тему создал не ради стеба, а ради помощи, я понимаю у вас достаточное кол. опыта, что бы поржать над любой фразой, которая для вас явл. по вашим меркам мелочной и любая неопытная жертва для вас как никтар сред белого дня, неужели так трудно спросить нужную информацию? подождать ответа, если человек ошибся попробывать его подправить место того что подстебнуть.
Если нужна какая то информация, спрашиваете, по мере возможности отвечу
BigProblem, в соответствии с традициями форума, помощь в этом разделе Вы можете получить только в случае, если захотите самостоятельно разобраться с Ардуино.
Если Вас интересует работоспособный скетч, но сами Вы в этом разбираться не хотите, для этого есть другой раздел - "Ищу исполнителя".
BigProblem. Попробую объяснить по аналогии. Народ захотел построить дом ну к примеру в 15 этажей. Экономия земли и прочего. Разумеется проект дома делал специалист по 3-х этажным домам. Ну поставить 5 раз по 3 и готово. А вот и нет . Получилась недостроеная пизанская башня. Вот и ваш скетч такой же. Поэтому и автор бросил его.
ребята, я тему создал не ради стеба, а ради помощи
я вам четко сказал, что у вас выходы на реле не сконфигурированы. Возможно, это не единственная ошибка, но и ее достаточно, чтобы ничего не работало. Вместо того чтоб посмотреть в справочнике, как правильно конфигурить пины и исправить - вы сначала начинаете спорить, что у вас все нормально, а потом писать, как вам не нравится форум.
Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча.
если бы было все просто так, я бы не содавал тем, автор болт положил
Вы, лучше скажите, откуда его выкопали. До боли знакомые сырцы.
Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча.
если бы было все просто так, я бы не содавал тем, автор болт положил
Вы, лучше скажите, откуда его выкопали. До боли знакомые сырцы.
https://www.youtube.com/watch?v=RYVgnHd8gpY