Не включается реле

BigProblem
Offline
Зарегистрирован: 13.12.2018

Здравствуете, говорю сразу, я в ардуино 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);

}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча. 

b707
Offline
Зарегистрирован: 26.05.2017

BigProblem - outPin наверно, в исходном скетче был, а outPin1 outPin2 небось сами добавляли? - забыли описать эти пины как выход в Сетапе, вот и не работает.

BigProblem
Offline
Зарегистрирован: 13.12.2018

DetSimen пишет:

Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча. 

если бы было все просто так, я бы не содавал тем, автор болт положил 

BigProblem
Offline
Зарегистрирован: 13.12.2018

b707 пишет:

BigProblem - outPin наверно, в исходном скетче был, а outPin1 outPin2 небось сами добавляли? - забыли описать эти пины как выход в Сетапе, вот и не работает.

на выходе все вроде добавлено

b707
Offline
Зарегистрирован: 26.05.2017

BigProblem пишет:

на выходе все вроде добавлено

ну как знаете.

Номер строки, где у вас "вроде бы добавлено" - можете указать?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

BigProblem пишет:

на выходе все вроде добавлено

ну как знаете.

Номер строки, где у вас "вроде бы добавлено" - можете указать?

414 с половиной )))
Автор не указал на какой ардуине испытывает

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

Автор не указал на какой ардуине испытывает

да какая разница... ни на какой работать не будет

SLKH
Offline
Зарегистрирован: 17.08.2015

b707 пишет:

BigProblem - outPin наверно, в исходном скетче был, а outPin1 outPin2 небось сами добавляли? - забыли описать эти пины как выход в Сетапе, вот и не работает.

и если прописать - всё равно работать не будет.

BigProblem
Offline
Зарегистрирован: 13.12.2018

b707 пишет:

BigProblem пишет:

на выходе все вроде добавлено

ну как знаете.

Номер строки, где у вас "вроде бы добавлено" - можете указать?

про это имеете ввиду ?

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);

 

BigProblem
Offline
Зарегистрирован: 13.12.2018

ua6em пишет:

b707 пишет:

BigProblem пишет:

на выходе все вроде добавлено

ну как знаете.

Номер строки, где у вас "вроде бы добавлено" - можете указать?

414 с половиной )))
Автор не указал на какой ардуине испытывает

arduino uno

BigProblem
Offline
Зарегистрирован: 13.12.2018

ребята, я тему создал не ради стеба, а ради помощи, я понимаю у вас достаточное кол. опыта, что бы поржать над любой фразой, которая для вас явл. по вашим меркам мелочной и любая неопытная жертва для вас как никтар сред белого дня, неужели так трудно спросить нужную информацию? подождать ответа, если человек ошибся попробывать его подправить место того что подстебнуть.

Если нужна какая то информация, спрашиваете, по мере возможности отвечу

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BigProblem, в соответствии с традициями форума, помощь в этом разделе Вы можете получить только в случае, если захотите самостоятельно разобраться с Ардуино.

Если Вас интересует работоспособный скетч, но сами Вы в этом разбираться не хотите, для этого есть другой раздел - "Ищу исполнителя".

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

BigProblem. Попробую объяснить по аналогии. Народ захотел построить дом ну к примеру в 15 этажей. Экономия земли и прочего. Разумеется проект дома делал специалист по 3-х этажным домам. Ну поставить 5 раз по 3 и готово. А вот и нет . Получилась недостроеная пизанская башня. Вот и ваш скетч такой же. Поэтому и автор бросил его.

b707
Offline
Зарегистрирован: 26.05.2017

BigProblem пишет:

ребята, я тему создал не ради стеба, а ради помощи

я вам четко сказал, что у вас выходы на реле не сконфигурированы. Возможно, это не единственная ошибка, но и ее достаточно, чтобы ничего не работало. Вместо того чтоб посмотреть в справочнике, как правильно конфигурить пины и исправить - вы сначала начинаете спорить, что у вас все нормально, а потом писать, как вам не нравится форум.

 

bwn
Offline
Зарегистрирован: 25.08.2014

BigProblem пишет:

DetSimen пишет:

Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча. 

если бы было все просто так, я бы не содавал тем, автор болт положил 

Вы, лучше скажите, откуда его выкопали. До боли знакомые сырцы.

BigProblem
Offline
Зарегистрирован: 13.12.2018

bwn пишет:

BigProblem пишет:

DetSimen пишет:

Если ты 0 и решил просто передрать проект, то первым делом, всегда надо спрашивать у автора скетча. 

если бы было все просто так, я бы не содавал тем, автор болт положил 

Вы, лучше скажите, откуда его выкопали. До боли знакомые сырцы.

https://www.youtube.com/watch?v=RYVgnHd8gpY