1

Тема: Простые часы на LCD2004 (Arduino)

На платформе Arduino используя дисплей LCD2004 (I2C) и часы реального времени DS3231 можно собрать простые часы с цифрами во всю высоту экрана дисплея.
http://forum.rcl-radio.ru/uploads/images/2020/02/38b655e79988d4d94a6b5e6017318068.png
http://forum.rcl-radio.ru/uploads/images/2020/02/a32af746bdc1494782e33c3d570da34f.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,20,4);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v3[8] = { 0, 0, 0, 0, 31,31,31,31};
      byte v8[8] = { 31, 31,31,31,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0};      
      int a[4];
      byte i,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,e1,e2,e3,e4;
      
   void setup(){ Wire.begin(); clock.begin();clock.setOutput(DS3231_1HZ);
    pinMode(2,INPUT); // 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);
   }
   
   void loop(){
    DateTime=clock.getDateTime();
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
   
  if(digitalRead(2)==HIGH){
   lcd.setCursor(9,0);lcd.write((uint8_t)2);lcd.setCursor(9,1);lcd.write((uint8_t)4);lcd.setCursor(10,0);lcd.write((uint8_t)5);lcd.setCursor(10,1);lcd.write((uint8_t)6);
   lcd.setCursor(9,2);lcd.write((uint8_t)2);lcd.setCursor(9,3);lcd.write((uint8_t)4);lcd.setCursor(10,2);lcd.write((uint8_t)5);lcd.setCursor(10,3);lcd.write((uint8_t)6);
   
   
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;e4=3;break;
        case 1: e1=5,e2=6,e3=7;e4=8;break;
        case 2: e1=11,e2=12,e3=13;e4=14;break;
        case 3: e1=16,e2=17,e3=18;e4=19;break; 
        }
        
      switch(a[i]){
        case 0: d1=1,d2=8,d3=8,d4=1, d5=1,d6=7,d7=16,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 1: d1=16,d2=8,d3=1,d4=7, d5=7,d6=7,d7=1,d8=7, d9=16,d10=7,d11=1,d12=7, d13=16,d14=3,d15=1,d16=3; break;
        case 2: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=7,d8=1, d9=1,d10=8,d11=8,d12=8, d13=1,d14=3,d15=3,d16=3; break;
        case 3: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 4: d1=1,d2=7,d3=16,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=16,d15=7,d16=1; break;
        case 5: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=7,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 6: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 7: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=16,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=7,d15=7,d16=1; break;
        case 8: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 9: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=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(e4,0);lcd.write((uint8_t)d4);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d5);lcd.setCursor(e2,1);lcd.write((uint8_t)d6);lcd.setCursor(e3,1);lcd.write((uint8_t)d7);lcd.setCursor(e4,1);lcd.write((uint8_t)d8);
      lcd.setCursor(e1,2);lcd.write((uint8_t)d9);lcd.setCursor(e2,2);lcd.write((uint8_t)d10);lcd.setCursor(e3,2);lcd.write((uint8_t)d11);lcd.setCursor(e4,2);lcd.write((uint8_t)d12);
      lcd.setCursor(e1,3);lcd.write((uint8_t)d13);lcd.setCursor(e2,3);lcd.write((uint8_t)d14);lcd.setCursor(e3,3);lcd.write((uint8_t)d15);lcd.setCursor(e4,3);lcd.write((uint8_t)d16);
   }
   }// if sqw==1
  if(digitalRead(2)==LOW){
   lcd.setCursor(9,0);lcd.write((uint8_t)7);lcd.setCursor(9,1);lcd.write((uint8_t)7);lcd.setCursor(10,0);lcd.write((uint8_t)7);lcd.setCursor(10,1);lcd.write((uint8_t)7);
   lcd.setCursor(9,2);lcd.write((uint8_t)7);lcd.setCursor(9,3);lcd.write((uint8_t)7);lcd.setCursor(10,2);lcd.write((uint8_t)7);lcd.setCursor(10,3);lcd.write((uint8_t)7);
   }
   }//loop
   

http://forum.rcl-radio.ru/uploads/images/2020/02/deaf9f652e2a79523b3871e54d8cf1c4.png
   

   
      byte v1[8] = {27,27,0,27,27,0,27,27};
      byte v3[8] = { 0, 0, 0, 27, 27,0,27,27};
      byte v8[8] = { 27, 27,0,27,27,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0};   
  

http://forum.rcl-radio.ru/uploads/images/2020/02/f6cb09f3bfa8501b9e883c6b295e8d5b.png

      byte v1[8] = {27,27,27,27,27,27,27,27};
      byte v3[8] = { 0, 0, 0, 0, 0,27,27,27};
      byte v8[8] = { 27, 27,27,0,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0}; 

http://forum.rcl-radio.ru/uploads/images/2020/02/08a391720addd463955fb4d8cf022193.png

     byte v1[8] = {21,21,21,21,21,21,21,21};
      byte v3[8] = { 0, 0, 0, 0, 0,21,21,21};
      byte v8[8] = { 21, 21,21,0,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0};

http://forum.rcl-radio.ru/uploads/images/2020/02/349daf0040705c08937caf644a3cbfae.png

      byte v1[8] = {21,21,0,21,21,0,21,21};
      byte v3[8] = { 0, 0, 0, 0, 0,0,21,21};
      byte v8[8] = { 21, 21,0,0,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0}; 

2

Re: Простые часы на LCD2004 (Arduino)

Вывод температуры ds3231 каждые 30 секунд

http://forum.rcl-radio.ru/uploads/images/2020/02/a3db85525d117312e242ea079a91aa53.png
http://forum.rcl-radio.ru/uploads/images/2020/02/a4f3c064346792f2cc22bd015b5592ca.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,20,4);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v3[8] = { 0, 0, 0, 0, 31,31,31,31};
      byte v8[8] = { 31, 31,31,31,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0};      
      int a[4];
      byte i,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,e1,e2,e3,e4,w;
      
   void setup(){ Wire.begin(); clock.begin();clock.setOutput(DS3231_1HZ);
    pinMode(2,INPUT); // 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);
   }
   
   void loop(){
    DateTime=clock.getDateTime();
    if(DateTime.second>=0&&DateTime.second<=5||DateTime.second>=30&&DateTime.second<=35 ){w=1;
      a[0]=11;
      a[1]=10;
      a[2]=(int)clock.readTemperature()/10;
      a[3]=(int)clock.readTemperature()%10;
      }
     else{w=0;
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
     }
   
  if(digitalRead(2)==HIGH){
   if(w==0){ 
   lcd.setCursor(9,0);lcd.write((uint8_t)2);lcd.setCursor(9,1);lcd.write((uint8_t)4);lcd.setCursor(10,0);lcd.write((uint8_t)5);lcd.setCursor(10,1);lcd.write((uint8_t)6);
   lcd.setCursor(9,2);lcd.write((uint8_t)2);lcd.setCursor(9,3);lcd.write((uint8_t)4);lcd.setCursor(10,2);lcd.write((uint8_t)5);lcd.setCursor(10,3);lcd.write((uint8_t)6);}
   
   
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;e4=3;break;
        case 1: e1=5,e2=6,e3=7;e4=8;break;
        case 2: e1=11,e2=12,e3=13;e4=14;break;
        case 3: e1=16,e2=17,e3=18;e4=19;break; 
        }
        
      switch(a[i]){
        case 0: d1=1,d2=8,d3=8,d4=1, d5=1,d6=7,d7=7,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 1: d1=16,d2=8,d3=1,d4=7, d5=7,d6=7,d7=1,d8=7, d9=16,d10=7,d11=1,d12=7, d13=16,d14=3,d15=1,d16=3; break;
        case 2: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=7,d8=1, d9=1,d10=8,d11=8,d12=8, d13=1,d14=3,d15=3,d16=3; break;
        case 3: d1=8,d2=8,d3=8,d4=1, d5=7,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 4: d1=1,d2=7,d3=16,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=16,d15=7,d16=1; break;
        case 5: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=7,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 6: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 7: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=16,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=7,d15=7,d16=1; break;
        case 8: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 9: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 10: d1=7,d2=7,d3=7,d4=7, d5=7,d6=7,d7=7,d8=7, d9=7,d10=7,d11=7,d12=7, d13=7,d14=7,d15=7,d16=7; break;
        case 11: d1=1,d2=7,d3=7,d4=7, d5=1,d6=3,d7=3,d8=7, d9=1,d10=7,d11=7,d12=7, d13=1,d14=3,d15=3,d16=3; 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(e4,0);lcd.write((uint8_t)d4);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d5);lcd.setCursor(e2,1);lcd.write((uint8_t)d6);lcd.setCursor(e3,1);lcd.write((uint8_t)d7);lcd.setCursor(e4,1);lcd.write((uint8_t)d8);
      lcd.setCursor(e1,2);lcd.write((uint8_t)d9);lcd.setCursor(e2,2);lcd.write((uint8_t)d10);lcd.setCursor(e3,2);lcd.write((uint8_t)d11);lcd.setCursor(e4,2);lcd.write((uint8_t)d12);
      lcd.setCursor(e1,3);lcd.write((uint8_t)d13);lcd.setCursor(e2,3);lcd.write((uint8_t)d14);lcd.setCursor(e3,3);lcd.write((uint8_t)d15);lcd.setCursor(e4,3);lcd.write((uint8_t)d16);
   }
   }// if sqw==1
  if(digitalRead(2)==LOW){
   lcd.setCursor(9,0);lcd.write((uint8_t)7);lcd.setCursor(9,1);lcd.write((uint8_t)7);lcd.setCursor(10,0);lcd.write((uint8_t)7);lcd.setCursor(10,1);lcd.write((uint8_t)7);
   lcd.setCursor(9,2);lcd.write((uint8_t)7);lcd.setCursor(9,3);lcd.write((uint8_t)7);lcd.setCursor(10,2);lcd.write((uint8_t)7);lcd.setCursor(10,3);lcd.write((uint8_t)7);
   }
   }//loop
   

3

Re: Простые часы на LCD2004 (Arduino)

Еще один вариант простых часов с использованием дисплея LCD2004

http://forum.rcl-radio.ru/uploads/images/2020/02/54d20ca4583c1a395a5d576cb075dd9a.png
http://forum.rcl-radio.ru/uploads/images/2020/02/386e733f878451b90d8ddf943e1fc59a.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,20,4);  // Устанавливаем дисплей    
      byte v1[8] = {15,15,15,15,15,15,15,15};
      byte v2[8] = {15,15,15, 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, 30, 30, 30};
      byte v6[8] = {30,30,30,30,30,30,30,30};
      byte v7[8] = { 0, 0, 0, 0, 0, 15,15,15};
      byte v8[8] = { 31, 31,31,0,0,0,0, 0};
      int a[6];
      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.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();  
     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;
    
 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=4,d3=6,d4=1,d5=3,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=8,d4=7,d5=3,d6=6;break;
        case 6: d1=1,d2=4,d3=8,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(".");
   lcd.setCursor(0,2);lcd.print("--------------------");
   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(clock.readTemperature(),1);lcd.print((char)223);lcd.print("C");
   }
   

4

Re: Простые часы на LCD2004 (Arduino)

http://forum.rcl-radio.ru/uploads/images/2020/02/6d9b62b84fc72b935f0dea4715cd2027.png
http://forum.rcl-radio.ru/uploads/images/2020/02/2b8070aa2e733e7bd7ee9f271c8e5d26.png
http://forum.rcl-radio.ru/uploads/images/2020/02/79f09ba4f9604fe7845b378a78808f25.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,20,4);  // Устанавливаем дисплей    
      byte v1[8] = {7,15,15,15,15,15,15,7};
      byte v2[8] = {7,15,15, 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] = { 30, 30, 14, 0, 0, 0, 0, 0};//
      byte v6[8] = {28,30,30,30,30,30,30,28};
      byte v7[8] = { 0, 0, 0, 0, 0, 15,15,7};
      byte v8[8] = { 31, 31,0,0,0,0,0, 0};
      int a[6];
      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.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.hour>=0&&DateTime.hour<6){lcd.noBacklight();}else{lcd.backlight();}
    
    DateTime=clock.getDateTime();  
     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;
    
 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=4,d3=6,d4=1,d5=3,d6=3;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(".");
   lcd.setCursor(0,2);lcd.print("--------------------");
   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(clock.readTemperature(),1);lcd.print((char)223);lcd.print("C");
   }
   

5

Re: Простые часы на LCD2004 (Arduino)

http://forum.rcl-radio.ru/uploads/images/2020/02/2ae7abf27aa13236d0d18e3b2bda7b5e.png
http://forum.rcl-radio.ru/uploads/images/2020/02/c91a9561cfd847c53ff307cd122c19c4.png
http://forum.rcl-radio.ru/uploads/images/2020/02/f7b83c85b6665fe8c9e554bb240a3218.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,20,4);  // Устанавливаем дисплей    
      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];
      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.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.hour>=0&&DateTime.hour<6){lcd.noBacklight();}else{lcd.backlight();}
    
    DateTime=clock.getDateTime();  
     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;
    
 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(".");
   lcd.setCursor(0,2);lcd.print("--------------------");
   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(clock.readTemperature(),1);lcd.print((char)223);lcd.print("C");
   }
   

6 (2020-04-10 23:06:30 отредактировано browser)

Re: Простые часы на LCD2004 (Arduino)

Очень понравились часики, сразу и повторил. Хотелось бы к ним датчик температуры ds18b20 прикрутить, вместо того что стоит в ds3231. Подскажите, а то своей головы пока не хватает)))

7

Re: Простые часы на LCD2004 (Arduino)

https://rcl-radio.ru/?p=45886

В самое начало скетча добавить:

#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(A0);// вход для датчиков 18b20
DallasTemperature t(&oneWire);

в setup() добавить:

 t.begin();

в самое начало loop() добавить

t.requestTemperatures();

найти строку

lcd.print("  ");lcd.print(clock.readTemperature(),1);lcd.print((char)223);lcd.print("C");

заменить на

lcd.print("  ");lcd.print(t.getTempCByIndex(0),1);lcd.print((char)223);lcd.print("C");

8

Re: Простые часы на LCD2004 (Arduino)

liman324 спасибо огромной, всё завелось сразу!

9

Re: Простые часы на LCD2004 (Arduino)

ЧАСЫ+ПОГОДНАЯ СТАНЦИЯ

ДАТЧИКИ
BME280
DS18B20 2 шт

Опрос датчиков раз в минуту
Оба датчика температуры 18b20 подключены ко входу А0

http://forum.rcl-radio.ru/uploads/images/2020/06/047be046dc6b3323420c67c1b81d5ff4.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
#include <DallasTemperature.h>// https://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
#include <Adafruit_Sensor.h>  // https://github.com/adafruit/Adafruit_Sensor
#include <Adafruit_BME280.h>  // https://github.com/adafruit/Adafruit_BME280_Library
 OneWire oneWire(A0);// вход датчика 18b20
 DallasTemperature temp(&oneWire);
      DS3231 clock;RTCDateTime DateTime;
      LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей  
      Adafruit_BME280 bme;  
      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];
      byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
      char * mes[12]{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
      char * den[7]{"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
      float hpa,h,t1,t2;
      
   void setup(){ Wire.begin(); clock.begin(); 
    bme.begin(0x76);
    temp.begin(); temp.setResolution(9);//9 бит   
    //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);
   }
   
   void loop(){
    if(DateTime.second==0){temp.requestTemperatures();}
    if(DateTime.second==15){t1 = temp.getTempCByIndex(0);}
    if(DateTime.second==30){t2 = temp.getTempCByIndex(1);}
    if(DateTime.second==45){
    hpa = bme.readPressure() / 100.0F;                                      
    h = bme.readHumidity();}
   // hpa=1002;
  //  h=35; 
 
    if(DateTime.hour>=0&&DateTime.hour<6){lcd.noBacklight();}else{lcd.backlight();}
    
    DateTime=clock.getDateTime();  
     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;
    
 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(".");
   
   lcd.setCursor(2,2);if(DateTime.day<10){lcd.print(" ");}lcd.print(DateTime.day);lcd.print(" ");lcd.print(mes[DateTime.month-1]);lcd.print(" ");lcd.print(DateTime.year);lcd.print(" ");lcd.print(den[DateTime.dayOfWeek-1]);
   
   lcd.setCursor(0,3);lcd.print("P");lcd.print(hpa*0.75,0);lcd.print(" ");lcd.print(h,0);lcd.print("% ");
   lcd.setCursor(9,3);if(t1<0){lcd.print(t1,0);lcd.print("C ");}else{lcd.print(t1,1);lcd.print("C ");}
   lcd.setCursor(15,3);if(t2<0){lcd.print(t2,0);lcd.print("C");}else{lcd.print(t2,1);lcd.print("C");}
   }
   

10

Re: Простые часы на LCD2004 (Arduino)

Привет. Вот все хорошо ,есть датчики температуры итд. Прошу дополнить схему кнопками установки времени .

11

Re: Простые часы на LCD2004 (Arduino)

Re: Простые часы на LCD2004 (Arduino) c выводом времени через 30 сек .

12

Re: Простые часы на LCD2004 (Arduino)

В железе не тестировал, кнопки без резисторов, замыкание на GND, входы кнопок А1 А2

#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,20,4);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v3[8] = { 0, 0, 0, 0, 31,31,31,31};
      byte v8[8] = { 31, 31,31,31,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0};      
      int a[4];
      byte i,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,e1,e2,e3,e4,w;
      int hh,mm,vv;
      
   void setup(){ Wire.begin(); clock.begin();clock.setOutput(DS3231_1HZ);
    pinMode(2,INPUT); // 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);
   pinMode (A1,INPUT_PULLUP); // часы +
   pinMode (A2,INPUT_PULLUP); // минуты +
 // кнопки коррекци времени - нажатие === замыкание на GND 
   }
   
   void loop(){
    DateTime=clock.getDateTime();
    hh=DateTime.hour;mm=DateTime.minute;
    if(DateTime.second>=0&&DateTime.second<=5||DateTime.second>=30&&DateTime.second<=35 ){w=1;
      a[0]=11;
      a[1]=10;
      a[2]=(int)clock.readTemperature()/10;
      a[3]=(int)clock.readTemperature()%10;
      }
     else{w=0;
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
     }
   
  if(digitalRead(2)==HIGH){
   if(w==0){ 
   lcd.setCursor(9,0);lcd.write((uint8_t)2);lcd.setCursor(9,1);lcd.write((uint8_t)4);lcd.setCursor(10,0);lcd.write((uint8_t)5);lcd.setCursor(10,1);lcd.write((uint8_t)6);
   lcd.setCursor(9,2);lcd.write((uint8_t)2);lcd.setCursor(9,3);lcd.write((uint8_t)4);lcd.setCursor(10,2);lcd.write((uint8_t)5);lcd.setCursor(10,3);lcd.write((uint8_t)6);}
   
   
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;e4=3;break;
        case 1: e1=5,e2=6,e3=7;e4=8;break;
        case 2: e1=11,e2=12,e3=13;e4=14;break;
        case 3: e1=16,e2=17,e3=18;e4=19;break; 
        }
        
      switch(a[i]){
        case 0: d1=1,d2=8,d3=8,d4=1, d5=1,d6=7,d7=7,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 1: d1=16,d2=8,d3=1,d4=7, d5=7,d6=7,d7=1,d8=7, d9=16,d10=7,d11=1,d12=7, d13=16,d14=3,d15=1,d16=3; break;
        case 2: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=7,d8=1, d9=1,d10=8,d11=8,d12=8, d13=1,d14=3,d15=3,d16=3; break;
        case 3: d1=8,d2=8,d3=8,d4=1, d5=7,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 4: d1=1,d2=7,d3=16,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=16,d15=7,d16=1; break;
        case 5: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=7,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 6: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 7: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=16,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=7,d15=7,d16=1; break;
        case 8: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 9: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 10: d1=7,d2=7,d3=7,d4=7, d5=7,d6=7,d7=7,d8=7, d9=7,d10=7,d11=7,d12=7, d13=7,d14=7,d15=7,d16=7; break;
        case 11: d1=1,d2=7,d3=7,d4=7, d5=1,d6=3,d7=3,d8=7, d9=1,d10=7,d11=7,d12=7, d13=1,d14=3,d15=3,d16=3; 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(e4,0);lcd.write((uint8_t)d4);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d5);lcd.setCursor(e2,1);lcd.write((uint8_t)d6);lcd.setCursor(e3,1);lcd.write((uint8_t)d7);lcd.setCursor(e4,1);lcd.write((uint8_t)d8);
      lcd.setCursor(e1,2);lcd.write((uint8_t)d9);lcd.setCursor(e2,2);lcd.write((uint8_t)d10);lcd.setCursor(e3,2);lcd.write((uint8_t)d11);lcd.setCursor(e4,2);lcd.write((uint8_t)d12);
      lcd.setCursor(e1,3);lcd.write((uint8_t)d13);lcd.setCursor(e2,3);lcd.write((uint8_t)d14);lcd.setCursor(e3,3);lcd.write((uint8_t)d15);lcd.setCursor(e4,3);lcd.write((uint8_t)d16);
   }
   }// if sqw==1
  if(digitalRead(2)==LOW){
   lcd.setCursor(9,0);lcd.write((uint8_t)7);lcd.setCursor(9,1);lcd.write((uint8_t)7);lcd.setCursor(10,0);lcd.write((uint8_t)7);lcd.setCursor(10,1);lcd.write((uint8_t)7);
   lcd.setCursor(9,2);lcd.write((uint8_t)7);lcd.setCursor(9,3);lcd.write((uint8_t)7);lcd.setCursor(10,2);lcd.write((uint8_t)7);lcd.setCursor(10,3);lcd.write((uint8_t)7);
   }

   ///////////////////////////////////// коррекция времени - часы и минуты
  if(analogRead(A1)<900){vv=1;hh++;if(hh>23){hh=0;}delay(300);}
  if(analogRead(A2)<900){vv=1;mm++;if(mm>59){mm=0;}delay(300);}
  if(vv==1){vv=0;clock.setDateTime(2020, 01, 01, hh, mm, 0);}
   
   }//loop

13

Re: Простые часы на LCD2004 (Arduino)

Спасибо. Как буду дома проверю работу.

14

Re: Простые часы на LCD2004 (Arduino)

Скетч загрузил, но кнопки не работают.

15

Re: Простые часы на LCD2004 (Arduino)

Кнопки правильно подключили, кнопка должна замыкать на gnd

16

Re: Простые часы на LCD2004 (Arduino)

Правильно. И перемычкой делал.

17

Re: Простые часы на LCD2004 (Arduino)

У меня в мониторе порта кнопки работают. Время корректируется.

#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,20,4);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v3[8] = { 0, 0, 0, 0, 31,31,31,31};
      byte v8[8] = { 31, 31,31,31,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0};      
      int a[4];
      byte i,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,e1,e2,e3,e4,w;
      int hh,mm,vv;
      
   void setup(){ Wire.begin(); clock.begin();clock.setOutput(DS3231_1HZ);Serial.begin(9600);
    pinMode(2,INPUT); // 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);
   pinMode(A1,INPUT_PULLUP); // часы +
   pinMode(A2,INPUT_PULLUP); // минуты +
 // кнопки коррекци времени - нажатие === замыкание на GND 
   }
   
   void loop(){
    DateTime=clock.getDateTime();
    hh=DateTime.hour;mm=DateTime.minute;
    if(DateTime.second>=0&&DateTime.second<=5||DateTime.second>=30&&DateTime.second<=35 ){w=1;
      a[0]=11;
      a[1]=10;
      a[2]=(int)clock.readTemperature()/10;
      a[3]=(int)clock.readTemperature()%10;
      }
     else{w=0;
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
     }
   
  if(digitalRead(2)==HIGH){
   if(w==0){ 
   lcd.setCursor(9,0);lcd.write((uint8_t)2);lcd.setCursor(9,1);lcd.write((uint8_t)4);lcd.setCursor(10,0);lcd.write((uint8_t)5);lcd.setCursor(10,1);lcd.write((uint8_t)6);
   lcd.setCursor(9,2);lcd.write((uint8_t)2);lcd.setCursor(9,3);lcd.write((uint8_t)4);lcd.setCursor(10,2);lcd.write((uint8_t)5);lcd.setCursor(10,3);lcd.write((uint8_t)6);}
   
   
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;e4=3;break;
        case 1: e1=5,e2=6,e3=7;e4=8;break;
        case 2: e1=11,e2=12,e3=13;e4=14;break;
        case 3: e1=16,e2=17,e3=18;e4=19;break; 
        }
        
      switch(a[i]){
        case 0: d1=1,d2=8,d3=8,d4=1, d5=1,d6=7,d7=7,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 1: d1=16,d2=8,d3=1,d4=7, d5=7,d6=7,d7=1,d8=7, d9=16,d10=7,d11=1,d12=7, d13=16,d14=3,d15=1,d16=3; break;
        case 2: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=7,d8=1, d9=1,d10=8,d11=8,d12=8, d13=1,d14=3,d15=3,d16=3; break;
        case 3: d1=8,d2=8,d3=8,d4=1, d5=7,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 4: d1=1,d2=7,d3=16,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=16,d15=7,d16=1; break;
        case 5: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=7,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 6: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 7: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=16,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=7,d15=7,d16=1; break;
        case 8: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 9: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 10: d1=7,d2=7,d3=7,d4=7, d5=7,d6=7,d7=7,d8=7, d9=7,d10=7,d11=7,d12=7, d13=7,d14=7,d15=7,d16=7; break;
        case 11: d1=1,d2=7,d3=7,d4=7, d5=1,d6=3,d7=3,d8=7, d9=1,d10=7,d11=7,d12=7, d13=1,d14=3,d15=3,d16=3; 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(e4,0);lcd.write((uint8_t)d4);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d5);lcd.setCursor(e2,1);lcd.write((uint8_t)d6);lcd.setCursor(e3,1);lcd.write((uint8_t)d7);lcd.setCursor(e4,1);lcd.write((uint8_t)d8);
      lcd.setCursor(e1,2);lcd.write((uint8_t)d9);lcd.setCursor(e2,2);lcd.write((uint8_t)d10);lcd.setCursor(e3,2);lcd.write((uint8_t)d11);lcd.setCursor(e4,2);lcd.write((uint8_t)d12);
      lcd.setCursor(e1,3);lcd.write((uint8_t)d13);lcd.setCursor(e2,3);lcd.write((uint8_t)d14);lcd.setCursor(e3,3);lcd.write((uint8_t)d15);lcd.setCursor(e4,3);lcd.write((uint8_t)d16);
   }
   }// if sqw==1
  if(digitalRead(2)==LOW){
   lcd.setCursor(9,0);lcd.write((uint8_t)7);lcd.setCursor(9,1);lcd.write((uint8_t)7);lcd.setCursor(10,0);lcd.write((uint8_t)7);lcd.setCursor(10,1);lcd.write((uint8_t)7);
   lcd.setCursor(9,2);lcd.write((uint8_t)7);lcd.setCursor(9,3);lcd.write((uint8_t)7);lcd.setCursor(10,2);lcd.write((uint8_t)7);lcd.setCursor(10,3);lcd.write((uint8_t)7);
   }

   ///////////////////////////////////// коррекция времени - часы и минуты
  if(analogRead(A1)<100){vv=1;hh++;if(hh>23){hh=0;}delay(300);}
  if(analogRead(A2)<100){vv=1;mm++;if(mm>59){mm=0;}delay(300);}
  if(vv==1){vv=0;clock.setDateTime(2020, 01, 01, hh, mm, 0);
  Serial.println(DateTime.hour);Serial.println(DateTime.minute);
  }
   
   }//loop

18

Re: Простые часы на LCD2004 (Arduino)

Я смотрю на дисплей часов , в этот момент жму кнопки на дисплеи не видно изменения времени . Оно может изменится потом ( процесс не контролируемый )

19

Re: Простые часы на LCD2004 (Arduino)

Обновите скетч, сейчас все должно работать правильно

#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,20,4);  // Устанавливаем дисплей    
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v3[8] = { 0, 0, 0, 0, 31,31,31,31};
      byte v8[8] = { 31, 31,31,31,0,0,0, 0};
      byte v2[8] = {0,0,0,0,0,0,0b00011,0b00011};  
      byte v4[8] = {0b00011,0b00011,0,0,0,0,0,0};
      byte v5[8] = {0,0,0,0,0,0,0b11000,0b11000};  
      byte v6[8] = {0b11000,0b11000,0,0,0,0,0,0};
      byte v7[8] = {0,0,0,0,0,0,0,0};      
      int a[4];
      byte i,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,e1,e2,e3,e4,w;
      int hh,mm,vv,vvv;
      
   void setup(){ Wire.begin(); clock.begin();clock.setOutput(DS3231_1HZ);
    pinMode(2,INPUT); // 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);
   pinMode(A1,INPUT_PULLUP); // часы +
   pinMode(A2,INPUT_PULLUP); // минуты +
 // кнопки коррекци времени - нажатие === замыкание на GND 
   }
   
   void loop(){
    DateTime=clock.getDateTime();
    
    hh=DateTime.hour;mm=DateTime.minute;
   if(vvv==0){
    if(DateTime.second>=0&&DateTime.second<=5||DateTime.second>=30&&DateTime.second<=35){w=1;
      a[0]=11;
      a[1]=10;
      a[2]=(int)clock.readTemperature()/10;
      a[3]=(int)clock.readTemperature()%10;
      }
     else {w=0;
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
     }
    }
if(vvv==1){ vvv=0;
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
}
  if(digitalRead(2)==HIGH){
   if(w==0){ 
   lcd.setCursor(9,0);lcd.write((uint8_t)2);lcd.setCursor(9,1);lcd.write((uint8_t)4);lcd.setCursor(10,0);lcd.write((uint8_t)5);lcd.setCursor(10,1);lcd.write((uint8_t)6);
   lcd.setCursor(9,2);lcd.write((uint8_t)2);lcd.setCursor(9,3);lcd.write((uint8_t)4);lcd.setCursor(10,2);lcd.write((uint8_t)5);lcd.setCursor(10,3);lcd.write((uint8_t)6);}
  }
   
 for(i=0;i<4;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;e4=3;break;
        case 1: e1=5,e2=6,e3=7;e4=8;break;
        case 2: e1=11,e2=12,e3=13;e4=14;break;
        case 3: e1=16,e2=17,e3=18;e4=19;break; 
        }
        
      switch(a[i]){
        case 0: d1=1,d2=8,d3=8,d4=1, d5=1,d6=7,d7=7,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 1: d1=16,d2=8,d3=1,d4=7, d5=7,d6=7,d7=1,d8=7, d9=16,d10=7,d11=1,d12=7, d13=16,d14=3,d15=1,d16=3; break;
        case 2: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=7,d8=1, d9=1,d10=8,d11=8,d12=8, d13=1,d14=3,d15=3,d16=3; break;
        case 3: d1=8,d2=8,d3=8,d4=1, d5=7,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 4: d1=1,d2=7,d3=16,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=16,d15=7,d16=1; break;
        case 5: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=7,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 6: d1=1,d2=8,d3=8,d4=8, d5=1,d6=3,d7=3,d8=3, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 7: d1=1,d2=8,d3=8,d4=1, d5=7,d6=7,d7=16,d8=1, d9=7,d10=7,d11=7,d12=1, d13=7,d14=7,d15=7,d16=1; break;
        case 8: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=1,d10=7,d11=7,d12=1, d13=1,d14=3,d15=3,d16=1; break;
        case 9: d1=1,d2=8,d3=8,d4=1, d5=1,d6=3,d7=3,d8=1, d9=7,d10=7,d11=7,d12=1, d13=3,d14=3,d15=3,d16=1; break;
        case 10: d1=7,d2=7,d3=7,d4=7, d5=7,d6=7,d7=7,d8=7, d9=7,d10=7,d11=7,d12=7, d13=7,d14=7,d15=7,d16=7; break;
        case 11: d1=1,d2=7,d3=7,d4=7, d5=1,d6=3,d7=3,d8=7, d9=1,d10=7,d11=7,d12=7, d13=1,d14=3,d15=3,d16=3; 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(e4,0);lcd.write((uint8_t)d4);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d5);lcd.setCursor(e2,1);lcd.write((uint8_t)d6);lcd.setCursor(e3,1);lcd.write((uint8_t)d7);lcd.setCursor(e4,1);lcd.write((uint8_t)d8);
      lcd.setCursor(e1,2);lcd.write((uint8_t)d9);lcd.setCursor(e2,2);lcd.write((uint8_t)d10);lcd.setCursor(e3,2);lcd.write((uint8_t)d11);lcd.setCursor(e4,2);lcd.write((uint8_t)d12);
      lcd.setCursor(e1,3);lcd.write((uint8_t)d13);lcd.setCursor(e2,3);lcd.write((uint8_t)d14);lcd.setCursor(e3,3);lcd.write((uint8_t)d15);lcd.setCursor(e4,3);lcd.write((uint8_t)d16);
   }

//
  
  if(digitalRead(2)==LOW){
   lcd.setCursor(9,0);lcd.write((uint8_t)7);lcd.setCursor(9,1);lcd.write((uint8_t)7);lcd.setCursor(10,0);lcd.write((uint8_t)7);lcd.setCursor(10,1);lcd.write((uint8_t)7);
   lcd.setCursor(9,2);lcd.write((uint8_t)7);lcd.setCursor(9,3);lcd.write((uint8_t)7);lcd.setCursor(10,2);lcd.write((uint8_t)7);lcd.setCursor(10,3);lcd.write((uint8_t)7);
   }

   ///////////////////////////////////// коррекция времени - часы и минуты
  if(analogRead(A1)<100){vv=1;hh++;if(hh>23){hh=0;}}
  if(analogRead(A2)<100){vv=1;mm++;if(mm>59){mm=0;}}
  if(vv==1){vv=0;vvv=1;clock.setDateTime(2020, 01, 01, hh, mm, 0);
  delay(300);
  }
   
   }//loop

20

Re: Простые часы на LCD2004 (Arduino)

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

21

Re: Простые часы на LCD2004 (Arduino)

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

22

Re: Простые часы на LCD2004 (Arduino)

Да с кнопками проблем нет.