76

Re: Большие часы на семисегментных индикаторах BJ18101AH

добавьте заначек влажность
case 14: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// H

вывод показаний влажности на индикатор
else if((sek>=20&&sek<=25)||(sek>=40&&sek<=45)){
    times = bmp.readHumidity();;
  a[0]=14;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;
  pd_p=0;}

77

Re: Большие часы на семисегментных индикаторах BJ18101AH

Дляliman324 Огромное спасибо! Добавил в рабочий скетч и все заработало!

78

Re: Большие часы на семисегментных индикаторах BJ18101AH

Здравствуйте. А где взять скетч для часов с кнопками установки времени?

79

Re: Большие часы на семисегментных индикаторах BJ18101AH

http://forum.rcl-radio.ru/viewtopic.php?pid=1605#p1605

80

Re: Большие часы на семисегментных индикаторах BJ18101AH

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

81

Re: Большие часы на семисегментных индикаторах BJ18101AH

Да и модуль фоторезистора почему-то не работает.

82

Re: Большие часы на семисегментных индикаторах BJ18101AH

Блин. Не туда написал Извиняюсь.

83

Re: Большие часы на семисегментных индикаторах BJ18101AH

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

Отключите вывод dp от индикаторов и подключите к двум светодиодам.

84

Re: Большие часы на семисегментных индикаторах BJ18101AH

Здравствуйте!Повторил проект-всё работает! Возможно ли сделать с кнопок управление яркостью свечения индикаторов?

85

Re: Большие часы на семисегментных индикаторах BJ18101AH

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

86 (2022-03-24 02:15:05 отредактировано ross74)

Re: Большие часы на семисегментных индикаторах BJ18101AH

Хорошо,проведу несколько тестов.Пока собрал без кнопок настройки времени,но в ближайшее время подключу кнопки.
И ещё,как убрать начальный ноль в отображении после полуночи? Вот код,по которому собрано сейчас:

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <Wire.h>  
#include <DS3231.h>    // http://rcl-radio.ru/wp-content/uploads/2022/02/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p;
  byte a[4];
 
void setup(){  Wire.begin();clock.begin();
MsTimer2::set(2, to_Timer);MsTimer2::start();
 //clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
 pinMode(9,OUTPUT);  // D9  === A0
 pinMode(10,OUTPUT); // D10 === A1
 pinMode(11,OUTPUT); // D11 === A2
 pinMode(12,OUTPUT); // D12 === A3
 pinMode(13,OUTPUT); // D13 === PD
 pinMode(2,OUTPUT);  // D2  === a
 pinMode(3,OUTPUT);  // D3  === b
 pinMode(4,OUTPUT);  // D4  === c
 pinMode(5,OUTPUT);  // D5  === d
 pinMode(6,OUTPUT);  // D6  === e
 pinMode(7,OUTPUT);  // D7  === f
 pinMode(8,OUTPUT);  // D8  === g
clock.setOutput(DS3231_1HZ);
 pinMode(A0,INPUT); // SQW DS3231 
}
 
void loop(){ 
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;
 
  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}
 }// loop
 
void to_Timer(){ 
  switch(i){
 
    case 0: cl(); segm=a[0]; pd=0; an=0; anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2; anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); segment();break;}i++;
 
    if(i>3){i=0;}}
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4 
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5 
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6 
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7 
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9  
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
       case 0: ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;
      case 1: ch(9,1);ch(10,0);ch(11,1);ch(12,1);break;
      case 2: ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
      case 3: ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}
 
void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod(); 
  }  
 
  void ch(int pin, int logic){digitalWrite(pin,logic);}

87

Re: Большие часы на семисегментных индикаторах BJ18101AH

Подключите кнопки к пинам арудино А0 и А1
http://forum.rcl-radio.ru/uploads/images/2022/03/9b8c9587cb7f6b0106e641c547a6834c.png


#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads … Timer2.zip
#include <Wire.h> 
#include <EEPROM.h>
#include <DS3231.h>    // http://rcl-radio.ru/wp-content/uploads … DS3231.zip
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p;
  byte a[4];
  int brig = 1;
  unsigned long tim;
  byte w;

void setup(){  Wire.begin();clock.begin();
MsTimer2::set(2, to_Timer);MsTimer2::start();
//clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(9,OUTPUT);  // D9  === A0
pinMode(10,OUTPUT); // D10 === A1
pinMode(11,OUTPUT); // D11 === A2
pinMode(12,OUTPUT); // D12 === A3
pinMode(13,OUTPUT); // D13 === PD
pinMode(2,OUTPUT);  // D2  === a
pinMode(3,OUTPUT);  // D3  === b
pinMode(4,OUTPUT);  // D4  === c
pinMode(5,OUTPUT);  // D5  === d
pinMode(6,OUTPUT);  // D6  === e
pinMode(7,OUTPUT);  // D7  === f
pinMode(8,OUTPUT);  // D8  === g
pinMode(0,INPUT_PULLUP); // pin button +brig
pinMode(1,INPUT_PULLUP); // pin button -brig
clock.setOutput(DS3231_1HZ);
pinMode(A0,INPUT); // SQW DS3231
brig = EEPROM.read(0);
if(brig>100){brig=1;}
}

void loop(){
  if(digitalRead(0)==LOW){brig++;tim=millis();w=1;delay(50);if(brig>100){brig=100;}}
  if(digitalRead(1)==LOW){brig--;tim=millis();w=1;delay(50);if(brig<=0){brig=1;}}
  
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;

  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}

   if(millis()-tim>10000 && w==1){EEPROM.update(0,brig);w=0;}   
}// loop

void to_Timer(){
  switch(i){

    case 0: cl(); segm=a[0]; pd=0; an=0;    delay(brig*20);anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; delay(brig*20);anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2;    delay(brig*20);anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3;    delay(brig*20);anod(); segment();break;}i++;

    if(i>3){i=0;}}

void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9 
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
       case 0: ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;
      case 1: ch(9,1);ch(10,0);ch(11,1);ch(12,1);break;
      case 2: ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
      case 3: ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod();
  } 

  void ch(int pin, int logic){digitalWrite(pin,logic);}

88 (2022-03-24 16:44:46 отредактировано ross74)

Re: Большие часы на семисегментных индикаторах BJ18101AH

На вывод А0 поступают тактовые импульсы   DS3231... Точно кнопку туда подключать?

89

Re: Большие часы на семисегментных индикаторах BJ18101AH

Я перепутал пины, не А0 А1, а D0 D1

90

Re: Большие часы на семисегментных индикаторах BJ18101AH

понял

91

Re: Большие часы на семисегментных индикаторах BJ18101AH

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

92

Re: Большие часы на семисегментных индикаторах BJ18101AH

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads … Timer2.zip
#include <Wire.h> 
#include <EEPROM.h>
#include <DS3231.h>    // http://rcl-radio.ru/wp-content/uploads … DS3231.zip
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p;
  byte a[4];
  int brig = 1;
  unsigned long tim;
  byte w;

void setup(){  Wire.begin();clock.begin();
MsTimer2::set(2, to_Timer);MsTimer2::start();
//clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(9,OUTPUT);  // D9  === A0
pinMode(10,OUTPUT); // D10 === A1
pinMode(11,OUTPUT); // D11 === A2
pinMode(12,OUTPUT); // D12 === A3
pinMode(13,OUTPUT); // D13 === PD
pinMode(2,OUTPUT);  // D2  === a
pinMode(3,OUTPUT);  // D3  === b
pinMode(4,OUTPUT);  // D4  === c
pinMode(5,OUTPUT);  // D5  === d
pinMode(6,OUTPUT);  // D6  === e
pinMode(7,OUTPUT);  // D7  === f
pinMode(8,OUTPUT);  // D8  === g
pinMode(0,INPUT_PULLUP); // pin button +brig
pinMode(1,INPUT_PULLUP); // pin button -brig
clock.setOutput(DS3231_1HZ);
pinMode(A0,INPUT); // SQW DS3231
brig = EEPROM.read(0);
if(brig>100){brig=1;}
}

void loop(){
  if(digitalRead(0)==LOW){brig++;tim=millis();w=1;delay(50);if(brig>100){brig=100;}}
  if(digitalRead(1)==LOW){brig--;tim=millis();w=1;delay(50);if(brig<=0){brig=0;}}
  
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;

  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}

   if(millis()-tim>10000 && w==1){EEPROM.update(0,brig);w=0;}   
}// loop

void to_Timer(){
  switch(i){

    case 0: cl(); segm=a[0]; pd=0; an=0;    if(brig>0){delay(brig*20);}anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; if(brig>0){delay(brig*20);}anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2;    if(brig>0){delay(brig*20);}anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3;    if(brig>0){delay(brig*20);}anod(); segment();break;}i++;

    if(i>3){i=0;}}

void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9 
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
       case 0: ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;
      case 1: ch(9,1);ch(10,0);ch(11,1);ch(12,1);break;
      case 2: ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
      case 3: ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod();
  } 

  void ch(int pin, int logic){digitalWrite(pin,logic);}

93 (2022-03-25 15:59:49 отредактировано ross74)

Re: Большие часы на семисегментных индикаторах BJ18101AH

Сделал.Последняя ступень увеличения яркости имеет больший шаг переключения,по сравнению с предыдущими,т.е. более резко заметно изменение яркости от предпоследней ступени до последней,но в принципе меня устраивает. Большое спасибо! И ещё,если несложно,напишите,что изменить в коде, чтобы убрать начальный ноль в отображении времени после полуночи.

94

Re: Большие часы на семисегментных индикаторах BJ18101AH

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads … Timer2.zip
#include <Wire.h> 
#include <EEPROM.h>
#include <DS3231.h>    // http://rcl-radio.ru/wp-content/uploads … DS3231.zip
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p;
  byte a[4];
  int brig = 1;
  unsigned long tim;
  byte w;

void setup(){  Wire.begin();clock.begin();
MsTimer2::set(2, to_Timer);MsTimer2::start();
//clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(9,OUTPUT);  // D9  === A0
pinMode(10,OUTPUT); // D10 === A1
pinMode(11,OUTPUT); // D11 === A2
pinMode(12,OUTPUT); // D12 === A3
pinMode(13,OUTPUT); // D13 === PD
pinMode(2,OUTPUT);  // D2  === a
pinMode(3,OUTPUT);  // D3  === b
pinMode(4,OUTPUT);  // D4  === c
pinMode(5,OUTPUT);  // D5  === d
pinMode(6,OUTPUT);  // D6  === e
pinMode(7,OUTPUT);  // D7  === f
pinMode(8,OUTPUT);  // D8  === g
pinMode(0,INPUT_PULLUP); // pin button +brig
pinMode(1,INPUT_PULLUP); // pin button -brig
clock.setOutput(DS3231_1HZ);
pinMode(A0,INPUT); // SQW DS3231
brig = EEPROM.read(0);
if(brig>100){brig=1;}
}

void loop(){
  if(digitalRead(0)==LOW){brig++;tim=millis();w=1;delay(50);if(brig>200){brig=200;}}
  if(digitalRead(1)==LOW){brig--;tim=millis();w=1;delay(50);if(brig<=0){brig=0;}}
  
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  if(a[0]==0){a[0]=10;}
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;

  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}

   if(millis()-tim>10000 && w==1){EEPROM.update(0,brig);w=0;}   
}// loop

void to_Timer(){
  switch(i){

    case 0: cl(); segm=a[0]; pd=0; an=0;    if(brig>0){delay(brig*10);}anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; if(brig>0){delay(brig*10);}anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2;    if(brig>0){delay(brig*10);}anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3;    if(brig>0){delay(brig*10);}anod(); segment();break;}i++;

    if(i>3){i=0;}}

void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9 
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
       case 0: ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;
      case 1: ch(9,1);ch(10,0);ch(11,1);ch(12,1);break;
      case 2: ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
      case 3: ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod();
  } 

  void ch(int pin, int logic){digitalWrite(pin,logic);}

95

Re: Большие часы на семисегментных индикаторах BJ18101AH

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

96

Re: Большие часы на семисегментных индикаторах BJ18101AH

Попробуйте этот вариант

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads … Timer2.zip
#include <Wire.h> 
#include <EEPROM.h>
#include <DS3231.h>    // http://rcl-radio.ru/wp-content/uploads … DS3231.zip
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p;
  byte a[4];
  int brig = 1;
  unsigned long tim;
  byte w;

void setup(){  Wire.begin();clock.begin();
MsTimer2::set(2, to_Timer);MsTimer2::start();
//clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(9,OUTPUT);  // D9  === A0
pinMode(10,OUTPUT); // D10 === A1
pinMode(11,OUTPUT); // D11 === A2
pinMode(12,OUTPUT); // D12 === A3
pinMode(13,OUTPUT); // D13 === PD
pinMode(2,OUTPUT);  // D2  === a
pinMode(3,OUTPUT);  // D3  === b
pinMode(4,OUTPUT);  // D4  === c
pinMode(5,OUTPUT);  // D5  === d
pinMode(6,OUTPUT);  // D6  === e
pinMode(7,OUTPUT);  // D7  === f
pinMode(8,OUTPUT);  // D8  === g
pinMode(0,INPUT_PULLUP); // pin button +brig
pinMode(1,INPUT_PULLUP); // pin button -brig
clock.setOutput(DS3231_1HZ);
pinMode(A0,INPUT); // SQW DS3231
brig = EEPROM.read(0);
if(brig>100){brig=1;}
}

void loop(){
  if(digitalRead(0)==LOW){brig++;tim=millis();w=1;delay(50);if(brig>255){brig=255;}}
  if(digitalRead(1)==LOW){brig--;tim=millis();w=1;delay(50);if(brig<=0){brig=0;}}
  
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  if(a[0]==0){a[0]=10;}
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;

  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}

   if(millis()-tim>10000 && w==1){EEPROM.update(0,brig);w=0;}   
}// loop

void to_Timer(){
  switch(i){

    case 0: cl(); segm=a[0]; pd=0; an=0;    if(brig>0){delay(brig);}anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; if(brig>0){delay(brig);}anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2;    if(brig>0){delay(brig);}anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3;    if(brig>0){delay(brig);}anod(); segment();break;}i++;

    if(i>3){i=0;}}

void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9 
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
       case 0: ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;
      case 1: ch(9,1);ch(10,0);ch(11,1);ch(12,1);break;
      case 2: ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
      case 3: ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod();
  } 

  void ch(int pin, int logic){digitalWrite(pin,logic);}

97

Re: Большие часы на семисегментных индикаторах BJ18101AH

Сделал. Кнопки практически не стали управлять яркостью,только максимум и предмаксимум.

98

Re: Большие часы на семисегментных индикаторах BJ18101AH

Лучше уже не получится, убрать перепад с максимума до следующий ступени полностью устранить я не смогу

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads … Timer2.zip
#include <Wire.h> 
#include <EEPROM.h>
#include <DS3231.h>    // http://rcl-radio.ru/wp-content/uploads … DS3231.zip
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p;
  byte a[4];
  int brig = 1;
  unsigned long tim;
  byte w;

void setup(){  Wire.begin();clock.begin();
MsTimer2::set(2, to_Timer);MsTimer2::start();
//clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
pinMode(9,OUTPUT);  // D9  === A0
pinMode(10,OUTPUT); // D10 === A1
pinMode(11,OUTPUT); // D11 === A2
pinMode(12,OUTPUT); // D12 === A3
pinMode(13,OUTPUT); // D13 === PD
pinMode(2,OUTPUT);  // D2  === a
pinMode(3,OUTPUT);  // D3  === b
pinMode(4,OUTPUT);  // D4  === c
pinMode(5,OUTPUT);  // D5  === d
pinMode(6,OUTPUT);  // D6  === e
pinMode(7,OUTPUT);  // D7  === f
pinMode(8,OUTPUT);  // D8  === g
pinMode(0,INPUT_PULLUP); // pin button +brig
pinMode(1,INPUT_PULLUP); // pin button -brig
clock.setOutput(DS3231_1HZ);
pinMode(A0,INPUT); // SQW DS3231
brig = EEPROM.read(0);
if(brig>100){brig=1;}
}

void loop(){
  if(digitalRead(0)==LOW){brig++;tim=millis();w=1;delay(50);if(brig>250){brig=250;}}
  if(digitalRead(1)==LOW){brig--;tim=millis();w=1;delay(50);if(brig<=0){brig=0;}}
  
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  if(a[0]==0){a[0]=10;}
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;

  if(analogRead(A0)>900){pd_p=1;}else{pd_p=0;}

   if(millis()-tim>10000 && w==1){EEPROM.update(0,brig);w=0;}   
}// loop

void to_Timer(){
  switch(i){

    case 0: cl(); segm=a[0]; pd=0; an=0;    if(brig>0){delay(brig*5);}anod(); segment();break;
    case 1: cl(); segm=a[1]; pd=pd_p; an=1; if(brig>0){delay(brig*5);}anod(); segment();break;
    case 2: cl(); segm=a[2]; pd=0; an=2;    if(brig>0){delay(brig*5);}anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3;    if(brig>0){delay(brig*5);}anod(); segment();break;}i++;

    if(i>3){i=0;}}

void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(13,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 4
    case 5: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 5
    case 6: ch(2,1);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 6
    case 7: ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 7
    case 8: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(4,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// 9 
   case 10: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
       case 0: ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;
      case 1: ch(9,1);ch(10,0);ch(11,1);ch(12,1);break;
      case 2: ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
      case 3: ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}

void cl(){
     segm=10; pd=0; an=0; segment(); anod(); an=1; segment(); anod();  an=2; segment(); anod();  an=3; segment();anod();
  } 

  void ch(int pin, int logic){digitalWrite(pin,logic);}

99

Re: Большие часы на семисегментных индикаторах BJ18101AH

Скорость регулировки можно поменять, я выделил параметр:

  if(digitalRead(0)==LOW){brig++;tim=millis();w=1;delay(50);if(brig>250){brig=250;}}
  if(digitalRead(1)==LOW){brig--;tim=millis();w=1;delay(50);if(brig<=0){brig=0;}}

100 (2022-03-25 17:44:08 отредактировано ross74)

Re: Большие часы на семисегментных индикаторах BJ18101AH

Хорошо,понял.Ещё,как убрать ноль в отображении   с ноля до девяти часов?