51

Re: Ретро часы на ИВ-6

http://forum.rcl-radio.ru/uploads/images/2020/02/4593b8039fa25c0c895dd0d06f6c8bea.jpg
http://forum.rcl-radio.ru/uploads/images/2020/02/c2ef9df358e3efb195b0da632ab67fa7.jpg

52 (2020-02-16 16:42:05 отредактировано 2080_johnny)

Re: Ретро часы на ИВ-6

Каждый индикатор был распаян на двухсторонней макетке. В середине сделано отверстие под светодиод 5 мм. При желании, его можно установить и организовать нижнюю подсветку индикаторов. Разъемы индикаторов, типа дюпонт, с шагом 2,54 мм, На макетке распаяны все индикаторы, с помощью перемычек из медного провода.

http://forum.rcl-radio.ru/uploads/images/2020/02/83d7aa92a396f0107070b27e2976e756.jpg
http://forum.rcl-radio.ru/uploads/images/2020/02/fb6ac13f6f2aedac34dd6e1fa21f8cf6.jpg

53

Re: Ретро часы на ИВ-6

Замечен эффект проявления единиц секунд в индикаторе десятков часов, еле заметное зажигание сегментов в такт с единицами секунд.Установка резисторов между базой и эмиттером, для устранения внутренних токов и неполного  закрытия транзисторов результатов не дала. Данный эффект проявляется только в первом индикаторе. Возможно, из-за макетной сборки или еще чего-то, что я не учел.

54

Re: Ретро часы на ИВ-6

Попробуйте этот скетч, возможно проблема будет решена:

#include <MsTimer2.h>
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;RTCDateTime DateTime;
  int an, segm,i;
  byte a[6];

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(0,OUTPUT); // D0 === A4
pinMode(1,OUTPUT); // D1 === A5

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


}

void loop(){
  DateTime=clock.getDateTime();// опрос времени
  a[0]=DateTime.hour/10;
  a[1]=DateTime.hour%10;
  a[2]=DateTime.minute/10;
  a[3]=DateTime.minute%10;
  a[4]=DateTime.second/10;
  a[5]=DateTime.second%10;

}// loop

void to_Timer(){
  switch(i){
    case 0: cl();segm=a[0]; an=0; anod(); segment();break;
    case 1: cl();segm=a[1]; an=1; anod(); segment();break;
    case 2: cl();segm=a[2]; an=2; anod(); segment();break;
    case 3: cl();segm=a[3]; an=3; anod(); segment();break;
    case 4: cl();segm=a[4]; an=4; anod(); segment();break;
    case 5: cl();segm=a[5]; an=5; anod(); segment();break;
    }
    i++;if(i>5){i=0;}}


void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G 
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);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);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);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);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);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);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);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);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);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);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);break;// гашение цифры
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,0);ch(10,1);ch(11,1);ch(12,1);ch(0,1);ch(1,1);break; 
    case 1:ch(9,1);ch(10,0);ch(11,1);ch(12,1);ch(0,1);ch(1,1);break;
    case 2:ch(9,1);ch(10,1);ch(11,0);ch(12,1);ch(0,1);ch(1,1);break;
    case 3:ch(9,1);ch(10,1);ch(11,1);ch(12,0);ch(0,1);ch(1,1);break;
    case 4:ch(9,1);ch(10,1);ch(11,1);ch(12,1);ch(0,0);ch(1,1);break;
    case 5:ch(9,1);ch(10,1);ch(11,1);ch(12,1);ch(0,1);ch(1,0);break;
  }}

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

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

55 (2020-02-16 22:52:41 отредактировано 2080_johnny)

Re: Ретро часы на ИВ-6

https://mysku.ru/blog/ebay/46749.html
Обратите внимание на данную статью. В ней есть схема повышающего преобразователя, основанного на Ардуино, без применения дополнительных микросхем. Если реализовывать схему с секундами, то там остается свободный выход D13. Его и можно задействовать для создания ШИМ, для повышающего преобразователя. А в схеме без секунд и того больше свободных выходов Ардуино.

56

Re: Ретро часы на ИВ-6

2080_johnny пишет:

https://mysku.ru/blog/ebay/46749.html
Обратите внимание на данную статью. В ней есть схема повышающего преобразователя, основанного на Ардуино, без применения дополнительных микросхем. Если реализовывать схему с секундами, то там остается свободный выход D13. Его и можно задействовать для создания ШИМ, для повышающего преобразователя. А в схеме без секунд и того больше свободных выходов Ардуино.

Да-к решение использовать ШИМ с Ардуино для раскачки полевого транзистора в повышающем преобразователе не нова и используется во многих  проекта на ВЛИ или ГРИ. Мне не нравится отсутствие обратной связи на выходе преобразователя, и как результат не стабильное выходное напряжение. Руки не доходят реализовать правильно.

Ещё больше свободных выходов остаётся если использовать двоично-десятичный дешифратор для семисегментных индикаторов, на такое напряжение (27В) мне что то не попадались, а К176, К514 есть в запасах. Нужно пробовать.

57 (2020-02-27 23:01:52 отредактировано ak47russia)

Re: Ретро часы на ИВ-6

Господа, подскажите пожалуйста что не так:
iv6-1:4:14: error: 'RTCDateTime' does not name a type; did you mean 'DateTime'?

DS3231 clock;RTCDateTime DateTime;

какая библиотека использована? sad

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

P.S сори если вопрос тупой.

58

Re: Ретро часы на ИВ-6

Данный контент доступен только зарегистрированным пользователям.

59

Re: Ретро часы на ИВ-6

liman324 пишет:

Данный контент доступен только зарегистрированным пользователям.

Подскажите пожалуйста, почему после сброса питания остается время компиляции, а не текущее?

60

Re: Ретро часы на ИВ-6

clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча

залили скетч

// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча

снова залили скетч

61

Re: Ретро часы на ИВ-6

liman324 пишет:

clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча

залили скетч

// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча

снова залили скетч

Огромной спасибо за столь быстрый ответ и главное по теме!

Помогло!

62

Re: Ретро часы на ИВ-6

И снова здравствуйте! Потихоньку продолжаю собирать часы.Такой вопрос, хотел объединить все 8 индикаторов для динамической индикации. Такой вопрос, возможно ли в скетче сделать корректировку, чтобы зажечь сегменты G, на индикаторах, которые выполняют роль разделительных чёрточек между часами, минутами и секундами? В данном случае, я бы использовал пин D13 и пин А0, которые высвободились в схеме, для управления сетками индикаторов 3 и 6.

63

Re: Ретро часы на ИВ-6

На сегмент G можно просто подать +27 В через 100К если он не будет мигать и не использовать для них динамическую индикацию
Если они будут мигать, то через транзисторные ключи ими можно управлять с цифровых выходов D0 D1 с использованием динамической индикации.

64

Re: Ретро часы на ИВ-6

Это понятно, что в первоначальной схеме, на сегмент G мы подаём питание и он просто светится. Но если я объединю все сегменты восьми индикаторов, такой возможности у меня уже не будет. А пины  D0 и D1 уже заняты выводом секунд. Ниже ваш рабочий скетч, который вы предоставили для тестирования.

  • #include <MsTimer2.h>
    #include <Wire.h>
    #include <DS3231.h>
    DS3231 clock;RTCDateTime DateTime;
      int an, segm,i;
      byte a[6];

    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); // D0 === A4
    pinMode(0,OUTPUT); // D1 === A5

    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


    }

    void loop(){
      DateTime=clock.getDateTime();// опрос времени
      a[0]=DateTime.hour/10;
      a[1]=DateTime.hour%10;
      a[2]=DateTime.minute/10;
      a[3]=DateTime.minute%10;
      a[4]=DateTime.second/10;
      a[5]=DateTime.second%10;

    }// loop

    void to_Timer(){
      switch(i){
        case 0: segm=a[0]; an=0; anod(); segment();break;
        case 1: segm=a[1]; an=1; anod(); segment();break;
        case 2: segm=a[2]; an=2; anod(); segment();break;
        case 3: segm=a[3]; an=3; anod(); segment();break;
        case 4: segm=a[4]; an=4; anod(); segment();break;
        case 5: segm=a[5]; an=5; anod(); segment();break;
        }
        i++;if(i>5){i=0;}}


    void segment(){
      switch(segm){                                                                 
                 //  A       B       C       D       E       F       G
        case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);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);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);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);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);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);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);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);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);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);break;// 9
      }}
    void anod(){
      switch(an){                                                             
        case 0:ch(9,0);ch(10,1);ch(11,1);ch(12,1);ch(13,1);ch(0,1);break;
        case 1:ch(9,1);ch(10,0);ch(11,1);ch(12,1);ch(13,1);ch(0,1);break;
        case 2:ch(9,1);ch(10,1);ch(11,0);ch(12,1);ch(13,1);ch(0,1);break;
        case 3:ch(9,1);ch(10,1);ch(11,1);ch(12,0);ch(13,1);ch(0,1);break;
        case 4:ch(9,1);ch(10,1);ch(11,1);ch(12,1);ch(13,0);ch(0,1);break;
        case 5:ch(9,1);ch(10,1);ch(11,1);ch(12,1);ch(13,1);ch(0,0);break;
      }}

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

65

Re: Ретро часы на ИВ-6

Сегменты G (и всех других сегментов) этих двух ламп можно не объединять с другими лампами.

66

Re: Ретро часы на ИВ-6

Свободен выход только D1

67

Re: Ретро часы на ИВ-6

Наверно этот код:
в нем свободен только D13

#include <MsTimer2.h>
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;RTCDateTime DateTime;
  int an, segm,i;
  byte a[6];

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(0,OUTPUT); // D0 === A4
pinMode(1,OUTPUT); // D1 === A5

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


}

void loop(){
  DateTime=clock.getDateTime();// опрос времени
  a[0]=DateTime.hour/10;
  a[1]=DateTime.hour%10;
  a[2]=DateTime.minute/10;
  a[3]=DateTime.minute%10;
  a[4]=DateTime.second/10;
  a[5]=DateTime.second%10;

}// loop

void to_Timer(){
  switch(i){
    case 0: cl();segm=a[0]; an=0; anod(); segment();break;
    case 1: cl();segm=a[1]; an=1; anod(); segment();break;
    case 2: cl();segm=a[2]; an=2; anod(); segment();break;
    case 3: cl();segm=a[3]; an=3; anod(); segment();break;
    case 4: cl();segm=a[4]; an=4; anod(); segment();break;
    case 5: cl();segm=a[5]; an=5; anod(); segment();break;
    }
    i++;if(i>5){i=0;}}


void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G 
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);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);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);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);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);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);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);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);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);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);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);break;// гашение цифры
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,0);ch(10,1);ch(11,1);ch(12,1);ch(0,1);ch(1,1);break; 
    case 1:ch(9,1);ch(10,0);ch(11,1);ch(12,1);ch(0,1);ch(1,1);break;
    case 2:ch(9,1);ch(10,1);ch(11,0);ch(12,1);ch(0,1);ch(1,1);break;
    case 3:ch(9,1);ch(10,1);ch(11,1);ch(12,0);ch(0,1);ch(1,1);break;
    case 4:ch(9,1);ch(10,1);ch(11,1);ch(12,1);ch(0,0);ch(1,1);break;
    case 5:ch(9,1);ch(10,1);ch(11,1);ch(12,1);ch(0,1);ch(1,0);break;
  }}

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

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

68

Re: Ретро часы на ИВ-6

Я согласен, но в моем случае, я хотел сделать это для уменьшения проводов и в последующем, попробовать собрать часы на индикаторе ИВ-21. В нем, как мы знаем, отсутствует возможность подключения  к определенному сегменту разряда. Поэтому и задал такой вопрос. Если возможность зажигания сегментов G через скетч отсутствует, то придется довольствоваться тем, что есть.

69

Re: Ретро часы на ИВ-6

Один выход свободен, Вы его можете использовать сразу для 2-х  ламп с G при динамической индикации, то есть у Вас в коммутации динамической индикации будет участвовать не 8 ламп, а 7 (3 и 6 имеют общее подключение к сетке)

70

Re: Ретро часы на ИВ-6

Один выход свободен, Вы его можете использовать сразу для 2-х  ламп с G при динамической индикации, то есть у Вас в коммутации динамической индикации будет участвовать не 8 ламп, а 7 (3 и 6 имеют общее подключение к сетке)

71

Re: Ретро часы на ИВ-6

Подскажите, можно ли программно увеличить свечение сегментов? Выход с бп 31v постоянки.

72

Re: Ретро часы на ИВ-6

Нет, это не возможно.

73

Re: Ретро часы на ИВ-6

кнопка set, режимы корректировки работает.
+/sec - при нажатии и удержании кнопки должны отображаться секунды,
-/temp - при нажатии и удержании кнопки должна отображаться температура, а вот эта функция у меня не заработала. Подскажите  как исправить.

74

Re: Ретро часы на ИВ-6

Попробуйте этот код:

#include <MsTimer2.h>
#include <Wire.h> 
#include <DS3231.h>
  DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i;
  byte a[4];
  int menu,year,month,day,hour,minute,w,w2;
 
void setup(){  Wire.begin();clock.begin();MsTimer2::set(2, to_Timer);MsTimer2::start();Serial.begin(9600);
  // 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(2,OUTPUT);  // D2  === a
 pinMode(3,OUTPUT);  // D3  === b
 pinMode(4,OUTPUT);  // D4  === c
 pinMode(5,OUTPUT);  // D5  === d
 pinMode(6,OUTPUT);  // D6  === e
 pinMode(7,OUTPUT);  // D7  === f
 pinMode(8,OUTPUT);  // D8  === g
 pinMode(13,OUTPUT);// D13  === dp
 pinMode(A0,INPUT); // SQW
 ///// BUTTON //////
 pinMode(A1,INPUT); // SET
 pinMode(A2,INPUT); // +/sec
 pinMode(A3,INPUT); // -/temp
 ////  текущее время перенос в переменные коррекции времени
 DateTime=clock.getDateTime();// опрос времени
 year = DateTime.year;
 month = DateTime.month;
 day = DateTime.day;
 hour = DateTime.hour;
 minute = DateTime.minute;
}
 
void loop(){ DateTime=clock.getDateTime();// опрос времени
  if(analogRead(A1)>900){menu++;delay(200);if(menu>5){menu=0;w=1;}}

/////////// ВРЕМЯ /////////////  
  if(menu==0&&w2==0){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){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}// dp
  }
  w2=0;
////// вывод секунд - нажать и удерживать кнопку +/sec /////////////////////////////////////
  if(analogRead(A2)>900&&menu==0){w2=1;times = DateTime.second;digitalWrite(13,HIGH);
  a[0]=11;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

////// вывод температуры - нажать и удерживать кнопку -/temp /////////////////////////////////////
  if(analogRead(A3)>900&&menu==0){w2=1;times = int(clock.readTemperature());digitalWrite(13,HIGH);
  a[0]=12;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}  
  

///////// коррекция минут /////////////////
  if(menu==1){
    if(analogRead(A2)>900){minute++;delay(300);if(minute>59){minute=0;}}
    if(analogRead(A3)>900){minute--;delay(300);if(minute<0){minute=0;}}
    times=minute;
  a[0]=1;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция часов /////////////////
  if(menu==2){
    if(analogRead(A2)>900){hour++;delay(300);if(hour>23){hour=0;}}
    if(analogRead(A3)>900){hour--;delay(300);if(hour<0){hour=0;}}
    times=hour;
  a[0]=2;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция дата /////////////////
  if(menu==3){
    if(analogRead(A2)>900){day++;delay(300);if(day>31){day=0;}}
    if(analogRead(A3)>900){day--;delay(300);if(day<0){day=0;}}
    times=day;
  a[0]=3;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция месяц /////////////////
  if(menu==4){
    if(analogRead(A2)>900){month++;delay(300);if(month>12){month=0;}}
    if(analogRead(A3)>900){month--;delay(300);if(month<0){month=0;}}
    times=month;
  a[0]=4;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}

///////// коррекция год /////////////////
  if(menu==5){
    if(analogRead(A2)>900){year++;delay(300);if(year>99){year=19;}}
    if(analogRead(A3)>900){year--;delay(300);if(year<19){year=19;}}
    times=year;
  a[0]=5;
  a[1]=10;
  a[2]=times/10;
  a[3]=times%10;}
  
if(w==1){clock.setDateTime(year+2000, month, day, hour, minute, 59 );// год (19),месяц(11),день(15),час(23),минуты(32),секунды
 w=0;}

  } // loop
 
void to_Timer(){
  switch(i){
    case 0: cl();segm=a[0]; an=0; anod(); segment();break;
    case 1: cl();segm=a[1]; an=1; anod(); segment();break;
    case 2: cl();segm=a[2]; an=2; anod(); segment();break;
    case 3: cl();segm=a[3]; an=3; anod(); segment();break;
    }i++;if(i>3){i=0;}}
 
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G  
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);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);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);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);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);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);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);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);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);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);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);break;// ПУСТО  
    case 11:ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// S 
    case 12:ch(2,1);ch(3,1);ch(4,1);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// t  
  }}
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; 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);}

75

Re: Ретро часы на ИВ-6

Спасибо! Все работает!