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 17:06:30 отредактировано browser)

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

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

7

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

http://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>// http://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)

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

23 (2020-10-22 18:07:24 отредактировано Cryosim)

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

Шикарные часы, очень понравились, это как бы это сделать для Raspberry pi на Python.
А то у меня пока такой обычный вариант.
https://i.imgur.com/WbglnYE.jpg

Драйвер дисплея такой.

# -*- coding: utf-8 -*-
import smbus
from time import *

class i2c_device:
   def __init__(self, addr, port=1):
      self.addr = addr
      self.bus = smbus.SMBus(port)

# Write a single command
   def write_cmd(self, cmd):
      self.bus.write_byte(self.addr, cmd)
      sleep(0.0001)

# Write a command and argument
   def write_cmd_arg(self, cmd, data):
      self.bus.write_byte_data(self.addr, cmd, data)
      sleep(0.0001)

# Write a block of data
   def write_block_data(self, cmd, data):
      self.bus.write_block_data(self.addr, cmd, data)
      sleep(0.0001)

# Read a single byte
   def read(self):
      return self.bus.read_byte(self.addr)

# Read
   def read_data(self, cmd):
      return self.bus.read_byte_data(self.addr, cmd)

# Read a block of data
   def read_block_data(self, cmd):
      return self.bus.read_block_data(self.addr, cmd)



# LCD Address
ADDRESS = 0x27

# commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80

# flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00

# flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00

# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00

# flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00

# flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00

En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit
Rs = 0b00000001 # Register select bit

class lcd:
   #initializes objects and lcd
   def __init__(self):
      self.lcd_device = i2c_device(ADDRESS)

      self.lcd_write(0x03)
      self.lcd_write(0x03)
      self.lcd_write(0x03)
      self.lcd_write(0x02)

      self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
      self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
      self.lcd_write(LCD_CLEARDISPLAY)
      self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
      sleep(0.2)


   # clocks EN to latch command
   def lcd_strobe(self, data):
      self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT)
      sleep(.0005)
      self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT))
      sleep(.0001)

   def lcd_write_four_bits(self, data):
      self.lcd_device.write_cmd(data | LCD_BACKLIGHT)
      self.lcd_strobe(data)

   # write a command to lcd
   def lcd_write(self, cmd, mode=0):
      self.lcd_write_four_bits(mode | (cmd & 0xF0))
      self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))

   # write a character to lcd (or character rom) 0x09: backlight | RS=DR<
   # works!
   def lcd_write_char(self, charvalue, mode=1):
      self.lcd_write_four_bits(mode | (charvalue & 0xF0))
      self.lcd_write_four_bits(mode | ((charvalue << 4) & 0xF0))
  

   # put string function
   def lcd_display_string(self, string, line):
      if line == 1:
         self.lcd_write(0x80)
      if line == 2:
         self.lcd_write(0xC0)
      if line == 3:
         self.lcd_write(0x94)
      if line == 4:
         self.lcd_write(0xD4)

      for char in string:
         self.lcd_write(ord(char), Rs)

   # clear lcd and set to home
   def lcd_clear(self):
      self.lcd_write(LCD_CLEARDISPLAY)
      self.lcd_write(LCD_RETURNHOME)

   # define backlight on/off (lcd.backlight(1); off= lcd.backlight(0)
   def backlight(self, state): # for state, 1 = on, 0 = off
      if state == 1:
         self.lcd_device.write_cmd(LCD_BACKLIGHT)
      elif state == 0:
         self.lcd_device.write_cmd(LCD_NOBACKLIGHT)

   # add custom characters (0 - 7)
   def lcd_load_custom_chars(self, fontdata):
      self.lcd_write(0x40);
      for char in fontdata:
         for line in char:
            self.lcd_write_char(line)         
         
   # define precise positioning (addition from the forum)
   def lcd_display_string_pos(self, string, line, pos):
    if line == 1:
      pos_new = pos
    elif line == 2:
      pos_new = 0x40 + pos
    elif line == 3:
      pos_new = 0x14 + pos
    elif line == 4:
      pos_new = 0x54 + pos

    self.lcd_write(0x80 + pos_new)

    for char in string:
      self.lcd_write(ord(char), Rs)

Сам код:

import sys
sys.path.append("/home/pi/weather/lib")
import RPi_I2C_driver
import time
try:
    from smbus2 import SMBus
except ImportError:
    from smbus import SMBus
from bme280 import BME280

lcd = RPi_I2C_driver.lcd()

lcd.lcd_clear()

# Initialise the BME280
bus = SMBus(1)
bme280 = BME280(i2c_dev=bus)

# on affiche des caracteres sur chaque ligne
fontdata1 = [
        # Char 0 - Upper-left
        [ 0x00, 0x00, 0x03, 0x04, 0x08, 0x19, 0x11, 0x10 ],
        # Char 1 - Upper-middle
        [ 0x00, 0x1F, 0x00, 0x00, 0x00, 0x11, 0x11, 0x00 ],
        # Char 2 - Upper-right
        [ 0x00, 0x00, 0x18, 0x04, 0x02, 0x13, 0x11, 0x01 ],
        # Char 3 - Lower-left
        [ 0x12, 0x13, 0x1b, 0x09, 0x04, 0x03, 0x00, 0x00 ],
        # Char 4 - Lower-middle
        [ 0x00, 0x11, 0x1f, 0x1f, 0x0e, 0x00, 0x1F, 0x00 ],
        # Char 5 - Lower-right
        [ 0x09, 0x19, 0x1b, 0x12, 0x04, 0x18, 0x00, 0x00 ],
        # Char 6 - my test
	[ 0x1f,0x0,0x4,0xe,0x0,0x1f,0x1f,0x1f],
]

# Load logo chars (fontdata1)
lcd.lcd_load_custom_chars(fontdata1)


# Write first three chars to row 1 directly
lcd.lcd_write(0x80)
lcd.lcd_write_char(0)
lcd.lcd_write_char(1)
lcd.lcd_write_char(2)
# Write next three chars to row 2 directly
lcd.lcd_write(0xC0)
lcd.lcd_write_char(3)
lcd.lcd_write_char(4)
lcd.lcd_write_char(5)

while True:
    temperature = bme280.get_temperature()
    pressure = bme280.get_pressure()
    pressure = round(pressure * 0.750061683, 2)
    humidity = bme280.get_humidity()
    lcd.lcd_display_string("%s" %time.strftime('%H:%M:%S %d/%m/%Y'), 1)
    lcd.lcd_display_string('{:04.1f}C {:04.1f}%'.format(temperature,humidity), 2)
    lcd.lcd_display_string('{:04.1f}Hg'.format(pressure,), 3)
    time.sleep(1) 

А вот часики большие не придумаю. прошу помощи.

24

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

Raspberry pi на Python

- ни чего в этом не понимаю

25

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

Добрый день!

Прощу помощи, только начал заниматься ардуино.
Подключил на выход А0 датчик температуры ds18b20, скетч поправил как в сообщении от 2020-04-10 14:32:40.
На экране показывает температуру - 127.0 и в левом верхнем углу мигает буква С.
Неисправен датчик или в скетче что-то не так прописал?

#include <OneWire.h>
#include <DallasTemperature.h>
#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
OneWire oneWire(A0);// вход для датчиков 18b20
DallasTemperature t(&oneWire);
      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(){t.begin(); 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(){
    t.requestTemperatures()
    ;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(t.getTempCByIndex(0),1);lcd.print((char)223);lcd.print("C");
   }