101

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

Я правки внес, должно работать.

102 (2022-03-25 22:02:36 отредактировано ross74)

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,hh,mm;
  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
pinMode (A1,INPUT_PULLUP); // часы +
pinMode (A2,INPUT_PULLUP); // минуты +  // кнопки коррекци времени - нажатие === замыкание на GND
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();// опрос времени
  hh=DateTime.hour;mm=DateTime.minute;
  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(analogRead(A1)<900){w=1;hh++;if(hh>23){hh=0;}delay(300);}
  if(analogRead(A2)<900){w=1;mm++;if(mm>59){mm=0;}delay(300);}
  if(w==1){w=0;clock.setDateTime(2020, 01, 01, hh, mm, 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);}

103

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,hh,mm;
  byte a[4];
  int brig = 1;
  unsigned long tim;
  byte w,w1;

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
pinMode (A1,INPUT_PULLUP); // часы +
pinMode (A2,INPUT_PULLUP); // минуты +  // кнопки коррекци времени - нажатие === замыкание на GND
brig = EEPROM.read(0);
if(brig>100){brig=1;}
}

void loop(){
  if(digitalRead(0)==LOW){brig++;tim=millis();w1=1;delay(50);if(brig>100){brig=100;}}
  if(digitalRead(1)==LOW){brig--;tim=millis();w1=1;delay(50);if(brig<=0){brig=0;}}
  
  DateTime=clock.getDateTime();// опрос времени
  hh=DateTime.hour;mm=DateTime.minute;
  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(analogRead(A1)<900){w=1;hh++;if(hh>23){hh=0;}delay(300);}
  if(analogRead(A2)<900){w=1;mm++;if(mm>59){mm=0;}delay(300);}
  if(w==1){w=0;clock.setDateTime(2020, 01, 01, hh, mm, 0);}

  if(millis()-tim>10000 && w1==1){EEPROM.update(0,brig);w1=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);}

104

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

Да,всё работает как надо! Огромное спасибо!

105

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

Только не могу понять,что и где вы исправили?

106

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

w1

107

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

Хорошо,понял,спасибо!

108 (2022-03-31 20:48:29 отредактировано kirilchuk.a)

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

Здравствуйте, повторил ваш проект без датчиков, индикаторы чуть больше, с ОА, 7В.Всё прекрасно.А можно ли температуру снимать с самих часов 3231. С индикатором 1602 это реализуется,а здесь? Программировать не могу, копирую,смешиваю.Буду благодарен,если появиться скетч с отражением температуры от самого модуля 3231.

109

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

Опубликуйте скетч который Вы используете.

110

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

#include <DS3231.h>




#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.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];

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;// pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2; anod(); segment();break; //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,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 0
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);ch(13,pd);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 4
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 5
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 6
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 7
    case 8: 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;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 9 
   case 10: 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;// пусто
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break; 
    case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break;
    case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
    case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);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);}

111

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

У меня третий индикатор перевернут,мигают две точки.

112

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

У меня третий индикатор перевернут,мигают две точки.

Это учтено в скетче?

#include <DS3231.h>
#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads … Timer2.zip
#include <Wire.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],w1;
  int temper,sek;

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();// опрос времени
  sek=DateTime.second;
  if((sek>=10&&sek<=15)||(sek>=30&&sek<=35)){
    temper=clock.readTemperature();
  a[0]=temper/10;
  a[1]=temper%10;
  a[2]=11;
  a[3]=12; 
  w1=1; 
  }
  else{
  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;
  w1=0;
  }
  
  if(analogRead(A0)>900&&w1==0){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;// pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2; anod(); segment();break; //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,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 0
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);ch(13,pd);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 4
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 5
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 6
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 7
    case 8: 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;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 9 
   case 10: 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;// пусто
   case 11: ch(2,1);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(13,pd);break;// градус
   case 12: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// C
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break; 
    case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break;
    case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
    case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);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);}

113 (2022-03-31 22:15:47 отредактировано kirilchuk.a)

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

Да. здесь switch(segm){                                                                 
             //  A       B       C       D       E       F       G        PD
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 0
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);ch(13,pd);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 4
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 5
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 6
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 7
    case 8: 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;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 9 
   case 10: 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;// пусто
  }}
и здесь   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;// pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2; anod(); segment();break; //pd=0; an=2; anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); segment();break;}i++;
А индикатор перевернул и изменил распайку сегментов.

114

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

Протестируйте скетч который я опубликовал.

115

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

Всё хорошо,только мне надо переделать знак градус и С.  Я ввёл Вас в заблуждение,сказав,что  перевёрнутый индикатор учтен в скетче.Спасибо огромное ,дальше справлюсь, вижу эти строки.

116 (2022-04-14 01:19:12 отредактировано kirilchuk.a)

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

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

#include <DS3231.h>




#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.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],w1;
  int temper,sek;

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();// опрос времени
  sek=DateTime.second;
  if((sek>=10&&sek<=15)||(sek>=30&&sek<=35)){
    temper=clock.readTemperature()-5;
  a[0]=temper/10;
  a[1]=temper%10;
  a[2]=11;
  a[3]=12;
  w1=1;
  }
  else{
  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;
  w1=0;
  }
 
  if(analogRead(A0)>900&&w1==0){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;// pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2; anod(); segment();break; //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,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// 0
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);ch(13,pd);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);ch(13,pd);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 4
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 5
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// 6
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(13,pd);break;// 7
    case 8: 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;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// 9 
   case 10: 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;// пусто
   case 11: ch(2,0);ch(3,0);ch(4,1);ch(5,1);ch(6,1);ch(7,0);ch(8,0);ch(13,pd);break;// градус
   case 12: ch(2,0);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,1);ch(13,pd);break;// C
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break; 
    case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break;
    case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
    case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);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);}

117

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

Доброго времени суток.Сделал часы по этой схеме и хотел бы спросить можно ли сделать изменение яркости индикаторов в зависимости от времени и как?

118

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

Вот часть кода:

    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;// pd=pd_p; an=1; anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2; anod(); segment();break; //pd=0; an=2; anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); segment();break;}

Укажите паузу:

    case 0: cl(); segm=a[0]; pd=0; an=0;  delayMicroseconds(100);  anod(); segment();break;
    case 1: cl(); segm=a[1];pd=pd_p; an=1; delayMicroseconds(100); anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2;  delayMicroseconds(100); anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); delayMicroseconds(100); segment();break;}

Увеличьте значение delayMicroseconds(100) до момента когда начнется меняться яркость, если все получится дальше напишу как менять яркость по времени.

119

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

Все получилось

120

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

Опубликуйте Ваш скетч.

121

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

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.h> 
#include <DS3231.h>
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(4,OUTPUT); // D13 === PD
pinMode(2,OUTPUT);  // D2  === a
pinMode(3,OUTPUT);  // D3  === b
pinMode(13,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;  delayMicroseconds(500);  anod(); segment();break;
    case 1: cl(); segm=a[1];pd=pd_p; an=1; delayMicroseconds(500); anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2;  delayMicroseconds(500); anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); delayMicroseconds(500); segment();break;}

    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(13,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(4,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(13,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(4,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(13,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(4,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(13,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(4,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(13,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(4,pd);break;// 4
    case 5: ch(2,1);ch(3,0);ch(13,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(4,pd);break;// 5
    case 6: ch(2,1);ch(3,0);ch(13,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(4,pd);break;// 6
    case 7: ch(2,1);ch(3,1);ch(13,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(4,pd);break;// 7
    case 8: ch(2,1);ch(3,1);ch(13,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(4,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(13,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(4,pd);break;// 9 
   case 10: ch(2,0);ch(3,0);ch(13,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(4,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break; 
    case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break;
    case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
    case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);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);}

122

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

В железе не тестировал.
Обратите внимание на следующую строку:

if(hour_br>=23 || hour_br<=6){brig=500;}else{brig=1;}

Предполагается что после 23 часов и до 6 утра  будет пониженная яркость, в остальное время максимальная. Измените время на Ваше усмотрение.

#include <MsTimer2.h>  
#include <Wire.h> 
#include <DS3231.h>
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p;
  byte a[4];
  int hour_br,brig;

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(4,OUTPUT); // D13 === PD
pinMode(2,OUTPUT);  // D2  === a
pinMode(3,OUTPUT);  // D3  === b
pinMode(13,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();// опрос времени
  hour_br = DateTime.hour;

if(hour_br>=23 || hour_br<=6){brig=500;}else{brig=1;}

  
  times = hour_br*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;  delayMicroseconds(brig);  anod(); segment();break;
    case 1: cl(); segm=a[1];pd=pd_p; an=1; delayMicroseconds(brig); anod(); segment();break;
    case 2: cl(); segm=a[2];pd=pd_p; an=2;  delayMicroseconds(brig); anod(); segment();break;
    case 3: cl(); segm=a[3]; pd=0; an=3; anod(); delayMicroseconds(brig); segment();break;}

    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(13,1);ch(5,1);ch(6,1);ch(7,1);ch(8,0);ch(4,pd);break;// 0
    case 1: ch(2,0);ch(3,1);ch(13,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(4,pd);break;// 1
    case 2: ch(2,1);ch(3,1);ch(13,0);ch(5,1);ch(6,1);ch(7,0);ch(8,1);ch(4,pd);break;// 2
    case 3: ch(2,1);ch(3,1);ch(13,1);ch(5,1);ch(6,0);ch(7,0);ch(8,1);ch(4,pd);break;// 3   
    case 4: ch(2,0);ch(3,1);ch(13,1);ch(5,0);ch(6,0);ch(7,1);ch(8,1);ch(4,pd);break;// 4
    case 5: ch(2,1);ch(3,0);ch(13,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(4,pd);break;// 5
    case 6: ch(2,1);ch(3,0);ch(13,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(4,pd);break;// 6
    case 7: ch(2,1);ch(3,1);ch(13,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(4,pd);break;// 7
    case 8: ch(2,1);ch(3,1);ch(13,1);ch(5,1);ch(6,1);ch(7,1);ch(8,1);ch(4,pd);break;// 8
    case 9: ch(2,1);ch(3,1);ch(13,1);ch(5,1);ch(6,0);ch(7,1);ch(8,1);ch(4,pd);break;// 9 
   case 10: ch(2,0);ch(3,0);ch(13,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);ch(4,pd);break;// пусто
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,1);ch(10,0);ch(11,0);ch(12,0);break; 
    case 1:ch(9,0);ch(10,1);ch(11,0);ch(12,0);break;
    case 2:ch(9,0);ch(10,0);ch(11,1);ch(12,0);break;
    case 3:ch(9,0);ch(10,0);ch(11,0);ch(12,1);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);}

123

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

Спасибо огромное! все работает

124

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

Добрый день! Сделал плату, собрал схему, загрузил скетч. В итоге почему то сегментники вообще не горят, светятся индикаторы на датчиках и самой ардуино только)) Сегментники рабочие, проверял. Подавал питание напрямую на сегментники в плате ( на выходы ) , горят.

125

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

Часы реального времени подключены?