176

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

Если сегмент С в других цифрах горит, то коде есть ошибка. Опубликуйте код который Вы используете.

177

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

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.h> 
#include <DS3231.h>    // https://github.com/jarzebski/Arduino-DS … master.zip
DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i,pd,pd_p,hh,mm;
  byte a[4],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
clock.setOutput(DS3231_1HZ);
pinMode(A0,INPUT); // SQW DS3231
pinMode (A1,INPUT_PULLUP); // часы +
pinMode (A2,INPUT_PULLUP); // минуты +
// кнопки коррекци времени - нажатие === замыкание на GND

}

void loop(){
  DateTime=clock.getDateTime();// опрос времени
  hh=DateTime.hour;mm=DateTime.minute;
  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(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);}
}// 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,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);}

178

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

По коду все верно, не вижу причин почему не работает.

179

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

нашел причину. Замыкание 3,4 ножки под индикатором

180

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

Собрал Ваш проект на светодиодных лентах 12 вольт, работает хорошо , место кнопок уменьшения яркости прикрутил фоторезистор , меняет яркость от освещенности .
http://forum.rcl-radio.ru/uploads/images/2024/08/e3c15ecce3152e14616858c2900edbfa.jpg http://forum.rcl-radio.ru/uploads/images/2024/08/d9808ea85f0a69096c0ae9995b90f929.jpg

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

уважаемый автор. Не могу добиться отключение датчиков кнопкой на A6.Резистор на минус стоит.

182

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

А6 - это только аналоговый вход

183 (2025-10-15 11:08:18 отредактировано Aлександр)

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

Извените за наивность.Форум прочитал. Проект собрал ,все изменения учел. Но не могу добиться отключение датчиков . Спасибо за внимание. Датчик BME-280

184

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

Вы хотите что бы при нажатии на кнопку (А6) показывалось только время, а при повторном нажатии выводились показания датчика?

185 (2025-10-15 16:07:41 отредактировано Aлександр)

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

Добрый вечер. Совершенно верно.  А разве не так было задумано, или я что-то не понял

186

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

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

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

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.h>
#include <Adafruit_Sensor.h>  // http://rcl-radio.ru/wp-content/uploads/ … Sensor.zip
#include <Adafruit_BME280.h>  // https://github.com/adafruit/Adafruit_BME280_Library
#include <DS3231.h>  // https://github.com/jarzebski/Arduino-DS … master.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme; // I2C
  int an, segm,times,i,pd,pd_p,sek,hh,mm;;
  byte a[4],w;
  int hour_br,brig;

void setup(){  Wire.begin();clock.begin();
if (!bme.begin(0x76)) {Serial.println("Could not find a valid BME280!"); while (1);}
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
pinMode (A2,INPUT_PULLUP); // часы +
pinMode (A3,INPUT_PULLUP); // минуты +
// кнопки коррекци времени - нажатие === замыкание на GND
}

void loop(){
  DateTime=clock.getDateTime();// опрос времени
  hh=DateTime.hour;
  mm=DateTime.minute;
  sek=DateTime.second;
  hour_br = DateTime.hour;

  if(hour_br>=22 || hour_br<=7){brig=1000;}else{brig=1;} // уменьшаем яркость с 22 часов до 7 часов
 
  if((sek>=10&&sek<=15)||(sek>=30&&sek<=35)){
    times = bme.readTemperature();
  a[0]=times/10;
  a[1]=times%10;
  a[2]=11;
  a[3]=12;
  pd_p=1;} // nen
  else if((sek>=15&&sek<=20)||(sek>=35&&sek<=40)){
    times = bme.readPressure()/133.3224;
  a[0]=13;
  a[1]=times/100;
  a[2]=times/10%10;
  a[3]=times%10;
  pd_p=1;} // nen
  else if((sek>=20&&sek<=25)||(sek>=40&&sek<=45)){
    times = bme.readHumidity();
  a[0]=14;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;
  pd_p=1;} // nen
  else{
  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(A2)<900){w=1;hh++;if(hh>23){hh=0;}delay(300);}
  if(analogRead(A3)<900){w=1;mm++;if(mm>59){mm=0;}delay(300);}
  if(w==1){w=0;clock.setDateTime(2020, 01, 01, hh, mm, 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; delayMicroseconds(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,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,1);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,1);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
     case 13: ch(2,0);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// P
     case 14: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// H
    }}
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);}

188 (Вчера 05:29:30 отредактировано Aлександр)

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

Доброе утро. Индикатор с о.а .третий индикатор перевернут-мигают обе точки .коррекция времени кнопками на а2 и а3 а копка на а6 не активна -подключена правильно-а6 через 10к на землю . С кнопки плюс на а6.
В этом скетче не прописан А6. Его я пытался активировать в следующем скетче

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

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.h>
#include <Adafruit_Sensor.h>  // http://rcl-radio.ru/wp-content/uploads/ … Sensor.zip
#include <Adafruit_BME280.h>  // https://github.com/adafruit/Adafruit_BME280_Library
#include <DS3231.h>  // https://github.com/jarzebski/Arduino-DS … master.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme; // I2C
  int an, segm,times,i,pd,pd_p,sek,hh,mm,ppp;
  byte a[4],w;
  int hour_br,brig;

void setup(){  Wire.begin();clock.begin();
if (!bme.begin(0x76)) {Serial.println("Could not find a valid BME280!"); while (1);}
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
pinMode (A2,INPUT_PULLUP); // часы +
pinMode (A3,INPUT_PULLUP); // минуты +
// кнопки коррекци времени - нажатие === замыкание на GND
pinMode(A6,INPUT);// отключение датчиковю моё
}



void loop(){
  DateTime=clock.getDateTime();// опрос времени
  if(analogRead(A6)>900&&ppp==0){ppp=1;delay(200);}
  if(analogRead(A6)>900&&ppp==1){ppp=0;delay(200);}
  hh=DateTime.hour;
  mm=DateTime.minute;
  sek=DateTime.second;
  hour_br = DateTime.hour;

  if(hour_br>=22 || hour_br<=7){brig=1000;}else{brig=1;} // уменьшаем яркость с 22 часов до 7 часов
 
  if((sek>=10&&sek<=15)||(sek>=30&&sek<=35)){
    times = bme.readTemperature();
  a[0]=times/10;
  a[1]=times%10;
  a[2]=(times / 10) % 10;
  a[3]=11;
  pd_p=0;} // nen
  else if((sek>=15&&sek<=20)||(sek>=35&&sek<=40)){
    times = bme.readPressure()/133.3224;
  a[0]=13;
  a[1]=times/100;
  a[2]=times/10%10;
  a[3]=times%10;
  pd_p=1;} // nen
  else if((sek>=20&&sek<=25)||(sek>=40&&sek<=45)){
    times = bme.readHumidity();
  a[0]=14;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;
  pd_p=1;} // nen
  else{
  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(A2)<900){w=1;hh++;if(hh>23){hh=0;}delay(300);}
  if(analogRead(A3)<900){w=1;mm++;if(mm>59){mm=0;}delay(300);}
  if(w==1){w=0;clock.setDateTime(2020, 01, 01, hh, mm, 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; delayMicroseconds(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,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,1);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,1);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
     case 13: ch(2,0);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// P
     case 14: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// H
    }}
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);}

190 (Вчера 07:07:09 отредактировано Aлександр)

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

здесь я пытался подклюЧить вывод А6 но увы не заработало

191

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

#include <MsTimer2.h>  // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include <Wire.h>
#include <Adafruit_Sensor.h>  // http://rcl-radio.ru/wp-content/uploads/ … Sensor.zip
#include <Adafruit_BME280.h>  // https://github.com/adafruit/Adafruit_BME280_Library
#include <DS3231.h>  // https://github.com/jarzebski/Arduino-DS … master.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme; // I2C
  int an, segm,times,i,pd,pd_p,sek,hh,mm,ppp;
  byte a[4],w;
  int hour_br,brig;

void setup(){  Wire.begin();clock.begin();
if (!bme.begin(0x76)) {Serial.println("Could not find a valid BME280!"); while (1);}
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
pinMode (A2,INPUT_PULLUP); // часы +
pinMode (A3,INPUT_PULLUP); // минуты +
// кнопки коррекци времени - нажатие === замыкание на GND
pinMode(A6,INPUT);// отключение датчиковю моё
}



void loop(){
  DateTime=clock.getDateTime();// опрос времени
  if(analogRead(A6)>900&&ppp==0){ppp=1;delay(200);}
  if(analogRead(A6)>900&&ppp==1){ppp=0;delay(200);}
  hh=DateTime.hour;
  mm=DateTime.minute;
  sek=DateTime.second;
  hour_br = DateTime.hour;

  if(hour_br>=22 || hour_br<=7){brig=1000;}else{brig=1;} // уменьшаем яркость с 22 часов до 7 часов

 if(ppp==0){
  if((sek>=10&&sek<=15)||(sek>=30&&sek<=35)){
    times = bme.readTemperature();
  a[0]=times/10;
  a[1]=times%10;
  a[2]=(times / 10) % 10;
  a[3]=11;
  pd_p=0;} // nen
  else if((sek>=15&&sek<=20)||(sek>=35&&sek<=40)){
    times = bme.readPressure()/133.3224;
  a[0]=13;
  a[1]=times/100;
  a[2]=times/10%10;
  a[3]=times%10;
  pd_p=1;} // nen
  else if((sek>=20&&sek<=25)||(sek>=40&&sek<=45)){
    times = bme.readHumidity();
  a[0]=14;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;
  pd_p=1;} // nen
  else{
  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(ppp==1){
  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(A2)<900){w=1;hh++;if(hh>23){hh=0;}delay(300);}
  if(analogRead(A3)<900){w=1;mm++;if(mm>59){mm=0;}delay(300);}
  if(w==1){w=0;clock.setDateTime(2020, 01, 01, hh, mm, 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; delayMicroseconds(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,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,1);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,1);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
     case 13: ch(2,0);ch(3,0);ch(4,1);ch(5,1);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// P
     case 14: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,0);ch(7,0);ch(8,0);ch(13,pd);break;// H
    }}
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);}

192 (Вчера 12:53:31 отредактировано Aлександр)

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

Спасибо за помощь. . Спасибо за проект . работает как надо

193

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

if(analogRead(A6)>900&&ppp==0){ppp=1;delay(200);}
if(analogRead(A6)>900&&ppp==1){ppp=0;delay(200);}

Этот код работает правильно, отключает и включает показания датчика, но при нажатии нет индикации о смене режима, пауза всего 200 мс, возможно просто не понятно активен ли датчик или нет. Рекомендую увеличить паузу до 500 мс.

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

все заработало