176

Re: Часы с календарем

Здравствуйте. Ночной режим можно добавить? С 22:00 до 7:00.

Полное гашение индикаторов или затемнение?

Двоеточие и год 20 затемнить не получится.

177

Re: Часы с календарем

Нужно будет провести эксперимент, Яркость индикаторов можно изменить.
При загорании индикатора в коде предусмотренно полное гашение всех сегментов и отключение анодов. Это сделано для устранения засветки сегментов. Я изменил скетч, теперь можно изменить время гашения, тем самым регулируя яркость свечения.

Каждый индикатор загорается с частотой 400 Гц, то есть период свечения 2,5 мс

Я вывел в скетч параметр :

int brig = 1500;

Это время гашения в мкс, Вам нужно подобрать это значение для оптимальной яркости свечения в ночном режиме

// 19 === SCL
// 20 === SDA

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11


#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire  ds(20); // Вход датчика 18b20  (PC4 23 пин контр)

long oldPosition  = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;

int brig = 1500;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  pinMode (EXIT,INPUT_PULLUP);
}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;
  if(millis()-times1>10){temp=dsRead(0);times1=millis();}
//  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

178 (2023-08-29 10:54:08 отредактировано Djonny 2022)

Re: Часы с календарем

liman324 пишет:

Нужно будет провести эксперимент, Яркость индикаторов можно изменить.
При загорании индикатора в коде предусмотренно полное гашение всех сегментов и отключение анодов. Это сделано для устранения засветки сегментов. Я изменил скетч, теперь можно изменить время гашения, тем самым регулируя яркость свечения.

Каждый индикатор загорается с частотой 400 Гц, то есть период свечения 2,5 мс

Я вывел в скетч параметр :

int brig = 1500;

Это время гашения в мкс, Вам нужно подобрать это значение для оптимальной яркости свечения в ночном режиме

// 19 === SCL
// 20 === SDA

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11


#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire  ds(20); // Вход датчика 18b20  (PC4 23 пин контр)

long oldPosition  = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;

int brig = 1500;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  pinMode (EXIT,INPUT_PULLUP);
}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;
  if(millis()-times1>10){temp=dsRead(0);times1=millis();}
//  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

После работы проверю. Это просто тест?

179

Re: Часы с календарем

Я дописал изминение яркости по времени

// 19 === SCL
// 20 === SDA

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11


#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire  ds(20); // Вход датчика 18b20  (PC4 23 пин контр)

long oldPosition  = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;

int brig = 1500;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  pinMode (EXIT,INPUT_PULLUP);
}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;
  if(millis()-times1>10){temp=dsRead(0);times1=millis();}
//  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(hour<7&&hour>=22){brig_g=brig;}else{brig_g=200;}
  
  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

180

Re: Часы с календарем

Чё то я не догоняю чё делать в скетче,меняю значение с 1500 меньше яркость не меняется. Время выставляю 6:59 должно быть пониженное свечение,затем оттикало 7:00 и должна яркость Макс появится,так ли я думаю?

181

Re: Часы с календарем

Загрузите пока этот скетч - http://forum.rcl-radio.ru/viewtopic.php?pid=8398#p8398

Значение int brig = 1500; надо менять до 2300 2400 примерно

182

Re: Часы с календарем

liman324 пишет:

Загрузите пока этот скетч - http://forum.rcl-radio.ru/viewtopic.php?pid=8398#p8398

Значение int brig = 1500; надо менять до 2300 2400 примерно

1500 и надо,больше начинает мерцание

183

Re: Часы с календарем

Если мерцание то измените параметр
OCR1A = 300;

на

OCR1A = 150;

184

Re: Часы с календарем

Затемнение по времени должно работать

// 19 === SCL
// 20 === SDA

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11


#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire  ds(20); // Вход датчика 18b20  (PC4 23 пин контр)

long oldPosition  = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;

int brig = 1500;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  pinMode (EXIT,INPUT_PULLUP);
}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;
  if(millis()-times1>10){temp=dsRead(0);times1=millis();}
//  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
  
  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

185

Re: Часы с календарем

У меня температура с ds3231

Нет, с Ds18B20

186

Re: Часы с календарем

Часы про которые писал с буквенной дня недели в силе?

Да, в силе.

Я про эти часы имел виду

Как скажите. Программно добавить датчик достаточно просто.

187

Re: Часы с календарем

Потом к себе добавите в копилку проект.Может кому то понравится.

Проект интересный, я обязательно статью напишу.

188

Re: Часы с календарем

Температура с DS3231

// 19 === SCL
// 20 === SDA

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11


#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire  ds(20); // Вход датчика 18b20  (PC4 23 пин контр)

long oldPosition  = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;

int brig = 1500;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  pinMode (EXIT,INPUT_PULLUP);
}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;
//  if(millis()-times1>10){temp=dsRead(0);times1=millis();}
  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
  
  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

189

Re: Часы с календарем

Здравствуйте. Ещё просьба в версии DS3231 с DS18B20 можно добавить знак минус к температуре отдельно светодиод?

190

Re: Часы с календарем

Макет готов,осталось подключение к пинам контроллера mega16

191

Re: Часы с календарем

Здравствуйте. Ещё просьба в версии DS3231 с DS18B20 можно добавить знак минус к температуре отдельно светодиод?

Светодиод будет встроен в часы? Под него нужен свободный пин.

192

Re: Часы с календарем

liman324 пишет:

Здравствуйте. Ещё просьба в версии DS3231 с DS18B20 можно добавить знак минус к температуре отдельно светодиод?

Светодиод будет встроен в часы? Под него нужен свободный пин.

Отдельный светодиод под знак минус

193

Re: Часы с календарем

23 вывод Atmega16 свободен?

194

Re: Часы с календарем

liman324 пишет:

23 вывод Atmega16 свободен?

Там же датчик DS18B20

195

Re: Часы с календарем

// 19 === SCL
// 20 === SDA

//// Катоды 1 группа
#define SEG_A1       28 // 33 
#define SEG_B1       29 // 32 
#define SEG_C1       30 // 31
#define SEG_D1       31 // 30
#define SEG_E1       23 // 26
#define SEG_F1       22 // 25
#define SEG_G1       21 // 24 
//// Катоды 2 группа
#define SEG_A2       11 // 13 
#define SEG_B2       12 // 14 
#define SEG_C2       13 // 15
#define SEG_D2       14 // 16
#define SEG_E2       15 // 17
#define SEG_F2       18 // 21
#define SEG_G2       19 // 22 
//// Катоды 3 группа
#define SEG_A3        1 // 44
#define SEG_B3        2 // 43 
#define SEG_C3        3 // 42
#define SEG_D3        4 // 41
#define SEG_E3        5 // 1
#define SEG_F3        6 // 2
#define SEG_G3        7 // 3 
//// Аноды
#define AN_1        27 // 34
#define AN_2        26 // 35
#define AN_3        25 // 36
#define AN_4        24 // 37
#define AN_5        0  // 40

#define MENU         8 // 9
#define UP           9 // 10
#define EXIT        10 // 11

#define LED_MIN     20 // 23


#include <Wire.h>
#include <DS3231.h>             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
DS3231 clock;RTCDateTime DateTime;
OneWire  ds(20); // Вход датчика 18b20  (PC4 23 пин контр)

long oldPosition  = -999, newPosition, times,times1;
int an, segm1, segm2, segm3, i, set;
byte d1, d0, h1, h0, m1, m0, s1, s0, t1, t0, ms1, ms0, g0, g1, dn;
int hour,minut,secon,data,mon,year,den,temp;
int hh, mm , ss , dd , mes, god;
int brig_g;

int brig = 1500;


void setup() {
  Wire.begin();
  clock.begin();
 // clock.setDateTime(2023, 8, 26, 20, 40, 0);
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
// (8000000/((300+1)x64))=415.28239202658 Hz
  OCR1A = 300;
  TCCR1B |= (1 << WGM12);
// Prescaler 64
  TCCR1B |= (1 << CS11) | (1 << CS10);
  TIMSK |= (1 << OCIE1A);
  sei();
  pinMode(SEG_A1, OUTPUT);
  pinMode(SEG_B1, OUTPUT);
  pinMode(SEG_C1, OUTPUT);
  pinMode(SEG_D1, OUTPUT);
  pinMode(SEG_E1, OUTPUT);
  pinMode(SEG_F1, OUTPUT);
  pinMode(SEG_G1, OUTPUT);
  pinMode(AN_1, OUTPUT);
  pinMode(AN_2, OUTPUT);
  pinMode(AN_3, OUTPUT);
  pinMode(AN_4, OUTPUT);
  pinMode(AN_5, OUTPUT);
  pinMode(SEG_A2, OUTPUT);
  pinMode(SEG_B2, OUTPUT);
  pinMode(SEG_C2, OUTPUT);
  pinMode(SEG_D2, OUTPUT);
  pinMode(SEG_E2, OUTPUT);
  pinMode(SEG_F2, OUTPUT);
  pinMode(SEG_G2, OUTPUT);

  pinMode(SEG_A3, OUTPUT);
  pinMode(SEG_B3, OUTPUT);
  pinMode(SEG_C3, OUTPUT);
  pinMode(SEG_D3, OUTPUT);
  pinMode(SEG_E3, OUTPUT);
  pinMode(SEG_F3, OUTPUT);
  pinMode(SEG_G3, OUTPUT);

  pinMode (MENU,INPUT_PULLUP);
  pinMode (UP,INPUT_PULLUP);
  pinMode (EXIT,INPUT_PULLUP);

  pinMode(LED_MIN, OUTPUT);
}

void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  data = DateTime.day;mon = DateTime.month;year = DateTime.year;
  den=DateTime.dayOfWeek;
  if(millis()-times1>10){temp=dsRead(0);times1=millis();}

  if(temp<0){temp = abs(temp);digitalWrite(LED_MIN,HIGH);}else{digitalWrite(LED_MIN,LOW);}
//  temp=clock.readTemperature();
  hh=hour;mm=minut;ss=secon;dd=data;mes=mon;god=year;

  if(hour<7||hour>=22){brig_g=brig;}else{brig_g=200;}
  
  if(digitalRead(MENU)==LOW){set++;if(set>6){set=0;}delay(200);}
  if(digitalRead(EXIT)==LOW){set=0;delay(200);}
   if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(year, mon, data, hh, minut, secon);delay(200);}
   if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(year, mon, data, hour, mm, secon);delay(200);}
   if(set==3 && digitalRead(UP)==LOW){ss=0; clock.setDateTime(year, mon, data, hour, minut, ss);delay(200);}
   if(set==4 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(year, mon, dd, hour, minut, secon);delay(200);}
   if(set==5 && digitalRead(UP)==LOW){mes++;if(mes>12){mes=1;}clock.setDateTime(year, mes, data, hour, minut, secon);delay(200);}
   if(set==6 && digitalRead(UP)==LOW){god++;if(god>2099){god=2023;}clock.setDateTime(god, mon, data, hour, minut, secon);delay(200);}

 if(set==1&&millis()-times<200){h1=10;h0=10;}  
  else{  if(hour/10%10==0){h1=10;}else{h1 = hour/10%10;}h0 = hour%10; }
 if(set==2&&millis()-times<200){m1=10;m0=10;}  
  else{  m1 = minut/10%10; m0 = minut%10; }
 if(set==3&&millis()-times<200){s1=10;s0=10;} 
  else{ s1 = secon/10%10;s0 = secon%10; }

 if(set==4&&millis()-times<200){d1=10;d0=10;}   
  else{  if(data/10%10==0){d1=10;}else{d1 = data/10%10;}d0 = data%10; }
 if(set==5&&millis()-times<200){ms1=10;ms0=10;}  
  else{ if(mon/10%10==0){ms1=10;}else{ms1 = mon/10%10;}ms0 = mon%10;  }

 if(set==6&&millis()-times<200){g1=10;g0=10;}  
  else{ g1 = (year-2000)/10%10; g0 = (year-2000)%10; }

  dn = den+10; 
  // ds > 1пн 2вт 3ср 4чт 5пт 6сб 7вс 
  // jh > 1вс 2пн 3вт 4ср 5чт 6ст 7сб
  
  t1 = temp/10%10;
  t0 = temp%10;

 if(millis()-times>400){times=millis();}
  delay(100);
}

ISR(TIMER1_COMPA_vect){
  switch (i) {
    // Q1
    case 0: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = m0; segm1 = d0; segm3 = g1;  segment_1(); segment_2(); segment_3();an = 0; anod();break;
    // Q2
    case 1: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm2 = s1; segm1 = dn; segm3 = g0;segment_1(); segment_2(); segment_3();an = 1; anod();break;
    // Q3
    case 2: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h1; segm2 = s0; segm3 = ms1;segment_1(); segment_2(); segment_3();an = 2; anod();break;
    // Q4
    case 3: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = h0; segm2 = t1; segm3 = ms0;  segment_1(); segment_2(); segment_3();an = 3; anod();break;
    // Q5
    case 4: segm1 = 10; segm2 = 10; segm3 = 10; segment_1(); segment_2(); segment_3(); an = 5; anod(); delayMicroseconds(brig_g);
      segm1 = m1; segm2 = t0; segm3 = d1; segment_1(); segment_2(); segment_3();an = 4; anod();break;
  }
  i++;if (i > 4) {i = 0;}
}


void segment_1() {
  switch (segm1) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // 0
    case 1: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 1
    case 2: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 2
    case 3: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // 3
    case 4: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 4
    case 5: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 5
    case 6: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 6
    case 7: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // 7
    case 8: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 0); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 8
    case 9: ch(SEG_A1, 0); ch(SEG_B1, 0); ch(SEG_C1, 0); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 0); break; // 9
    case 10: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // пусто
    
    case 17: ch(SEG_A1, 0); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВС
    case 11: ch(SEG_A1, 1); ch(SEG_B1, 0); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ПН
    case 12: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 0); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ВТ
    case 13: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 0); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // СР 
    case 14: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 0); ch(SEG_F1, 1); ch(SEG_G1, 1); break; // ЧТ
    case 15: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 0); ch(SEG_G1, 1); break; // ПТ
    case 16: ch(SEG_A1, 1); ch(SEG_B1, 1); ch(SEG_C1, 1); ch(SEG_D1, 1); ch(SEG_E1, 1); ch(SEG_F1, 1); ch(SEG_G1, 0); break; // СБ
  }
}
void segment_2() {
  switch (segm2) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 1); break; // 0
    case 1: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 1
    case 2: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 1); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 2
    case 3: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 0); break; // 3
    case 4: ch(SEG_A2, 1); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 4
    case 5: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 5
    case 6: ch(SEG_A2, 0); ch(SEG_B2, 1); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 6
    case 7: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // 7
    case 8: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 0); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 8
    case 9: ch(SEG_A2, 0); ch(SEG_B2, 0); ch(SEG_C2, 0); ch(SEG_D2, 0); ch(SEG_E2, 1); ch(SEG_F2, 0); ch(SEG_G2, 0); break; // 9
    case 10: ch(SEG_A2, 1); ch(SEG_B2, 1); ch(SEG_C2, 1); ch(SEG_D2, 1); ch(SEG_E2, 1); ch(SEG_F2, 1); ch(SEG_G2, 1); break; // пусто
  }
}
void segment_3() {
  switch (segm3) {
    //  A          B           C            D          E          F         G
    case 0: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 1); break; // 0
    case 1: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 1
    case 2: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 1); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 2
    case 3: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 0); break; // 3
    case 4: ch(SEG_A3, 1); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 4
    case 5: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 5
    case 6: ch(SEG_A3, 0); ch(SEG_B3, 1); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 6
    case 7: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // 7
    case 8: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 0); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 8
    case 9: ch(SEG_A3, 0); ch(SEG_B3, 0); ch(SEG_C3, 0); ch(SEG_D3, 0); ch(SEG_E3, 1); ch(SEG_F3, 0); ch(SEG_G3, 0); break; // 9
    case 10: ch(SEG_A3, 1); ch(SEG_B3, 1); ch(SEG_C3, 1); ch(SEG_D3, 1); ch(SEG_E3, 1); ch(SEG_F3, 1); ch(SEG_G3, 1); break; // пусто
  }
}

void anod() {
  switch (an) {
    case 0: ch(AN_1, 0); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 1: ch(AN_1, 1); ch(AN_2, 0); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
    case 2: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 0); ch(AN_4, 1); ch(AN_5, 1); break;
    case 3: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 0); ch(AN_5, 1); break;
    case 4: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 0); break;
    case 5: ch(AN_1, 1); ch(AN_2, 1); ch(AN_3, 1); ch(AN_4, 1); ch(AN_5, 1); break;
  }
}
void ch(int pin, int logic) {
  digitalWrite(pin, logic);
}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}

196

Re: Часы с календарем

А свободные пины есть?

197

Re: Часы с календарем

liman324 пишет:

А свободные пины есть?

7 ,8 пин свободны

198

Re: Часы с календарем

7 ,8 пин свободны

Они под кварц, у них нет другого назначения

199

Re: Часы с календарем

liman324 пишет:

7 ,8 пин свободны

Они под кварц, у них нет другого назначения

Ну 11 пин можно,он под кнопку EXIT,

200

Re: Часы с календарем

В индикаторе под десятки месяцев есть же неиспользуемые выводы

http://forum.rcl-radio.ru/uploads/images/2023/08/f0154662377bf7037e9732ba61f02315.png