1

Тема: Погодная станция + часы + будильник

http://forum.rcl-radio.ru/uploads/images/2020/07/ac62c3c8153f21f9e26b117faa657f27.png

http://forum.rcl-radio.ru/uploads/images/2020/07/c14fc968bb9413557e92d33f9e4252ea.gif
Данный контент доступен только зарегистрированным пользователям.


#include <Wire.h> 
#include <SPI.h>
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
#include <Thinary_AHT10.h> // http://rcl-radio.ru/wp-content/uploads/2020/07/AHT10-master.zip
#include <Adafruit_BMP280.h> // http://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_BMP280.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <DallasTemperature.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
#include <EEPROM.h> 

#define IND 5000 // время смены показаний датчиков
      
      LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
      DS3231 clock;RTCDateTime DateTime;AHT10Class AHT10;
      Adafruit_BMP280 bmp(10);
      OneWire oneWire(A0);// вход датчика 18b20
      DallasTemperature temp(&oneWire);
          
      byte v1[8] = {7,7,7,7,7,7,7,7};
      byte v2[8] = {7,7,0, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 28, 28, 0, 0, 0, 0, 28, 28};//
      byte v6[8] = {28,28,28,28,28,28,28,28};
      byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
      byte v8[8] = { 31, 31,0,0,0,0,0, 0};
      int a[6],hour,minut,secon,h_alarm,m_alarm,memory,alarm,yar,mount,date;
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      float temp_hous,h,p,k;
      unsigned long times,times1;
      
   void setup(){ 
    Wire.begin();AHT10.begin();lcd.init();clock.begin();bmp.begin();temp.begin();temp.setResolution(10); 
    ///clock.setDateTime(__DATE__, __TIME__);
    lcd.backlight();// Включаем подсветку дисплея
    lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
    pinMode(2,INPUT_PULLUP);   // УСТ. ВРЕМЯ
    pinMode(7,INPUT_PULLUP);   // УСТ. ДАТА-МЕСЯЦ-ГОД
    pinMode(3,INPUT_PULLUP);   // ЧАСЫ / ДАТА
    pinMode(4,INPUT_PULLUP);   // МИНУТЫ / МЕСЯЦ
    pinMode(5,INPUT_PULLUP);   // ОБНУЕНИЕ СЕКУНД / ГОД / УСТ. БУДИЛЬНИКА
    pinMode(6,OUTPUT); // ZZZZZZzzzzzz.....
    h_alarm = EEPROM.read(11);m_alarm = EEPROM.read(12);alarm = EEPROM.read(13);
   }
   
   void loop(){
    if(millis()-times>10000){temp_hous = AHT10.GetTemperature();h = AHT10.GetHumidity(); 
    p = bmp.readPressure()/133.3224;temp.requestTemperatures(); k = temp.getTempCByIndex(0);times = millis();} // ОПРОС ДАТЧИКОВ КАЖДЫЕ 10 СЕК
    if(digitalRead(2)==LOW||digitalRead(3)==LOW||digitalRead(4)==LOW||digitalRead(5)==LOW||digitalRead(7)==LOW){times1=millis();}
  
    
    DateTime=clock.getDateTime();  
    yar = DateTime.year; mount = DateTime.month;date = DateTime.day;hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
    memory = DateTime.hour * 100 + DateTime.minute;
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
     a[4]=DateTime.second/10;
     a[5]=DateTime.second%10;

  if(digitalRead(2)==LOW&&digitalRead(3)==LOW){hour++;if(hour>23){hour=0;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100);}
  if(digitalRead(2)==LOW&&digitalRead(4)==LOW){minut++;if(minut>59){minut=0;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
  
  if(digitalRead(7)==LOW&&digitalRead(3)==LOW){date++;if(date>31){date=1;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100);}
  if(digitalRead(7)==LOW&&digitalRead(4)==LOW){mount++;if(mount>12){mount=1;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
  if(digitalRead(7)==LOW&&digitalRead(5)==LOW){yar++;if(yar>2050){yar=2015;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
  
  if(digitalRead(2)==LOW&&digitalRead(5)==LOW){secon=0; clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
    
 for(i=0;i<6;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=3,e2=4,e3=5;break;
        case 2: e1=7,e2=8,e3=9;break;
        case 3: e1=10,e2=11,e3=12;break;
        case 4: e1=14,e2=15,e3=16;break;
        case 5: e1=17,e2=18,e3=19;break;
        }
      switch(a[i]){
        case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;
        case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
        case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;
        case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
        case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
        case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
        case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
        case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
        case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
        case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
    }
     
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);
   
 }
   lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(13,0);lcd.print(".");lcd.setCursor(6,1);lcd.print(".");lcd.setCursor(13,1);lcd.print(".");
   
   if(digitalRead(2)==LOW){lcd.setCursor(0,2);lcd.print(" TIME SET  HH:MM:SS ");}
   else if(digitalRead(7)==LOW){lcd.setCursor(0,2);lcd.print(" TIME SET  DD-MM-YY ");}
   else if(digitalRead(2)==HIGH&&digitalRead(7)==HIGH&&digitalRead(5)==LOW){
    if(digitalRead(3)==LOW){h_alarm++; if(h_alarm>23){h_alarm=0;}delay(100);EEPROM.update(11, h_alarm);}
    if(digitalRead(4)==LOW){m_alarm++; if(m_alarm>59){m_alarm=0;}delay(100);EEPROM.update(12, m_alarm);}
    lcd.setCursor(0,2);lcd.print("ALARM CLOCK--");lcd.print(h_alarm/10);lcd.print(h_alarm%10);lcd.print(":");lcd.print(m_alarm/10);lcd.print(m_alarm%10);}
   
   else{lcd.setCursor(0,2);
   if(alarm==0){lcd.print("------ALARM OFF-----");}
   if(alarm==1){lcd.print("------ALARM ON------");}
   }

//////////// ZZZZZZZZZzzzzzzzz...... ///////////////////////
   if(digitalRead(3)==LOW&&digitalRead(2)==HIGH&&digitalRead(5)==HIGH&&digitalRead(7)==HIGH){alarm=1;delay(300);EEPROM.update(13, alarm);}
   if(digitalRead(4)==LOW&&digitalRead(2)==HIGH&&digitalRead(5)==HIGH&&digitalRead(7)==HIGH){alarm=0;delay(300);EEPROM.update(13, alarm);}
   if(h_alarm*100+m_alarm==memory&&alarm==1){tone(6,1500,150);}
    
   
   
   if(millis()-times1<IND){
   lcd.setCursor(1,3);lcd.print(DateTime.day/10);lcd.print(DateTime.day%10);lcd.print("-");
   lcd.print(DateTime.month/10);lcd.print(DateTime.month%10);lcd.print("-");lcd.print(DateTime.year);
   lcd.print("  ");lcd.print(temp_hous,1);lcd.print((char)223);lcd.print("C ");}
   
   if(millis()-times1>IND){
   lcd.setCursor(1,3);lcd.print(h,1);lcd.print("% "); lcd.print(p,1);lcd.print(" ");lcd.print(k,1);lcd.print((char)223);lcd.print("C ");
   }
   if(millis()-times1>IND*2){times1=millis();}
   
   }
   

Re: Погодная станция + часы + будильник

вопрос как убрать косяк   после установки всего  время  все работает а через некоторое время переключается на установку времени и все и не выходит с него

3

Re: Погодная станция + часы + будильник

Скорее всего происходит зависание контроллера, проверьте провода sda scl, они должны быть минимально возможной длины. Возможно помехи по питанию, рекомендуется по питанию к каждому уст-ву ставить конденсаторы 0,1 мкФ.

Re: Погодная станция + часы + будильник

по питанию  стоят емкости раньше без кнопок просто прошитый такова не было
пока кнопки не поставил  кнопки подтянул к 5 вольтам на всякий случий

5

Re: Погодная станция + часы + будильник

Здравствуйте.Как прописать вывод дня дня недели ?