1

Тема: Часы с будильником 1602

Основная статья - http://rcl-radio.ru/?p=66530

Просто часы

http://forum.rcl-radio.ru/uploads/images/2019/09/fe7018e4292f50e713beecae7cf39dfd.png


 #include <Wire.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
      DS3231 clock;RTCDateTime DateTime;
      LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v2[8] = {31,31,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v6[8] = { 0, 0,14,31,31,14, 0, 0}; //*
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
      byte v8[8] = { 0, 4,14,14,14,31, 4, 0};// alarm
      int a[4],time,sek_old;
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      
   void setup(){ Wire.begin(); clock.begin(); 
    //clock.setDateTime(__DATE__, __TIME__);
    lcd.init();lcd.backlight();// Включаем подсветку дисплея
    //lcd.noBacklight();// Выключаем подсветку дисплея
      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);
   }
   
   void loop(){
    DateTime=clock.getDateTime();  
    time = DateTime.hour*100+DateTime.minute;
     a[0]=time/1000;
     a[1]=time/100%10;
     a[2]=time/10%10;
     a[3]=time%10%10;
     sek_old=DateTime.second;
    
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=4,e2=5,e3=6;break;
        case 2: e1=9,e2=10,e3=11;break;
        case 3: e1=13,e2=14,e3=15;break;}
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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);
   
 }
   if(digitalRead(13) == HIGH){lcd.setCursor(7,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(7,0);lcd.write((uint8_t)5);}
   lcd.setCursor(8,0);lcd.write((uint8_t)8);
   lcd.setCursor(7,1);if(DateTime.second<10){lcd.print("0");}lcd.print(DateTime.second);

//tone(5,1200,500);  
   }
   

Часы с будильником

  #include <Wire.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 <EEPROM.h> 
      DS3231 clock;RTCDateTime DateTime;
      LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v2[8] = {31,31,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v6[8] = { 0, 0,14,31,31,14, 0, 0}; //*
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
      byte v8[8] = { 0, 4,14,14,14,31, 4, 0};// alarm
      int a[4],time,k,reg,m,h,w,i0,led,ton,w1;
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      unsigned long eeprom;
      byte rom0,rom1,rom2;
      
   void setup(){ Wire.begin(); clock.begin(); 
     pinMode(2,INPUT);pinMode(3,INPUT);pinMode(4,INPUT);pinMode(5,INPUT); // кнопки
     pinMode(13,INPUT); // ds3231 SQW
    //clock.setDateTime(__DATE__, __TIME__);
    lcd.init();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);
  rom0 = EEPROM.read(0);if(rom0>59){EEPROM.update(0,0);}
  rom1 = EEPROM.read(1);if(rom1>23){EEPROM.update(1,0);}
  rom2 = EEPROM.read(2);if(rom2>3){EEPROM.update(2,0);}
  m=rom0;h=rom1;w=rom2;
   }
   
   void loop(){   if(digitalRead(5)==HIGH&&led==0&&w1==0){led=1;lcd.noBacklight();delay(500);}
                  if(digitalRead(5)==HIGH&&led==1&&w1==0){led=0;lcd.backlight();delay(500);}
                  
   
                i0++;if(i0>4){i0=0;}
     if(digitalRead(2)==HIGH){k++;reg=1;lcd.clear();delay(300);}if(k>3){k=0;reg=0;}
      if(reg==1) {
          if(k==1){
              if(digitalRead(3)==HIGH){m++;}if(m>59){m=0;}
              if(digitalRead(4)==HIGH){m--;}if(m<0){m=0;}}
          if(k==2){
              if(digitalRead(3)==HIGH){h++;}if(h>23){h=0;}
              if(digitalRead(4)==HIGH){h--;}if(h<0){h=0;}}
          if(k==3){
              if(digitalRead(3)==HIGH){w++;delay(300);}if(w>3){w=0;}
              if(digitalRead(4)==HIGH){w--;delay(300);}if(w<0){w=3;}
 }
  lcd.setCursor(0,0);lcd.print("Alarm ");
 if(i0==1&&k==2){lcd.print("  ");}else{if(h < 10 ){lcd.print("0");}lcd.print(h);} lcd.print(":");
 if(i0==1&&k==1){lcd.print("  ");}else{if(m < 10 ){lcd.print("0");}lcd.print(m);} 
  lcd.setCursor(0,1);
 if(i0==1&&k==3){lcd.print("                 ");}
 if(w==0){lcd.print("every day");}  //каждый день 1234567
 if(w==1){lcd.print("on weekdays");}//по будням 12345
 if(w==2){lcd.print("on weekends");}//по выходным 67
 if(w==3){lcd.print("off");}
 rom0=m;rom1=h;rom2=w;
 eeprom=0;
 } 

 if(reg==0){  if(eeprom==1){EEPROM.update(0,rom0);EEPROM.update(1,rom1);EEPROM.update(2,rom2);}
    DateTime=clock.getDateTime();  
    time = DateTime.hour*100+DateTime.minute;
     a[0]=time/1000;
     a[1]=time/100%10;
     a[2]=time/10%10;
     a[3]=time%10%10;
    
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=4,e2=5,e3=6;break;
        case 2: e1=9,e2=10,e3=11;break;
        case 3: e1=13,e2=14,e3=15;break;}
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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);
   
 }
   if(digitalRead(13) == HIGH){lcd.setCursor(7,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(7,0);lcd.write((uint8_t)5);}
   //lcd.setCursor(8,0);lcd.write((uint8_t)8);
   lcd.setCursor(7,1);if(DateTime.second<10){lcd.print("0");}lcd.print(DateTime.second);

    if(digitalRead(5)==HIGH&&ton==0){lcd.backlight();ton=1;w1=0;delay(300);}
    if(DateTime.hour*60+DateTime.minute!=h*60+m){ton=0;}

    if(w==0){pic();lcd.setCursor(8,0);lcd.write((uint8_t)8);}
    else if(w==1&&(DateTime.dayOfWeek<6)){pic();lcd.setCursor(8,0);lcd.write((uint8_t)8);}
    else if(w==2&&(DateTime.dayOfWeek>5)){pic();lcd.setCursor(8,0);lcd.write((uint8_t)8);}
    else {lcd.setCursor(8,0);lcd.write((uint8_t)5);}
   }//reg=0
     eeprom++;
     delay(200);
   }

 void pic(){if(ton==0&&(DateTime.hour*60+DateTime.minute==h*60+m)){w1=1;tone(6,1200,500);delay(500);}}
   

Atmega8_16MHz HEX - Данный контент доступен только зарегистрированным пользователям.

******************************************************************************
http://forum.rcl-radio.ru/uploads/images/2019/09/f0e81a82f598c1c76f7748fc06da7a4b.png

     
      byte v1[8] = {31,27,31,27,27,31,27,31};
      byte v2[8] = {31,27,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,27,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v6[8] = { 0, 0,14,31,31,14, 0, 0}; //*
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
      byte v8[8] = { 0, 4,14,14,14,31, 4, 0};// alarm

http://forum.rcl-radio.ru/uploads/images/2019/09/2c921d0fd257b1847298d64583caa436.png

 case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=7,d6=7;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=7,d6=1;break;
        case 4: d1=1,d2=7,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=7,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=7,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=7,d6=1;break;

2

Re: Часы с будильником 1602

Замена DS3231 на DS1302

#include <Wire.h> 
  #include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
 #include <iarduino_RTC.h>
iarduino_RTC times(RTC_DS1302, 6, 7, 8); // RST, CLK, DAT
      LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей    
      byte v1[8] = {31,27,31,27,27,31,27,31};
      byte v2[8] = {31,27,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,27,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v6[8] = { 0, 0,14,31,31,14, 0, 0}; //*
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
      byte v8[8] = { 0, 4,14,14,14,31, 4, 0};// alarm
      int a[4],time,sek_old;
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      
   void setup(){ Wire.begin();   times.begin();

 //times.settime(0,43,13,24,10,19,4); // Записываем время в модуль: сек, мин, час, дата, месяц, год (2019 = 19), день недели (пон = 1).

   
    lcd.init();lcd.backlight();// Включаем подсветку дисплея
    //lcd.noBacklight();// Выключаем подсветку дисплея
      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);
   }
   
   void loop(){
     times.gettime();
    time = times.Hours*100+times.minutes;
     a[0]=time/1000;
     a[1]=time/100%10;
     a[2]=time/10%10;
     a[3]=time%10%10;
     sek_old=times.seconds;
    
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=4,e2=5,e3=6;break;
        case 2: e1=9,e2=10,e3=11;break;
        case 3: e1=13,e2=14,e3=15;break;}
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=7,d6=7;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=7,d6=1;break;
        case 4: d1=1,d2=7,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=7,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=7,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=7,d6=1;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);
   
 }
   if(digitalRead(13) == HIGH){lcd.setCursor(7,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(7,0);lcd.write((uint8_t)5);}
   lcd.setCursor(8,0);lcd.write((uint8_t)8);
   lcd.setCursor(7,1);if(times.seconds<10){lcd.print("0");}lcd.print(times.seconds);

   if(times.Hours>=0&&times.Hours<6){lcd.noBacklight();}else{lcd.backlight();}

//tone(5,1200,500);  
   }
   

3

Re: Часы с будильником 1602

Собрал эти часы на DS3231, но.. проблемы начались! Первая и основная-не работают (висят) от 5В внешнее питание. Только работают, когда вся плата подключена к 5 В, а Ардуинка через micro USB от компа и на вход Ардуино InV подал внешнее питание 5В. При работе заметил, что подмигивает светодиод от 13 вывода. Вместо вывода D13 использовал D7 (изменивши скетч)-проблема исчезла. Вторая проблема: секундная точка, то мигает в такт, то быстрее, а то вообще пару секунд ее нет. Третья проблема: через несколько минут часы тупо зависают, помогает резет sad

4

Re: Часы с будильником 1602

Добавьте в секцию setup() в самый конец:
clock.setOutput(DS3231_1HZ);
Нельзя подавать на вход INV 5 В, надо не менее 7 В, там стабилизатор на 5 В стоит, у Вас низкое напряжение питания.
Если у Вас есть источник питания 5 В, то подавайте это напряжение на контакт 5V.

5

Re: Часы с будильником 1602

Спасибо повторил проект часы без будильника, очень нравятся, большой шрифт хорошо видны вдалеке. Хочется добавить датчик dht11 для полноценной метеостанции как здесь https://www.youtube.com/watch?v=IMYzd7LdiFE т.е пару секунд время потом температура и потом влажность но в том проекте уродские цифры пробовал сам но не получается, моих гуманитарных мозгов не хватает)) Благодарю за понимание

6

Re: Часы с будильником 1602

Потребуется большая правка кода, чтобы получилось как на видео. dht11 у меня есть, смогу сделать правки кода не ранее чем через неделю.

7

Re: Часы с будильником 1602

http://forum.rcl-radio.ru/uploads/images/2019/12/8e5b12f6a83da101d715081999bba0d7.png

http://forum.rcl-radio.ru/uploads/images/2019/12/9c0d9f333e33218e03b0cef1264a3db0.png

http://forum.rcl-radio.ru/uploads/images/2019/12/61d15777195bab6e83f5da44ef3a0096.png


  #include <Wire.h> 
  #include <DHT.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
      DHT dht(2, DHT11); // выход DAT подключен к цыфровому входу 2
      DS3231 clock;RTCDateTime DateTime;
      LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v2[8] = {31,31,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v6[8] = { 0, 0,14,31,31,14, 0, 0}; //*
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
      byte v8[8] = { 0, 4,14,14,14,31, 4, 0};// alarm
      int a[4],digit,sek_old,w,w1,w2,h,t;
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      unsigned long times;
      
   void setup(){ Wire.begin(); clock.begin(); Serial.begin(9600);  dht.begin(); 
    //clock.setDateTime(__DATE__, __TIME__);
    lcd.init();lcd.backlight();// Включаем подсветку дисплея
    //lcd.noBacklight();// Выключаем подсветку дисплея
      pinMode(12,INPUT); clock.setOutput(DS3231_1HZ);
      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);
   }
   
   void loop(){
    if(DateTime.second<20){
    h = dht.readHumidity();// влажность
    t = dht.readTemperature();// температура
    times=millis();}
    DateTime=clock.getDateTime(); 
    if(DateTime.second>=20){digit = DateTime.hour*100+DateTime.minute;
     if(w1==1){lcd.clear();w1=0;}w=1;
     a[0]=digit/1000;
     a[1]=digit/100%10;
     a[2]=digit/10%10;
     a[3]=digit%10%10;
     
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=4,e2=5,e3=6;break;
        case 2: e1=9,e2=10,e3=11;break;
        case 3: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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);}
      
   if(digitalRead(12) == HIGH){lcd.setCursor(7,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(7,0);lcd.write((uint8_t)5);}
   if(digitalRead(12) == LOW){lcd.setCursor(8,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(8,0);lcd.write((uint8_t)5);}
 //  lcd.setCursor(8,0);lcd.write((uint8_t)8);
   lcd.setCursor(7,1);if(DateTime.second<10){lcd.print("0");}lcd.print(DateTime.second);
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
    if(DateTime.second>0&&DateTime.second<10){digit=t;
    if(w==1){lcd.clear();w=0;}w2=1;
     a[0]=digit/10;
     a[1]=digit%10;
     
 for(i=0;i<2;i++){
      switch(i){
        case 0: e1=7,e2=8,e3=9;break;
        case 1: e1=11,e2=12,e3=13;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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(0,1);lcd.print("TEMP");
      lcd.setCursor(0,0);lcd.print(DateTime.hour/10);lcd.print(DateTime.hour%10);lcd.print(":");lcd.print(DateTime.minute/10);lcd.print(DateTime.minute%10); 
    }

///////////////////////////////////////////////////////////////////////////////////////
    if(DateTime.second>=10&&DateTime.second<20){digit=h;
     if(w2==1){lcd.clear();w2=0;}w1=1;
     a[0]=digit/10;
     a[1]=digit%10;
     
 for(i=0;i<2;i++){
      switch(i){
        case 0: e1=7,e2=8,e3=9;break;
        case 1: e1=11,e2=12,e3=13;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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(0,1);lcd.print("HUM %");
      lcd.setCursor(0,0);lcd.print(DateTime.hour/10);lcd.print(DateTime.hour%10);lcd.print(":");lcd.print(DateTime.minute/10);lcd.print(DateTime.minute%10); 
    } 
   }// loop

8

Re: Часы с будильником 1602

Спасибо за проделанную работу. Где в коде поменять время чтоб быстрее экраны переключались? сам смотрел так и не понял, секунды 3 и температуру с десятыми как сделать например 25.5? Хотелка косметического плана: температуру с десятыми и влажность большими цифрами по центру без времени и надписей слева только значёк Цельсий и процент пусть маленькие и интервал 3 секунды между сменой дисплеев. Понимаю что нужна правка кода, по времени как будет свободное. Спасибо
Вот пример цельсия
http://forum.rcl-radio.ru/uploads/images/2019/12/ea56f758ce3b1abe52c795d8cee7a0a9.jpg

9

Re: Часы с будильником 1602

DHT11 не может выдавать число float (0,00),  только int (000), я проверял. Переделываю число на float датчик выдает 27,0 игнорируя десятые доли. Надо применить BME280 он более точнее.

3 секунды интервал -  3 сек время, 3 сек темп, 3 сек влаж и по кругу?

10

Re: Часы с будильником 1602

Я правильно понял, что большими цифрами не получится выводить десятые температуры и влажности?? А маленькими цифрами возможно?
Пример:
http://forum.rcl-radio.ru/uploads/images/2019/12/32bbb390d61985ea278814f83ebb636d.jpg
Интервал 3 секунды и время большими цифрами

11

Re: Часы с будильником 1602

И значки маленькие перед цифрами как здесь
http://forum.rcl-radio.ru/uploads/images/2019/12/89a994556880398081e3016111a7c84a.jpg

12

Re: Часы с будильником 1602

Сам датчик выдает число INT, даже в библиотеке указано INT.
INT не может иметь запятые.

13

Re: Часы с будильником 1602

Если выводить как float с запятыми, то в десятичных долях всегда будет 0

14

Re: Часы с будильником 1602

Если датчик заменить на BME280, то тогда будут десятичные доли.

15

Re: Часы с будильником 1602

Как мне в коде поменять время чтоб экраны быстрее переключались секунды 3 эта строчка ???if(DateTime.second>=10&&DateTime.second<20){digit=h;

16

Re: Часы с будильником 1602

Там несколько строчек надо менять. Если надо 3 сек время 3 сек темп 3 сек влажн, и по кругу, то надо сильно редактировать код.
Если 3 сек темп, 3 сек влажн и 54 сек время, то правки будут небольшие.

17

Re: Часы с будильником 1602

54 сек время??? это много, хотелось бы 3 сек время 3 сек темп 3 сек влажн, и по кругу

18

Re: Часы с будильником 1602

Хорошо, на выходных постараюсь переделать код.
Надо что-то еще поменять?

19

Re: Часы с будильником 1602

Пожалуй заодно температуру и влажность большими цифрами по центру без времени и надписей слева только значёк Цельсий и процент лучше большие место есть же. Спасибо

20

Re: Часы с будильником 1602

Процент и градус большими не получится, LCD ограничен в создании новых символов. Могу только маленькими значками.

21

Re: Часы с будильником 1602

да, тогда маленькими после больших цифр

22

Re: Часы с будильником 1602

В верхней строки или в нижней?

23

Re: Часы с будильником 1602

#include <Wire.h> 
  #include <DHT.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
      DHT dht(2, DHT11); // выход DAT подключен к цыфровому входу 2
      DS3231 clock;RTCDateTime DateTime;
      LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v2[8] = {31,31,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v6[8] = { 0, 0,14,31,31,14, 0, 0}; //*
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
      byte v8[8] = { 0, 4,14,14,14,31, 4, 0};// alarm
      int a[4],digit,sek_old,w,w1,w2,h,t;
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      unsigned long times;
      
   void setup(){ Wire.begin(); clock.begin(); Serial.begin(9600);  dht.begin(); 
    //clock.setDateTime(__DATE__, __TIME__);
    lcd.init();lcd.backlight();// Включаем подсветку дисплея
    //lcd.noBacklight();// Выключаем подсветку дисплея
      pinMode(12,INPUT); clock.setOutput(DS3231_1HZ);
      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);
   }
   
   void loop(){
    if(millis()-times>3000){
    h = dht.readHumidity();// влажность
    t = dht.readTemperature();// температура
    }
    DateTime=clock.getDateTime(); 
     if(millis()-times<=3000){digit = DateTime.hour*100+DateTime.minute;
     if(w1==1){lcd.clear();w1=0;}w=1;
     a[0]=digit/1000;
     a[1]=digit/100%10;
     a[2]=digit/10%10;
     a[3]=digit%10%10;
     
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=4,e2=5,e3=6;break;
        case 2: e1=9,e2=10,e3=11;break;
        case 3: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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);}
      
   if(digitalRead(12) == HIGH){lcd.setCursor(7,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(7,0);lcd.write((uint8_t)5);}
   if(digitalRead(12) == LOW){lcd.setCursor(8,0);lcd.write((uint8_t)6);}else{ lcd.setCursor(8,0);lcd.write((uint8_t)5);}
 //  lcd.setCursor(8,0);lcd.write((uint8_t)8);
   lcd.setCursor(7,1);if(DateTime.second<10){lcd.print("0");}lcd.print(DateTime.second);
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
     if(millis()-times>3000&&millis()-times<6000){digit=t;
    if(w==1){lcd.clear();w=0;}w2=1;
     a[0]=digit/10;
     a[1]=digit%10;
     
 for(i=0;i<2;i++){
      switch(i){
        case 0: e1=4,e2=5,e3=6;break;
        case 1: e1=8,e2=9,e3=10;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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(11,0);lcd.print(char(223));
   
    }

///////////////////////////////////////////////////////////////////////////////////////
    if(millis()-times>=6000&&millis()-times<9000){digit=h;
     if(w2==1){lcd.clear();w2=0;}w1=1;
     a[0]=digit/10;
     a[1]=digit%10;
     
 for(i=0;i<2;i++){
      switch(i){
        case 0: e1=4,e2=5,e3=6;break;
        case 1: e1=8,e2=9,e3=10;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;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(11,0);lcd.print("%");
         
    }
   if(millis()-times>9000){times=millis();} 
   }// loop

24 (2019-12-24 21:55:59 отредактировано gelit4)

Re: Часы с будильником 1602

Супер то что нужно, большое спасибо

25

Re: Часы с будильником 1602

Подскажите как сделать чтоб время показывало без 0 вначале т.е например не 07:30 утра а просто 7:30 ??