Большие настенные часы на Arduino

b707
Offline
Зарегистрирован: 26.05.2017

GennOk пишет:

Есть предположение что строки 168 и 169 должны выглядеть вот так leds[14]=0x000000;leds[15]=0x000000;

Несомненно. Значения 42 и 43 остались от варианта с 86 диодами. Еще один пример того, о чем я писал в сообщении #85. Номера диодов для точек тоже надо определить константами

bwn
Offline
Зарегистрирован: 25.08.2014

GennOk пишет:

По поводу отключения, возможно перегрев. Вы питаете диоды отдельно от ардуино? У меня, когда питание идет через USB ардуино, она начинает сильно греться и глючить.

Забудьте о питании силовых нагрузок (а много LED это уже силовая) от USB и(или) ардуины. Сгорит стаб на ардуине, хрен с ним, но если спалите порт, это совсем другие деньги на ремонт. Питайте на здоровье датчики, несколько светиков 5мм, экранчик LCD, но не больше. ИМХО.

Taras9696
Offline
Зарегистрирован: 01.03.2019

Питаю от бП 5в 1а, паралельно на дуино и на ленту, поставил кондер 1000мф и резик на линию данных 340 Ом. лента врядли перегревается, тактильно она холодная да и каждые 1-2 мин меняется цвет. Светодиодов всего 30, я сначала думл что будет тускло но нет, пол комнаты ночью освещает, не понимаю для чего 3-5 ставят, разве что на часы на всю стену.

 

bwn
Offline
Зарегистрирован: 25.08.2014

30шт белым на максимуме - 1,8А. Одним цветом на максимуме - 0,6А. Для китайского БП, типа на 1А, это уже серьезная нагрузка, помониторьте.

OdinochkA
Offline
Зарегистрирован: 05.07.2015

Покажу что у меня получилось в итоге. За основу взяты часы Электроника 7. У них газорязрядные трубки. Они сели от времени и уже прктически ничего не разглядеть на циферблате. А почему бы не реанимировать его под современные технологии. К тому же дома этот проект уже работает. И так

1. Долой устаревшие потроха

2. Заменяем кучу всего, несколькими платами и датчиками

3. Кнопки оставил родные. Идеально сохранились и работют как надо. И концы удачно входят в боард. Единственно что, это встроил гнездо для блока питания рядом с управляющим тех. разъёмом.

4. Несколько неустранимых и не особо значимых минусов сего "творения". На экране шло зеленое стекло. В СССР разноцветное стекло было особой фишкой всего. От витрины магазина до защитного козырька от солнца в Москвиче. Стекло это оказалось ещё и закрашено черной краской для выделения цифры и точки. Краску я конечно сцарапал для мигающих точек, но не особо ровно (думаю исправлю). Материал подложки, вспененный полистирол 0,5мм тонковат и светопрозрачен. Я конечно попытался его заматовать черной краской из балона, но не очень получилось. Краска осыпается от долгого вошканья. Дома я делал из утеплителя пеноплекса. В итоге у меня получилось это

Далее начались маянья с кодом. Почти все потуги были запрошены на этом чудном форуме. Спасибо Доброму человеку который помогал и подсказывал. Код приведен в действие и отображает тот минимум за которым я сюда и пришел. Конечно в ходе работы захотелось большего. Был прилеплен BMP180 и попытка внедрить код хотя бы приблизительно, довела до того, что код перестал компилироваться. А что и где изменял и добавлял, я не всегда коментировал. В итоге взял последний рабочий с температурой от модуля времени. Потом уже роя инет я наткнулся на какой то форум где тоже пытались объеденить несколько кодов. И кто то из умников сказал что эти коды не совместимы из за (кажется) условия delay. Ну в общем не мне судить. Нет так нет. Жаль. Попытаюсь хотя бы DHT прикрутить. Потом здесь появился ещё один "часовщик" и ему подсказали ответ на вопрос который и меня давно мучал: Как отключить моргалики каждую минуту. Спасибо. Смена цвета отключена. Конечный код я смогу разместить только завтра. Он как и часы, на работе

Позже если будет можно выложу фото домашних часов.

Извиняюсь что так много получилось, не нашел кнопку спойлер

 

 

b707
Offline
Зарегистрирован: 26.05.2017

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

Если еще какие простенькие модификации кода нужны - пишите, если не сложно - поправлю.

dj-toxa
Offline
Зарегистрирован: 06.04.2016

давсё верно это точки отключенные во время показа температуры. лента естественно должна питаться отдельно от arduino иначе дуню спалите

dj-toxa
Offline
Зарегистрирован: 06.04.2016

смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой. или сделать на эту кнопку что то вроде меню, в котором можно выбрать к примеру один из 10 или 20 предустановленных цветов, там же в меню выбрать время отображения температуры, даты,дня недели и пр... выбрать режим регулировки яркости (от датчика освещения, в ручную или по времени)   

OdinochkA
Offline
Зарегистрирован: 05.07.2015

dj-toxa пишет:

смену цвета по мне, так было удобнее прикрутить к бесполезной кнопке DST, которая по факту все равно не используется. а так надоел цвет жамкнул включился другой. или сделать на эту кнопку что то вроде меню, в котором можно выбрать к примеру один из 10 или 20 предустановленных цветов, там же в меню выбрать время отображения температуры, даты,дня недели и пр... выбрать режим регулировки яркости (от датчика освещения, в ручную или по времени)   

Вот и я того же хочу. DST не нужна. Перехода на летнее/зимнее нету. 

Для вашей коллекции фото выше. Окончательный код который работает и выполняет минимум прилагаю

#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>

#define NUM_LEDS 86 //   Задаём значение сколько у нас светодиодов.
#define COLOR_ORDER BGR  // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13
//#define BRIGHTNESS 150

CRGB leds[NUM_LEDS]; //Задаём значение светодиодов 
byte digits[13][21] = {
{0,0,0, 1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1},   // Digit 0
{0,0,0, 1,1,1 ,0,0,0 ,0,0,0 ,0,0,0 ,0,0,0 ,1,1,1},   // Digit 1
{1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,1,1,1 ,1,1,1 ,0,0,0},   // Digit 2
{1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,0,0,0 ,1,1,1 ,1,1,1},   // Digit 3
{1,1,1 ,1,1,1 ,0,0,0 ,1,1,1 ,0,0,0 ,0,0,0 ,1,1,1},   // Digit 4
{1,1,1 ,0,0,0 ,1,1,1 ,1,1,1 ,0,0,0 ,1,1,1 ,1,1,1},   // Digit 5
{1,1,1 ,0,0,0 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1},   // Digit 6
{0,0,0 ,1,1,1 ,1,1,1 ,0,0,0 ,0,0,0 ,0,0,0 ,1,1,1},   // Digit 7
{1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1},   // Digit 8
{1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,1,1,1 ,1,1,1},   // Digit 9 | 2D Array for numbers on 7 segment
{1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,0,0,0 ,0,0,0},   // Digit *0
{0,0,0 ,0,0,0 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,0,0,0},   // Digit C
{1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,1,1,1 ,0,0,0 ,0,0,0}};  // Digit P
             
bool Dot = true;  
//bool DST = false; // DCT false
bool TempShow = true;
int last_digit = 0;

long ledColor = CRGB::Salmon; // Используемый цвет
//long ledColor = CRGB::MediumVioletRed;
long ColorTable[16] = {
  CRGB::Amethyst,
  CRGB::Aqua,
  CRGB::Blue,
  CRGB::Chartreuse,
  CRGB::DarkGreen,
  CRGB::DarkMagenta,
  CRGB::DarkOrange,
  CRGB::DeepPink,
  CRGB::Fuchsia,
  CRGB::Gold,
  CRGB::GreenYellow,
  CRGB::LightCoral,
  CRGB::Tomato,
 // CRGB::Salmon,
  CRGB::Red,
  CRGB::Orchid,
  CRGB::DarkOrchid
};

void setup(){ 
  Serial.begin(9600); 
  Wire.begin();
  LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); 
  
//LEDS.setBrightness(75); // Задаём яркость
// pinMode(4, INPUT_PULLUP); // Кнопка регулировки режимов изменилась привязка
  pinMode(3, INPUT_PULLUP); // Кнопка регулировки минут   изменилась привязка
  pinMode(2, INPUT_PULLUP); // Кнопка регулировки часов   изменилась привязка
} 

// снова датчик света
//Массив управляет яркостью
void BrightnessCheck()
{
  const byte sensorPin = 6;    //BRI_PIN
     //const byte brightnessLow = 50;
     //const byte brightnessHigh = 255; 
  int sensorValue = analogRead(sensorPin); 
  Serial.print("Ambient is: ");
  Serial.println(sensorValue);
  sensorValue = map(sensorValue,255, 0, 10, 254);
  LEDS.setBrightness(sensorValue);
  // if (sensorValue <= 10) {LEDS.setBrightness(brightnessLow);}//если темно то минимум
  // else {LEDS.setBrightness(brightnessHigh);}//если светло то максимум
  };

//  Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155  вместо 0155
int GetTime(){
  tmElements_t Now;
  RTC.read(Now);
  //time_t Now = RTC.Now();// Получаем данные текущего времени и его хранение  
  int hour=Now.Hour;
  int minute=Now.Minute;
  int second =Now.Second;
  
  if (second % 2==0) {Dot = false;}
    else {Dot = true;};
  return (hour*100+minute);
  };
   
// Преобразуем время в массив для отображание

 void TimeToArray() {
  int Now = GetTime(); // Получаем время
  int cursor = NUM_LEDS;// Задаём значение сколько у нас светодиодов
  
   if (Dot) {
    leds[42] = ledColor;  //координаты мигающих точек
    leds[43] = ledColor;  //координаты мигающих точек
  }
  else {
    leds[42] = 0x000000;  //координаты мигающих точек
    leds[43] = 0x000000;  //координаты мигающих точек
  };
  
  for(int i=1;i<=4;i++){
    int digit = Now % 10; // Получаем последнюю цифру в времени 
    if (i==1){
      cursor = 65;
      for(int k=0; k<=20;k++){ 
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      if (digit != last_digit)
      {
//        cylon ();                              // цикличное изменение цветов
//        ledColor =  ColorTable[random(16)];    // цикличное изменение цветов
      }
      last_digit = digit;
      }
    else if (i==2){
      cursor =44;
      for(int k=0; k<=20;k++){ 
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      }
    else if (i==3){
      cursor =21;
      for(int k=0; k<=20;k++){ 
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      }
    else if (i==4){
      cursor =0;
      for(int k=0; k<=20;k++){ 
        // Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      }
    Now /= 10;
  }; 
};

// Преобразуем всё это в массив для отображение
void TempToArray(){
  tmElements_t tm;
  RTC.read(tm);
  if (tm.Second != 27) {
    TempShow = false;
    return;
  }
  TempShow = true;
  int t = RTC.temperature();
  int celsius = (t / 4.0) * 100;
  Serial.print("Temp is: ");Serial.println(celsius);
  int cursor = NUM_LEDS; // Задаём значение сколько у нас светодиодов
    leds[42]=0x000000;
    leds[43]=0x000000;
  for(int i=1;i<=4;i++){
    int digit = celsius % 10; // Получаем последнюю цифру во времени 
    if (i==1){
      Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(" ");
      cursor = 65;
      for(int k=0; k<=20;k++){ 
        Serial.print(digits[11][k]);
        if (digits[11][k]== 1){leds[cursor]=ledColor;}
         else if (digits[11][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
    }
    else if (i==2){
      Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(" ");
      cursor =44;
      for(int k=0; k<=20;k++){ 
        Serial.print(digits[10][k]);
        if (digits[10][k]== 1){leds[cursor]=ledColor;}
         else if (digits[10][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
      }
    else if (i==3){
      Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(" ");
      cursor =21;
      for(int k=0; k<=20;k++){ 
        Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
      }
    else if (i==4){
      Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(" ");
      cursor =0;
      for(int k=0; k<=20;k++){ 
        Serial.print(digits[digit][k]);
        if (digits[digit][k]== 1){leds[cursor]=ledColor;}
         else if (digits[digit][k]==0){leds[cursor]=0x000000;};
         cursor ++;
        };
      Serial.println();
      }
    celsius /= 10;
  }; 
};

// Массив управляет кнопками с часами и минутами
void TimeAdjust(){
  int buttonH = digitalRead(2);
  int buttonM = digitalRead(3);
  if (buttonH == LOW || buttonM == LOW){
    delay(500);
    tmElements_t Now;
    RTC.read(Now);
    int hour=Now.Hour;
    int minutes=Now.Minute;
    int second =Now.Second;
      if (buttonH == LOW){
        if (Now.Hour== 23){Now.Hour=0;}
          else {Now.Hour += 1;};
        }
        else
        {
          if (Now.Minute== 59){Now.Minute=0;}
          else {Now.Minute += 1;};
          };
    RTC.write(Now); 
    }
  }

//Меняем эффекты 
void fadeall() { 
  for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } }

 // массив отвечает за цикличное изменение цветов
void cylon () {
  static uint8_t hue = 0;
  Serial.print("x");
  // Сдвигаем один светодиод в любом направлении 
  for(int i = 0; i < NUM_LEDS; i++) {
    // Устанавливаем 1 светодиод на цвет красный 
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды 
    FastLED.show(); 
    fadeall();
    // Ждём немного и повторяем цикл 
    delay(10);
  }
  Serial.print("x");

  // Сдвигаем один светодиод в любом направлении 
  for(int i = (NUM_LEDS)-1; i >= 0; i--) {
    // Устанавливаем 1 светодиод на цвет красный 
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды
    FastLED.show();
    fadeall();
    // Ждём немного и повторяем цикл
    delay(10);
  }
}


void loop()  
{ 
  BrightnessCheck(); // Проверяем датчик
//  DSTcheck(); // Проверяем режимы, не нужен
  TimeAdjust(); // Проверяем время если сменилось на 1 цифру
  TimeToArray(); // Проверяем часы если сменилось на 1 цифру 
  TempToArray();
  FastLED.show(); // Задаём массив светодиодов 
  if (TempShow == true) delay (8000);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA. dj-toha , Taras9696 - пересписал ваш код, что бы работал независимо от числа светиков в ленте. У меня не на чем проверить, кто-нибудь сможет залить в свои часы и посмотреть, все ли работает?

Taras9696
Offline
Зарегистрирован: 01.03.2019

b707 пишет:

OdinochkA. dj-toha , Taras9696 - пересписал ваш код, что бы работал независимо от числа светиков в ленте. У меня не на чем проверить, кто-нибудь сможет залить в свои часы и посмотреть, все ли работает?

да выкладывай)

OdinochkA
Offline
Зарегистрирован: 05.07.2015

Интересно проверить. )))

b707
Offline
Зарегистрирован: 26.05.2017

Держите

За основу взят код из сообщения №109. По идее, единственный параметр, которые нуждается в настройке - это число светодиодов в сегменте(строка 6) - у Одиночки оно должно быть 3, а у Тараса - 1

#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>

#define LEDS_IN_SEGMENT 3 //   Задаём сколько у нас светодиодов в сегменте.
#define COLOR_CHANGE 0    // ( 0 - NEVER, 1 - once a minute, 2 - every 10 min, 3 - hourly, 4 - every 10 hrs)
#define NUM_COLORS 16
#define COLOR_ORDER BGR   // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13
//#define BRIGHTNESS 150

// Вычислемые константы, НЕ РЕДАКТИРОВАТЬ!
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + 2) 
#define DOT1  (LEDS_IN_SEGMENT * 14)
#define DOT2  (LEDS_IN_SEGMENT * 14  + 1)


CRGB leds[NUM_LEDS]; //Задаём значение светодиодов 
uint8_t  digits[] = {
	0b00111111,			// Digit 0
	0b00100001,			// Digit 1
	0b01110110,			// Digit 2
	0b01110011,			// Digit 3
	0b01101001,			// Digit 4
	0b01011011,			// Digit 5
	0b01011111,			// Digit 6
	0b00110001,			// Digit 7
	0b01111111,			// Digit 8
	0b01111011,			// Digit 9
	0b01111000,			// Digit *0
	0b00011110,			// Digit C
	0b01111100,			// Digit P
};

bool Dot = true;  
//bool DST = false; // DCT false
bool TempShow = true;
int last_digit = 0;


long ledColor = CRGB::Salmon; // Используемый цвет
//long ledColor = CRGB::MediumVioletRed;
long ColorTable[NUM_COLORS] = {
  CRGB::Amethyst,
  CRGB::Aqua,
  CRGB::Blue,
  CRGB::Chartreuse,
  CRGB::DarkGreen,
  CRGB::DarkMagenta,
  CRGB::DarkOrange,
  CRGB::DeepPink,
  CRGB::Fuchsia,
  CRGB::Gold,
  CRGB::GreenYellow,
  CRGB::LightCoral,
  CRGB::Tomato,
  //CRGB::Salmon,
  CRGB::Red,
  CRGB::Orchid,
  CRGB::DarkOrchid
};

void setup(){ 
  Serial.begin(9600); 
  Wire.begin();
  LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); 
  
//LEDS.setBrightness(75); // Задаём яркость
// pinMode(4, INPUT_PULLUP); // Кнопка регулировки режимов изменилась привязка
  pinMode(3, INPUT_PULLUP); // Кнопка регулировки минут   изменилась привязка
  pinMode(2, INPUT_PULLUP); // Кнопка регулировки часов   изменилась привязка
} 
void BrightDots (boolean Dot_On) {
leds[DOT1]=(Dot_On) ? ledColor : 0;
leds[DOT2]=(Dot_On) ? ledColor : 0;
}

void BrightDigit (uint8_t digit, uint8_t cursor) {
	for (uint8_t mask = 0b01000000; mask >0; mask = mask >> 1){
		for (uint8_t i =0; i <LEDS_IN_SEGMENT; i++) {
		leds[cursor]=(digit & mask) ? ledColor : 0;
	    cursor ++;
	}
	}
}
// снова датчик света
//Массив управляет яркостью
void BrightnessCheck()
{
  const byte sensorPin = 6;    //BRI_PIN
     //const byte brightnessLow = 50;
     //const byte brightnessHigh = 255; 
  int sensorValue = analogRead(sensorPin); 
  Serial.print("Ambient is: ");
  Serial.println(sensorValue);
  sensorValue = map(sensorValue,255, 0, 10, 254);
  LEDS.setBrightness(sensorValue);
  // if (sensorValue <= 10) {LEDS.setBrightness(brightnessLow);}//если темно то минимум
  // else {LEDS.setBrightness(brightnessHigh);}//если светло то максимум
  };

//  Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155  вместо 0155
int GetTime(){
  tmElements_t Now;
  RTC.read(Now);
  //time_t Now = RTC.Now();// Получаем данные текущего времени и его хранение  
  int hour=Now.Hour;
  int minute=Now.Minute;
  int second =Now.Second;
  
  if (second % 2==0) {Dot = false;}
    else {Dot = true;};
  return (hour*100+minute);
  };
   
// Преобразуем время в массив для отображание

 void TimeToArray() {
  int Now = GetTime(); // Получаем время
  BrightDots(Dot);
  
   for(int i=1;i<=4;i++){
    int digit = Now % 10; // Получаем последнюю цифру в времени 
	int cursor = NUM_LEDS - i * LEDS_IN_SEGMENT * 7;
    if (i > 2){ cursor -= 2; }
    BrightDigit(digits[digit],cursor);  
    if ( i == COLOR_CHANGE) { 
      if (digit != last_digit)
      {
        cylon ();                              // цикличное изменение цветов
       ledColor =  ColorTable[random(NUM_COLORS)];    // цикличное изменение цветов
      }
      last_digit = digit;
	}
    Now /= 10;
  }; 
};

// Преобразуем Temp в массив для отображение
void TempToArray(){
  tmElements_t tm;
  RTC.read(tm);
  if (tm.Second != 27) {
    TempShow = false;
    return;
  }
  TempShow = true;
  int t = RTC.temperature();
  int celsius = (t / 4.0);
  BrightDots(0);
  BrightDigit(digits[11],(NUM_LEDS - LEDS_IN_SEGMENT * 7));
  BrightDigit(digits[10],(NUM_LEDS - LEDS_IN_SEGMENT * 14));
  int digit = celsius % 10;
  BrightDigit(digits[digit],(NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2));
  celsius /= 10;
  digit = celsius % 10;
  BrightDigit(digits[digit],(NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2));
  
};

// Массив управляет кнопками с часами и минутами
void TimeAdjust(){
  int buttonH = digitalRead(2);
  int buttonM = digitalRead(3);
  if (buttonH == LOW || buttonM == LOW){
    delay(500);
    tmElements_t Now;
    RTC.read(Now);
    int hour=Now.Hour;
    int minutes=Now.Minute;
    int second =Now.Second;
      if (buttonH == LOW){
        if (Now.Hour== 23){Now.Hour=0;}
          else {Now.Hour += 1;};
        }
        else
        {
          if (Now.Minute== 59){Now.Minute=0;}
          else {Now.Minute += 1;};
          };
    RTC.write(Now); 
    }
  }

//Меняем эффекты 
void fadeall() { 
  for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250); } }

 // массив отвечает за цикличное изменение цветов
void cylon () {
  static uint8_t hue = 0;
  Serial.print("x");
  // Сдвигаем один светодиод в любом направлении 
  for(int i = 0; i < NUM_LEDS; i++) {
    // Устанавливаем 1 светодиод на цвет красный 
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды 
    FastLED.show(); 
    fadeall();
    // Ждём немного и повторяем цикл 
    delay(10);
  }
  Serial.print("x");

  // Сдвигаем один светодиод в любом направлении 
  for(int i = (NUM_LEDS)-1; i >= 0; i--) {
    // Устанавливаем 1 светодиод на цвет красный 
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды
    FastLED.show();
    fadeall();
    // Ждём немного и повторяем цикл
    delay(10);
  }
}


void loop()  
{ 
  BrightnessCheck(); // Проверяем датчик
//  DSTcheck(); // Проверяем режимы, не нужен
  TimeAdjust(); // Проверяем время если сменилось на 1 цифру
  TimeToArray(); // Проверяем часы если сменилось на 1 цифру 
  TempToArray();
  FastLED.show(); // Задаём массив светодиодов 
  if (TempShow == true) delay (8000);
}

 

OdinochkA
Offline
Зарегистрирован: 05.07.2015

b707 пишет:

Держите

За основу взят код из сообщения №109. По идее, единственный параметр, которые нуждается в настройке - это число светодиодов в сегменте(строка 6) - у Одиночки оно должно быть 3, а у Тараса - 1

 

Код рабочий. Часы идут. Выставил смену цвета на час. Это радует. Благодарю Вас за помощь.

Осталось одно НО. При ручной корректировке минут кнопкой, часы снова идут в радугу по кругу как при смене цвета. Т.е. нет такого что нажал и минуты побежали. ДЛя убирания этого эффекта нужно закоментировать блок со строки 186 по 216. Минуты начинают щёлкаться без радуги

dj-toxa
Offline
Зарегистрирован: 06.04.2016

а если от сюда позимствовать и портануть меню с настройками часов в наш скетч  




// Скетч часов из четырех семисегментных индикаторов, построенных на базе адресной светодиодной ленты WS2811
// (для разделительных точек применены два адресных светодиода WS2812)
// Опционально подключаестя выносной температурный сенсор на чипе DS18B20 (реализовано для одного сенсора, но можно использовать несколько сенсоров)
// Объем скетча позволяет загружать его в Atmega168 (16кб)
// Автор Сергей Лукьянов (C) 2018 год.

#include <Wire.h>                     // Базовая библиотека шины I2C (используется для связи модуля часов реального времени)
#include <iarduino_RTC.h>             // Библиотека часов реального времени 
#include <Adafruit_NeoPixel.h>        // Библиотека для управления адресными светодиодами 
#include <OneWire.h>                  // Бибиотека шины 1-Wire для работы температурных датчиков
#include <DallasTemperature.h>        // Библиотека температурного сенсора DS18B20
#include <EEPROMex.h>                 // Библиотека доступа к энергонезависимой памяти

#define PIN 6                         // управление адресными светодиодами по этому пину
#define ONE_WIRE_BUS 10               // датчик температуры DS18B20 подключен к этому пину
#define TEMPERATURE_PRECISION 12      // точность измерений 9-бит низкая, 12-бит высокая

iarduino_RTC time(RTC_DS3231);        // подключаем RTC модуль на базе чипа DS3231, используется аппаратная шина I2C
Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRB + NEO_KHZ800); //Подключаем ленту на адресных светодиодах
OneWire oneWire(ONE_WIRE_BUS);        // подключаем шину 1-Wire, для передачи данных с сенсоров температуры
DallasTemperature sensors(&oneWire);  // подключаем температурные сенсоры

byte Mode = 0;                         //режимы:  по умолчанию 0 - отображение времени с заданными настройкамиbyte NumColor = 0;
//----------- переменные настроек, которые так же хранятся в ПЗУ контроллера и считываются при включении устройсва-------------
byte NowBrigtness = 180;              // текущая яркость элементов (начальное значение должно быть кратным 15)
byte ColorMode = 13;                  // текущий цветовой режим (13 режим - цвет меняется каждый час, полный цикл за 12 частов)
byte TempTime = 8;                    // длительность отображения температуры
//------------------------------------------------------
int temp10;                           // перомежуточная переменная температуры (используем множитель 10, что бы использовать тип integer
long int KeyPressed;                  // время в милисекундах, для сравнения с текущими милисекундами (используется для возврата в основной режим)
unsigned long eeprom_timer;           // таймер зашивки в энергонезависимую память параметров настройки часов
byte degree = 25 ;                    // процент яркости разделительных точек (исходя из геометрии яркость разделительных точек нужно уменьшать
boolean eeprom_flag;

void setup() {
  //Serial.begin(9600);                     // подключаем сериал порт для вывода отладочной информации (отключено в целях экономии памяти)
  pinMode(2, INPUT_PULLUP);                 // подключаем кнопку 1 к пину и подтягиваем её к GND
  pinMode(3, INPUT_PULLUP);                 // подключаем кнопку 2 к пину и подтягиваем её к GND
  pinMode(4, INPUT_PULLUP);                 // подключаем кнопку 3 к пину и подтягиваем её к GND
  time.begin();                             // запускаем часы реального времени
  sensors.begin();                          // запускаем сенсоры температуры
  strip.begin();                            // запускаем адресные светодиоды
  strip.setBrightness(NowBrigtness);        // устанавливаем яркость светодиодной ленты
  strip.show();
  // KeyPressed = millis();
  // освещаем ленту (по умолчанию нули-ничего не светится)
  // Отладочный способ установки времени через скетч
  // time.settime(0,37,8,23,10,18,2);        // _ сек, _ мин, _ час, _ день месяца, _ месяц, _ год, день недели 0-вск 6-суб
  //updateEEPROM;                           // при первой прошивке раскоментировать для записи настроек в ПЗУ контроллера
  readEEPROM();                             // чтениt настроек из ПЗУ контроллера
}


void loop() {
  if ((millis() - KeyPressed) > 3000) Mode = 0;  //если спустя 4 секунды кнопок не нажималось часы переходят в нормальный режим
  int key = get_key();                            // опрашиваем нажатие кнопки
  if (key)  {
    delay(330);                                   // после нажатия на любую кнопку делаем небольшую паузу, что бы успеть отпустить кнопку
    KeyPressed = millis();   // сбрасываем таймер последнего нажатия кнопки (для того что бы спустя 3 сек часы перешли в режим 0)
    eeprom_flag = true;
  }
  if (key == 2)   {                               // если нажата кнопка 2, то гоняем меню по кругу (выбора режима цвета, яркость, установка времени и даты
    if (Mode == 9) Mode = 0; else Mode++;
  }
  switch ( Mode ) {
    case 0: {                                     //---------------------- Нормальный режим "0": отображение времени и температуры ----------------------
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время
        if (( time.seconds) == ( 60 - TempTime)) {                          // раз в минуту проверяем наличие датчика
            sensors.requestTemperatures();                  // Отправляем запрос на значение температуры
          temp10 = 10 * sensors.getTempCByIndex(0);
        }
        if ((( time.seconds) <= 60 - TempTime) or (temp10<-500))   { // отображаем время в том числе если датчик не подключен
          digitout (0, time.Hours / 10 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, time.Hours % 10 );         // отрисовываем цифры (выставляем черные точки)
          digitout (16, time.minutes / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (23, time.minutes % 10 );      // отрисовываем цифры (выставляем черные точки)
          if (( time.seconds) % 2 == 0)  {        // по четным секундам разделительные точки не светятся (можно сделать затухание)
            strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
          }
        }
        
        if ((key == 1) || (key == 3) || ((( time.seconds) > 60 - TempTime) and (temp10>-500)))   {                           // если нажали кнопку "1" или пришло время отображать температуру и датчик подключен
          sensors.requestTemperatures();                  // Отправляем запрос на значение температуры
          temp10 = 10 * sensors.getTempCByIndex(0);
          for (int i = 0; i < 30; i++) {
            strip.setPixelColor(i, WheelRGB((40 - temp10 / 10) * 255 / 60 & 255));                      // цвет  зависит от температуры датчика
            if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG((40 - temp10 / 10) * 255 / 60 & 255)); // для разделительных точек применяем модифицированное цветовое колесо
          }
          if (temp10 < -500) {            // если датчик отключен, то выводим "---с"
            digitout (0, 13 );            // отрисовываем "-" (выставляем черные точки)
            digitout (7, 13 );            // отрисовываем "-" (выставляем черные точки)
            digitout (16, 13 );           // отрисовываем "-" (выставляем черные точки)
            strip.setPixelColor(26, (0, 0, 0));   // знак "_" не рисуем
          }
          else
          {
            digitout (0, temp10 / 100 );            // отрисовываем цифры (выставляем черные точки)
            digitout (7, ((temp10) % 100) / 10 );   // отрисовываем цифры (выставляем черные точки)
            digitout (16, (temp10) % 10 );          // отрисовываем цифры (выставляем черные точки)
          }
          strip.setPixelColor(14, 0, 0, 0);       // затеняем верхнюю точку
          digitout (23, 11 );                     //симвод градуса Цельсия
          if (temp10 >= 0) {            // если температура выше нуля, то знак "_" не отображаем
            strip.setPixelColor(26, (0, 0, 0));   // знак "_"
          }

          //      if (key == 3)   {
          // - зарезервированно либо для вывода даты, либо для вывода температуры с второго датчика
          //    }
        }
        strip.show(); //освещаем режим 0
        break;
      }                                           //---------------------- конец отработки условия нормального режима "0" ------------------
    case 1: {                                     //  Если режим "1" - установка цветовой схемы
        if (key == 1)   {                                                                   //Установка цвета
          if (ColorMode == 0) ColorMode = 26; else ColorMode--;
        }
        if (key == 3)   { //Гоняем цвет по кругу
          if (ColorMode == 26) ColorMode = 0; else ColorMode++;
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        // - отображаем на экране номер цветового режима
        digitout (0, 12 );                        // отрисовываем цифры (выставляем черные точки)
        digitout (7, 13);                         // отрисовываем цифры (выставляем черные точки)
        digitout (16, ColorMode / 10 );           // отрисовываем цифры (выставляем черные точки)
        digitout (23, ColorMode % 10);            // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 2: {                               //  Если режим "2" - установка яркости
        if (key == 1)   {
          NowBrigtness = NowBrigtness - 15;  //меняем яркость от 0 до 255 с шагом 5
        }
        if (key == 3)   {
          NowBrigtness = NowBrigtness + 15;
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        if (NowBrigtness == 0)strip.setBrightness(1); else strip.setBrightness(NowBrigtness); ;      // устанавливаем яркость светодиодной ленты
        // - отображаем на экране величину яркости
        digitout (0, 14 );                        // отрисовываем цифры (выставляем черные точки)
        digitout (7, 13);                         // отрисовываем цифры (выставляем черные точки)
        digitout (16, (NowBrigtness / 15) / 10 );         // отрисовываем цифры (выставляем черные точки)
        digitout (23, (NowBrigtness / 15) % 10);          // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 3: {                               // Если режим "3"   - Установка времени отображения температуры

        if (key == 1)   { // Устанавливаем время показа температуры на -1 сек
          if (TempTime == 0) TempTime = 60; else TempTime = TempTime - 1 ;
        }
        if (key == 3)   { //Устанавливаем время показа температуры на +1 сек
          if (TempTime == 60) TempTime = 0; else TempTime = TempTime + 1;
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        digitout (0, 17);                      // отрисовываем цифры (выставляем черные точки)
        digitout (7, 17);                       // отрисовываем цифры (выставляем черные точки)
        digitout (16, TempTime / 10);       // отрисовываем цифры (выставляем черные точки)
        digitout (23, TempTime % 10);        // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 4: {                               // Если режим "4" - установка времени (час)
        if (key == 1)   { //уменьшаем часы
          if ((time.Hours) == 0) time.settime(-1, -1, 23); else time.settime(-1, -1, (time.Hours) - 1); //установит времени (час)
        }
        if (key == 3)   { //увеличиваем часы
          if ((time.Hours) == 23) time.settime(-1, -1, 0); else time.settime(-1, -1, (time.Hours) + 1); //установит времени (час)
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время
        setcolor (ColorMode);                       // задаём цвет всех элементов в зависимости от цветового режима
        //       for (int i = 0; i < 14; i++) {               // задаём цвет часов серым
        //     strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))  {
          digitout (0, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (0, time.Hours / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (7, time.Hours % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (16, time.minutes / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (23, time.minutes % 10 );      // отрисовываем цифры (выставляем черные точки)
        //  if (( time.seconds) % 2 == 0)  {        // по четным секундам разделительные точки не светятся (можно сделать затухание)
        //  strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        // }
        strip.show(); //освещаем режим
        break;
      }
    case 5: {                               // Если режим "5" - установка времени (мин). При изменении минут секунды обнуляются
        if (key == 1)   { //уменьшаем минуты
          if ((time.minutes) == 0) time.settime(0, 59); else time.settime(0, (time.minutes) - 1); //установит времени (мин)
        }
        if (key == 3)   { //увеличиваем минуты
          if ((time.minutes) == 59) time.settime(0, 0); else time.settime(0, (time.minutes) + 1); //установит времени (мин)
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время

        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        //     for (int i = 16; i < 30; i++) {               // задаём цвет минут серым
        //      strip.setPixelColor(i, 127, 127, 127);
        //   }

        if (( millis() % 1000 > 500))  {
          digitout (16, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (16, time.minutes / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (23, time.minutes % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (0, time.Hours / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (7, time.Hours % 10 );      // отрисовываем цифры (выставляем черные точки)

        //  if (( time.seconds) % 2 == 0)  {        // по четным секундам разделительные точки не светятся (можно сделать затухание)
        //  strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        // }
        strip.show(); //освещаем режим
        break;
      }
    case 6: {                               // Если режим "6" - Установка дня
        if (key == 1)   { //уменьшаем времени (мин)
          if ((time.day) == 1) time.settime(-1, -1, -1, 31); else time.settime(-1, -1, -1, (time.day) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем часы

          if ((time.day) == 31) time.settime(-1, -1, -1, 1); else time.settime(-1, -1, -1, (time.day) + 1); //установит дата
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время
        setcolor (ColorMode);                       // задаём цвет всех элементов в зависимости от цветового режима
        //     for (int i = 0; i < 14; i++) {               // задаём цвет часов серым
        //       strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))  {
          digitout (0, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (0, time.day / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (7, time.day % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (16, time.month / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (23, time.month % 10 );      // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0);     // Оставляем светиться нижнюю точку - разделитель дня и месяца
        strip.show(); //освещаем режим


        break;
      }
    case 7: {                               // Если режим "7" - Установка месяца
        if (key == 1)   { //уменьшаем времени (мин)
          if ((time.month) == 1) time.settime(-1, -1, -1, -1, 12); else time.settime(-1, -1, -1, -1, (time.month) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем часы

          if ((time.month) == 12) time.settime(-1, -1, -1, -1, 1); else time.settime(-1, -1, -1, -1, (time.month) + 1); //установит дата)
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время

        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        //       for (int i = 16; i < 30; i++) {               // задаём цвет минут серым
        //       strip.setPixelColor(i, 127, 127, 127);
        //     }

        if (( millis() % 1000 > 500))  {
          digitout (16, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (16, time.month / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (23, time.month % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (0, time.day / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (7, time.day % 10 );      // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0);     // Оставляем светиться нижнюю точку - разделитель дня и месяца
        strip.show(); //освещаем режим
        break;
      }
    case 8: {                               // Если режим "8"-установка года
        if (key == 1)   { //уменьшаем год
          time.settime(-1, -1, -1, -1, -1, (time.year) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем год
          time.settime(-1, -1, -1, -1, -1, (time.year) + 1); //установит дата)
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима

        //      for (int i = 0; i < 30; i++) {               // задаём цвет минут серым
        //        strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))
        {
          digitout (0, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, 15 );
          digitout (16, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (0, 2);                      // отрисовываем цифры (выставляем черные точки)
          digitout (7, 0);                       // отрисовываем цифры (выставляем черные точки)
          digitout (16, (time.year) / 10 );           // отрисовываем цифры (выставляем черные точки)
          digitout (23, (time.year) % 10);           // отрисовываем цифры (выставляем черные точки)
        }
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 9: {                               // Если режим "9"   - Установка дня недели

        if (key == 1)   { //уменьшаем времени (мин)
          if ((time.weekday) == 0) time.settime(-1, -1, -1, -1, -1, 1 - 1, 6); else time.settime(-1, -1, -1, -1, -1, -1, (time.weekday) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем часы

          if ((time.weekday) == 6) time.settime(-1, -1, -1, -1, -1, 1 - 1, 0); else time.settime(-1, -1, -1, -1, -1, -1, (time.weekday) + 1); //установит дата)
        }

        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима

        //      for (int i = 0; i < 30; i++) {               // задаём цвет минут серым
        //        strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))
        {
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (23, (time.weekday));           // отрисовываем цифры (выставляем черные точки)
        }
        digitout (0, 16 );         // отрисовываем цифры (выставляем черные точки)
        digitout (7, 15 );
        digitout (16, 15);          // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим

        break;
      }
  }                                         // Конец обработки всех режимов
  eepromTick();                             // проверка не пора ли сохранить настройки
}                                           // Конец основного цикла


void setcolor (byte ColorMode) {            // процедура, которая задаёт цвет всех элементов в зависимости от указанного цветового режима
  uint16_t i;
  if (ColorMode < 24) {                     //12 цветов по цветовому колесу
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, WheelRGB((ColorMode * 255 / 24) & 255));
      if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG((ColorMode * 255 / 24) & 255)); // для разделительных точек применяем модифицированное цветовое колесо
    }
  }
  if (ColorMode == 24) {                    // цвет -белый
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, 255, 255, 255);
    }
  }

  if (ColorMode == 25) {                    // цветовой режим -радуга с периодом 12 часов
    time.gettime();
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, WheelRGB(((time.hours) * 255 / 12) & 255));                        // в этом режиме часы меняются от 1-12
      if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG(((time.hours) * 255) / 12 & 255)); // для разделительных точек применяем модифицированное цветовое колесо
    }
  }
    if (ColorMode == 26) {                    // цветовой режим -радуга с периодом 24 часа
    time.gettime();
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, WheelRGB(((time.Hours) * 255 / 24) & 255));                        // в этом режиме часы меняются от 1-24
      if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG(((time.Hours) * 255 / 24) & 255)); // для разделительных точек применяем модифицированное цветовое колесо
    }
  }

}           //- конец процедуры установки цвета



int get_key()   //Вывод нажатой клавиши
{
  if (digitalRead(4) == 0) return 1;
  if (digitalRead(3) == 0) return 2;
  if (digitalRead(2) == 0) return 3;
  return 0;
}

void tempout() {  //процедура отображения температуры

}

// Отображение цифр
void digitout(int digitposition, int digit) {
 switch ( digit) {
    case 1: {
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        strip.setPixelColor(digitposition+2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 2: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition + 2, (0, 0, 0));
        strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 3: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        strip.setPixelColor(digitposition+3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 4: {
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));;
        break;
      }
    case 5: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }

    case 6: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 7: {
        strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 8: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 9: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 0: {
        strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 11: {          //символ градуса цельсия и знак минус _
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));   
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));  // знак "_"
        break;
      }
    case 12: {          //символ "C"  "color"
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 13: {          //символ "-"
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 14: {          //символ "b" "яркость"
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 15: {          //символ " " "пустота"
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 16: {          //символ "d" "день недели"
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        // strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //  strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 17: {          //символ "t"
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }

  }
}

// функция цветового колеса, которое возвращает RGB цвет для ленты (аргументу 0-255 соответсует поворот колеса от 0 до 359 градусов)
uint32_t WheelRGB(byte WheelPos) {
  WheelPos = 255 - WheelPos;          // разделительные точки между часами и мунутами на базе WS2812 с измененными цветами G и B

  if (WheelPos < 85) {
    return strip.Color((255 - WheelPos * 3) , (WheelPos * 3), 0);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0,  (255 - WheelPos * 3) ,  (WheelPos * 3) );
  }
  WheelPos -= 170;
  return strip.Color( (WheelPos * 3), 0, (255 - WheelPos * 3));
}

uint32_t WheelRBG(byte WheelPos) {    // Это колесо специально для разделительных точек (транспонированы между собой синий и зеленый цвета)
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return strip.Color(degree * (255 - WheelPos * 3) / 100, 0, degree * ( WheelPos * 3) / 100);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, degree * (WheelPos * 3) / 100, degree * (255 - WheelPos * 3) / 100);
  }
  WheelPos -= 170;
  return strip.Color(degree * (WheelPos * 3) / 100, degree * (255 - WheelPos * 3) / 100, 0);
}

void updateEEPROM() {
  EEPROM.updateByte(1, NowBrigtness);
  EEPROM.updateByte(2, ColorMode);
  EEPROM.updateByte(3, TempTime);
}
void readEEPROM() {
  NowBrigtness = EEPROM.readByte(1);
  ColorMode = EEPROM.readByte(2);
  TempTime = EEPROM.readByte(3);
}
void eepromTick() {
  if (eeprom_flag)
    if (millis() - KeyPressed > 60000) {  // 60 секунд после последнего нажатия с пульта
      eeprom_flag = false;
      updateEEPROM();
    }
dj-toxa
Offline
Зарегистрирован: 06.04.2016
что то вроде такого
 
кнопки
pinMode(4, INPUT_PULLUP);     // кнопка -
pinMode(3, INPUT_PULLUP);     // кнопка menu
pinMode(2, INPUT_PULLUP);     // кнопка +
 

 

 

case 0: установка цветовой схемы (задаём цвет всех элементов или цветового режима 0,1,2 менять цвет каждую мин, час, 12час и 4,5,6,7....18,19 16 цветов на выбор)

case 1: установка яркости (меняем яркость от автояркости по датчику освещения A, до выбранного в ручную 0-255 с шагом +/-5) А-0-255

case 2: установка времени отображения температуры (время показа температуры с шагом +/-1 сек)

case 3: установка времени час (с шагом +/-1 час)

case 4: установка времени минуты (с шагом +/-1 минута)

остальные не столь нужны

case 5: установка дня (0-31)

case 5: установка месяца (0-12)

case 5: установка года (2018 +/-1)

case 5: установка дня недели 

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA пишет:

Осталось одно НО. При ручной корректировке минут кнопкой, часы снова идут в радугу по кругу как при смене цвета. Т.е. нет такого что нажал и минуты побежали. ДЛя убирания этого эффекта нужно закоментировать блок со строки 186 по 216. Минуты начинают щёлкаться без радуги

Поясните пожалуйста - радуга при смене времени - это проблема появилась только в моем коде или в коде из #109 было так же? - просто я ничего, касающегося установки времени - не менял, оставил так же, как было в вашем скетче.

b707
Offline
Зарегистрирован: 26.05.2017

dj-toxa пишет:

а если от сюда позимствовать и портануть меню с настройками часов в наш скетч 

Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

dj-toxa пишет:

а если от сюда позимствовать и портануть меню с настройками часов в наш скетч 

Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)

Поздравляю, Шарик, ты попал... Теперь будешь все дикие идеи в скретче реализовывать.

OdinochkA
Offline
Зарегистрирован: 05.07.2015

b707 пишет:

Поясните пожалуйста - радуга при смене времени - это проблема появилась только в моем коде или в коде из #109 было так же? - просто я ничего, касающегося установки времени - не менял, оставил так же, как было в вашем скетче.

НЕт. Я изначально выложил закоментированным блоком, но пока часы висели появился какой то глюк. Часы убегали сами собой. Я подумал, что из-за этого блока. И раскоментировал его. НО видимо проблема была в железе. Провода кнопочные в боарде плохо держались. Поправил и глюк ушёл. И я снова у себя закоментировал блок. А тут забыл внести изменения.

Под радугой я принимал смену цветности при нажатии кнопки минуты. Получалось: нажал минуту-радуга пробежала-цвет сменился-минута прибавилась, ещё раз нажал, снова радуга, и т.д.

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA пишет:

Под радугой я принимал смену цветности при нажатии кнопки минуты. Получалось: нажал минуту-радуга пробежала-цвет сменился-минута прибавилась, ещё раз нажал, снова радуга, и т.д.

Так будет, если смена цвета выставлена раз в минуту. Если раз в час - с минутами так быть не должно, зато будет при смене часов :)

Ну это логичное поведение... тут нет ошибки. Может быть придумаю, как исправить на следующем этапе :)

Дальше я планировал переписать вывод времени на экран - чтобы перерисовывать картинку раз в минуту, а не 10 раз секунду выводить одно и то же, как сейчас. Заодно и интервал показа температуры можно будет задавать произвольно, и может и проблема с радугой решится.

 

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA - спасибо за проверку кода!

OdinochkA
Offline
Зарегистрирован: 05.07.2015

b707 пишет:

Ну это логичное поведение... тут нет ошибки. Может быть придумаю, как исправить на следующем этапе :)

Дальше я планировал переписать вывод времени на экран - чтобы перерисовывать картинку раз в минуту, а не 10 раз секунду выводить одно и то же, как сейчас. Заодно и интервал показа температуры можно будет задавать произвольно, и может и проблема с радугой решится.

Не стоит заморачиваться. Просто мне допустим это не нравилось, допустим часы далеко от компа нужно поправить минут 20-25, остаётся только вариант с кнопкой, но пока с этой радугой выставишь, некоторое время потеряешь. Вот я и убрал этот блок. Минуты теперь бегут быстро. А другим может это в самый раз.

Если у вас есть время и возможность подскажите лучше как всё таки перенести сменность цвета кнопкой. Чтоб не от времени зависеть, а как сказал dj-toxa

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

Я вроде все для кнопки нашел, а как привязать к переменной по смене цвета не получается ((

И интервал с температурой у нас сейчас Вывод температуры раз в минуту.

 

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA пишет:

Если у вас есть время и возможность подскажите лучше как всё таки перенести сменность цвета кнопкой. Чтоб не от времени зависеть, а как сказал dj-toxa

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

честно говоря, я вообще в вашем коде никакой кнопки DST не вижу, наверно слепой - можете строчку подсказать?

Сделать на кнопку не должно быть сложно - посмотрю. Если у вас уже есть наработки - выкладывайте, может там всего пару строк осталось поправить.

OdinochkA
Offline
Зарегистрирован: 05.07.2015

b707 пишет:

честно говоря, я вообще в вашем коде никакой кнопки DST не вижу, наверно слепой - можете строчку подсказать?

Сделать на кнопку не должно быть сложно - посмотрю. Если у вас уже есть наработки - выкладывайте, может там всего пару строк осталось поправить.

В коде который выложил я строки 37, 70(указание на кнопку) и 222. Раньше был ещё такой блок , сообщение №58

void DSTcheck(){
   int buttonDST = digitalRead(2);
   if (buttonDST == LOW){
    if (DST){
      DST=false;
      }
      else if (!DST){
        DST=true;
      };
   delay(500);   
   };

 

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA пишет:

В коде который выложил я строки 37, 70(указание на кнопку) и 222. Раньше был ещё такой блок , сообщение №58

как-то так:

void DSTcheck(){
   int buttonDST = digitalRead(2);
   if (buttonDST == LOW){
    ledColor =  ColorTable[random(NUM_COLORS)];
      };
   delay(500);   
   };


только проверьте номера пинов кнопок, по-моему там должно быть не 2, а 4. Ну и иннициализацию кнопки в СЕТАПе надо восстановить.

dj-toxa
Offline
Зарегистрирован: 06.04.2016

b707 пишет:

dj-toxa пишет:

а если от сюда позимствовать и портануть меню с настройками часов в наш скетч 

Для меню нужно как-то показывать заголовки и варианты выбора, чтобы человек понимал, что выбирать. Как показывать варианты на часах - я что-то плохо себе представляю :)

ну к примеру вместо первой цифры выводить либо номер раздела меню, либо рисуем буквы. например так нажал кнопку menu попал в первый раздел menu, кнопками +/- вибираем нужное.

case 0: установка цветовой схемы (задаём цвет всех элементов или цветового режима 0,1,2 менять цвет каждую мин, час, 12час и 4,5,6,7....18,19 16 цветов на выбор)

цветовая схема рисуем на экране С_00 например для первого цветого режима, С_01 для второго и т.д. далее еще раз жмем menu попадаем в установки яркости

case 1: установка яркости (меняем яркость от автояркости по датчику освещения A, до выбранного в ручную 0-255 с шагом +/-5) А-0-255

установки яркости рисуем на экране Br_A автоматический режим яркости, жмем + переходим в ручной режим выбора яркости от В__0 до В255. далее еще раз жмем menu попадаем в установки времени отображения температуры

case 2: установка времени отображения температуры (время показа температуры с шагом +/-1 сек)

установки времени отображения температуры рисуем на экране t_00 и к примеру до t_10  и т.д. далее еще раз жмем menu попадаем в установки часов

case 3: установка времени час (с шагом +/-1 час)

установка часов рисуем H_00 от 00 до 24

и еще раз menu установки минут

case 4: установка времени минуты (с шагом +/-1 минута)

установка минут m_00 от 00 до 60

dj-toxa
Offline
Зарегистрирован: 06.04.2016

dj-toxa пишет:

и еще раз menu установки минут

case 4: установка времени минуты (с шагом +/-1 минута)

установка минут m_00 от 00 до 60

тут немного не так m_00, а что то вроде гп00, т.к. на одном семисегментнике m не выведешь =)

OdinochkA
Offline
Зарегистрирован: 05.07.2015

РАБОТАЕТ )))))))))))))))))))

Теперь получается, что цвет может меняться по времени. Если закоментировать блок смены цвета, время будет меняться только по кнопке. Кнопка смены цвета на Pin 4. Прям огромнейшее спасибо всем участвовашим в этом (безобразии) ПРОЕКТЕ

#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include <FastLED.h>

#define LEDS_IN_SEGMENT 3 //   Задаём сколько у нас светодиодов в сегменте.
#define COLOR_CHANGE 0    // ( 0 - NEVER, 1 - once a minute, 2 - every 10 min, 3 - hourly, 4 - every 10 hrs)
#define NUM_COLORS 16
#define COLOR_ORDER BGR   // По умолчанию цвет стоит зелёный при выключенных режимах
#define DATA_PIN 13
//#define BRIGHTNESS 150

// Вычислемые константы, НЕ РЕДАКТИРОВАТЬ!
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + 2)
#define DOT1  (LEDS_IN_SEGMENT * 14)
#define DOT2  (LEDS_IN_SEGMENT * 14  + 1)


CRGB leds[NUM_LEDS]; //Задаём значение светодиодов
uint8_t  digits[] = {
  0b00111111,     // Digit 0
  0b00100001,     // Digit 1
  0b01110110,     // Digit 2
  0b01110011,     // Digit 3
  0b01101001,     // Digit 4
  0b01011011,     // Digit 5
  0b01011111,     // Digit 6
  0b00110001,     // Digit 7
  0b01111111,     // Digit 8
  0b01111011,     // Digit 9
  0b01111000,     // Digit *0
  0b00011110,     // Digit C
  0b01111100,     // Digit P
};

bool Dot = true;
bool DST = false; // DCT false
bool TempShow = true;
int last_digit = 0;


long ledColor = CRGB::Salmon; // Используемый цвет
//long ledColor = CRGB::MediumVioletRed;
long ColorTable[NUM_COLORS] = {
  CRGB::Amethyst,
  CRGB::Aqua,
  CRGB::Blue,
  CRGB::Chartreuse,
  CRGB::DarkGreen,
  CRGB::DarkMagenta,
  CRGB::DarkOrange,
  CRGB::DeepPink,
  CRGB::Fuchsia,
  CRGB::Gold,
  CRGB::GreenYellow,
  CRGB::LightCoral,
  CRGB::Tomato,
  //CRGB::Salmon,
  CRGB::Red,
  CRGB::Orchid,
  CRGB::DarkOrchid
};

void setup() {
  Serial.begin(9600);
  Wire.begin();
  LEDS.addLeds<WS2812, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);

  //LEDS.setBrightness(75); // Задаём яркость
  pinMode(4, INPUT_PULLUP); // Кнопка смены цветов
  pinMode(3, INPUT_PULLUP); // Кнопка регулировки минут
  pinMode(2, INPUT_PULLUP); // Кнопка регулировки часов
}
void BrightDots (boolean Dot_On) {
  leds[DOT1] = (Dot_On) ? ledColor : 0;
  leds[DOT2] = (Dot_On) ? ledColor : 0;
}

void BrightDigit (uint8_t digit, uint8_t cursor)
{
  for (uint8_t mask = 0b01000000; mask > 0; mask = mask >> 1)
  {
    for (uint8_t i = 0; i < LEDS_IN_SEGMENT; i++)
    {
      leds[cursor] = (digit & mask) ? ledColor : 0;
      cursor ++;
    }
  }
}
// снова датчик света
//Массив управляет яркостью
void BrightnessCheck()
{
  const byte sensorPin = 6;
  //const byte brightnessLow = 50;
  //const byte brightnessHigh = 255;
  int sensorValue = analogRead(sensorPin);
  Serial.print("Ambient is: ");
  Serial.println(sensorValue);
  sensorValue = map(sensorValue, 255, 0, 10, 254);
  LEDS.setBrightness(sensorValue);
  // if (sensorValue <= 10) {LEDS.setBrightness(brightnessLow);}//если темно то минимум
  // else {LEDS.setBrightness(brightnessHigh);}//если светло то максимум
};

//  Получаем время в одном номере, если часы будет только одна цифра то будет отображаться 155  вместо 0155
int GetTime()
{
  tmElements_t Now;
  RTC.read(Now);
  //time_t Now = RTC.Now();// Получаем данные текущего времени и его хранение
  int hour = Now.Hour;
  int minute = Now.Minute;
  int second = Now.Second;

  if (second % 2 == 0)
  {
    Dot = false;
  }
  else {
    Dot = true;
  };
  return (hour * 100 + minute);
};

// Преобразуем время в массив для отображание

void TimeToArray() {
  int Now = GetTime(); // Получаем время
  BrightDots(Dot);

  for (int i = 1; i <= 4; i++) {
    int digit = Now % 10; // Получаем последнюю цифру в времени
    int cursor = NUM_LEDS - i * LEDS_IN_SEGMENT * 7;
    if (i > 2) {
      cursor -= 2;
    }
    BrightDigit(digits[digit], cursor);
    if ( i == COLOR_CHANGE) {
      if (digit != last_digit)
      {
        cylon ();                              // цикличное изменение цветов
        ledColor =  ColorTable[random(NUM_COLORS)];    // цикличное изменение цветов
      }
      last_digit = digit;
    }
    Now /= 10;
  };
};

// Преобразуем Temp в массив для отображение
void TempToArray() {
  tmElements_t tm;
  RTC.read(tm);
  if (tm.Second != 27) {
    TempShow = false;
    return;
  }
  TempShow = true;
  int t = RTC.temperature();
  int celsius = (t / 4.0);
  BrightDots(0);
  BrightDigit(digits[11], (NUM_LEDS - LEDS_IN_SEGMENT * 7));
  BrightDigit(digits[10], (NUM_LEDS - LEDS_IN_SEGMENT * 14));
  int digit = celsius % 10;
  BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 21 - 2));
  celsius /= 10;
  digit = celsius % 10;
  BrightDigit(digits[digit], (NUM_LEDS - LEDS_IN_SEGMENT * 28 - 2));
};

//смена цвета ленты кнопкой DST Pin 4
void DSTcheck() {
  int buttonDST = digitalRead(4);
  if (buttonDST == LOW) {
    ledColor =  ColorTable[random(NUM_COLORS)];
  };
  delay(500);
};

// Массив управляет кнопками с часами и минутами
void TimeAdjust() {
  int buttonH = digitalRead(2);
  int buttonM = digitalRead(3);
  if (buttonH == LOW || buttonM == LOW) {
    delay(500);
    tmElements_t Now;
    RTC.read(Now);
    int hour = Now.Hour;
    int minutes = Now.Minute;
    int second = Now.Second;
    if (buttonH == LOW) {
      if (Now.Hour == 23) {
        Now.Hour = 0;
      }
      else {
        Now.Hour += 1;
      };
    }
    else
    {
      if (Now.Minute == 59) {
        Now.Minute = 0;
      }
      else {
        Now.Minute += 1;
      };
    };
    RTC.write(Now);
  }
}

//Меняем эффекты
void fadeall() {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i].nscale8(250);
  }
}

// массив отвечает за цикличное изменение цветов
void cylon () {
  static uint8_t hue = 0;
  Serial.print("x");
  // Сдвигаем один светодиод в любом направлении
  for (int i = 0; i < NUM_LEDS; i++) {
    // Устанавливаем 1 светодиод на цвет красный
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды
    FastLED.show();
    fadeall();
    // Ждём немного и повторяем цикл
    delay(10);
  }
  Serial.print("x");

  // Сдвигаем один светодиод в любом направлении
  for (int i = (NUM_LEDS) - 1; i >= 0; i--) {
    // Устанавливаем 1 светодиод на цвет красный
    leds[i] = CHSV(hue++, 255, 255);
    // Показываем светодиоды
    FastLED.show();
    fadeall();
    // Ждём немного и повторяем цикл
    delay(10);
  }
}

void loop()
{
  BrightnessCheck(); // Проверяем датчик
  DSTcheck(); // Проверяем режимы, не нужен
  TimeAdjust(); // Проверяем время если сменилось на 1 цифру
  TimeToArray(); // Проверяем часы если сменилось на 1 цифру
  TempToArray();
  FastLED.show(); // Задаём массив светодиодов
  if (TempShow == true) delay (8000);
}

 

 

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA пишет:

РАБОТАЕТ )))))))))))))))))))

Теперь получается, что цвет может меняться по времени. Если закоментировать блок смены цвета, время будет меняться только по кнопке. Кнопка смены цвета на Pin 4.

Хорошо что работает.

А зачем блок смены цвета комментировать? - просто ставьте "COLOR_CHANGE 0" в строке 7 . А нежелательную радугу при настройке времени я уберу - там все тоже не сложно, просто не одна строчка, а чуть больше. Будет свободное время - сделаю.

Taras9696
Offline
Зарегистрирован: 01.03.2019

У вы, но я выхожу из игры( Ардуино или лента выйшла из строя, сначала отрубались часы каждые 20 минут, потом каждые 10, сейчас захожу и наблюдаю что сигменты или не горят или горят не теми цветами, библиотека неопиксель вообще творит неизвестно что) Я так понимаю что это лента, ардуино скорее всего жива(  Что самое интересное цвета все горят, что можете посоветовать, как проверить ардуино на всякий?

Беда еще в том что они не разборные, а дырки в стене просверлены, обратного пути нет(

Taras9696
Offline
Зарегистрирован: 01.03.2019

Очень странно, сейчас грузанул новый скетч, и при подключении то загорается один светодиод то 0

Taras9696
Offline
Зарегистрирован: 01.03.2019

Так, на новой прошивке горит L красным, на старой все пашет, но пашет как показано выше и зависает через 10 мин, что то не уверен что именно лента виновник

b707
Offline
Зарегистрирован: 26.05.2017

Taras9696 - вы в новой прошивке число диодов на сегмент в строке 6 выставили ? - у вас вроде 1 диод должен быть

Taras9696
Offline
Зарегистрирован: 01.03.2019

Да все выставил, с 3 поменял на 1, просто что-то у меня поламалось) некоторые сегменты мигают, некоторые не горят, а иногда вместо одного цвета радуга

dj-toxa
Offline
Зарегистрирован: 06.04.2016

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

dj-toxa
Offline
Зарегистрирован: 06.04.2016

b707 пишет:

Хорошо что работает.

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

OdinochkA
Offline
Зарегистрирован: 05.07.2015

Taras9696 пишет:

Да все выставил, с 3 поменял на 1, просто что-то у меня поламалось) некоторые сегменты мигают, некоторые не горят, а иногда вместо одного цвета радуга

Попробуйте это залейте. ТОлько нужно сменить пин подключения ленты. Посмотрите живая ли лента

#include "FastLED.h"          // библиотека для работы с лентой

#define LED_COUNT 30          // число светодиодов в кольце/ленте
#define LED_DT 13             // пин, куда подключен DIN ленты

int max_bright = 175;         // максимальная яркость (0 - 255)
int ledMode = 3;
/*
  Стартовый режим
  0 - все выключены
  1 - все включены
  3 - кольцевая радуга
  888 - демо-режим
*/

// цвета мячиков для режима
byte ballColors[3][3] = {
  {0xff, 0, 0},
  {0xff, 0xff, 0xff},
  {0   , 0   , 0xff},
};

// ---------------СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ-----------------
int BOTTOM_INDEX = 0;        // светодиод начала отсчёта
int TOP_INDEX = int(LED_COUNT / 2);
int EVENODD = LED_COUNT % 2;
struct CRGB leds[LED_COUNT];
int ledsX[LED_COUNT][3];     //-ARRAY FOR COPYING WHATS IN THE LED STRIP CURRENTLY (FOR CELL-AUTOMATA, MARCH, ETC)

int thisdelay = 20;          //-FX LOOPS DELAY VAR
int thisstep = 10;           //-FX LOOPS DELAY VAR
int thishue = 0;             //-FX LOOPS DELAY VAR
int thissat = 255;           //-FX LOOPS DELAY VAR

int thisindex = 0;
int thisRED = 0;
int thisGRN = 0;
int thisBLU = 0;

int idex = 0;                //-LED INDEX (0 to LED_COUNT-1
int ihue = 0;                //-HUE (0-255)
int ibright = 0;             //-BRIGHTNESS (0-255)
int isat = 0;                //-SATURATION (0-255)
int bouncedirection = 0;     //-SWITCH FOR COLOR BOUNCE (0-1)
float tcount = 0.0;          //-INC VAR FOR SIN LOOPS
int lcount = 0;              //-ANOTHER COUNTING VAR
// ---------------СЛУЖЕБНЫЕ ПЕРЕМЕННЫЕ-----------------

void one_color_all(int cred, int cgrn, int cblu) {       //-SET ALL LEDS TO ONE COLOR
  for (int i = 0 ; i < LED_COUNT; i++ ) {
    leds[i].setRGB( cred, cgrn, cblu);
  }
}

void one_color_allHSV(int ahue) {    //-SET ALL LEDS TO ONE COLOR (HSV)
  for (int i = 0 ; i < LED_COUNT; i++ ) {
    leds[i] = CHSV(ahue, thissat, 255);
  }
}

void setup()
{
  Serial.begin(9600);              // открыть порт для связи
  LEDS.setBrightness(max_bright);  // ограничить максимальную яркость

  LEDS.addLeds<WS2811, LED_DT, GRB>(leds, LED_COUNT);  // настрйоки для нашей ленты (ленты на WS2811, WS2812, WS2812B)
  one_color_all(0, 0, 0);          // погасить все светодиоды
  LEDS.show();                     // отослать команду
}


void change_mode(int newmode) {
  thissat = 255;
  switch (newmode) {
    case 0: one_color_all(0, 0, 0); LEDS.show(); break; //---ALL OFF
    case 1: one_color_all(255, 255, 255); LEDS.show(); break; //---ALL ON
    case 2: thisdelay = 20; break;                      //---STRIP RAINBOW FADE
    case 3: thisdelay = 20; thisstep = 10; break;       //---RAINBOW LOOP
    case 4: thisdelay = 20; break;                      //---RANDOM BURST
    case 5: thisdelay = 20; thishue = 0; break;         //---CYLON v1
    case 6: thisdelay = 40; thishue = 0; break;         //---CYLON v2
    case 7: thisdelay = 40; thishue = 0; break;         //---POLICE LIGHTS SINGLE
    case 8: thisdelay = 40; thishue = 0; break;         //---POLICE LIGHTS SOLID
    case 9: thishue = 160; thissat = 50; break;         //---STRIP FLICKER
    case 10: thisdelay = 15; thishue = 0; break;        //---PULSE COLOR BRIGHTNESS
    case 11: thisdelay = 15; thishue = 0; break;        //---PULSE COLOR SATURATION
    case 12: thisdelay = 60; thishue = 180; break;      //---VERTICAL SOMETHING
    case 13: thisdelay = 100; break;                    //---CELL AUTO - RULE 30 (RED)
    case 14: thisdelay = 40; break;                     //---MARCH RANDOM COLORS
    case 15: thisdelay = 80; break;                     //---MARCH RWB COLORS
    case 16: thisdelay = 60; thishue = 95; break;       //---RADIATION SYMBOL
    //---PLACEHOLDER FOR COLOR LOOP VAR DELAY VARS
    case 19: thisdelay = 35; thishue = 180; break;      //---SIN WAVE BRIGHTNESS
    case 20: thisdelay = 100; thishue = 0; break;       //---POP LEFT/RIGHT
    case 21: thisdelay = 100; thishue = 180; break;     //---QUADRATIC BRIGHTNESS CURVE
    //---PLACEHOLDER FOR FLAME VARS
    case 23: thisdelay = 50; thisstep = 15; break;      //---VERITCAL RAINBOW
    case 24: thisdelay = 50; break;                     //---PACMAN
    case 25: thisdelay = 35; break;                     //---RANDOM COLOR POP
    case 26: thisdelay = 25; thishue = 0; break;        //---EMERGECNY STROBE
    case 27: thisdelay = 25; thishue = 0; break;        //---RGB PROPELLER
    case 28: thisdelay = 100; thishue = 0; break;       //---KITT
    case 29: thisdelay = 50; thishue = 95; break;       //---MATRIX RAIN
    case 30: thisdelay = 5; break;                      //---NEW RAINBOW LOOP
    case 31: thisdelay = 100; break;                    //---MARCH STRIP NOW CCW
    case 32: thisdelay = 100; break;                    //---MARCH STRIP NOW CCW
    case 33: thisdelay = 50; break;                     // colorWipe
    case 34: thisdelay = 50; break;                     // CylonBounce
    case 35: thisdelay = 15; break;                     // Fire
    case 36: thisdelay = 50; break;                     // NewKITT
    case 37: thisdelay = 20; break;                     // rainbowCycle
    case 38: thisdelay = 10; break;                     // rainbowTwinkle
    case 39: thisdelay = 50; break;                     // RunningLights
    case 40: thisdelay = 0; break;                      // Sparkle
    case 41: thisdelay = 20; break;                     // SnowSparkle
    case 42: thisdelay = 50; break;                     // theaterChase
    case 43: thisdelay = 50; break;                     // theaterChaseRainbow
    case 44: thisdelay = 100; break;                    // Strobe

    case 101: one_color_all(255, 0, 0); LEDS.show(); break; //---ALL RED
    case 102: one_color_all(0, 255, 0); LEDS.show(); break; //---ALL GREEN
    case 103: one_color_all(0, 0, 255); LEDS.show(); break; //---ALL BLUE
    case 104: one_color_all(255, 255, 0); LEDS.show(); break; //---ALL COLOR X
    case 105: one_color_all(0, 255, 255); LEDS.show(); break; //---ALL COLOR Y
    case 106: one_color_all(255, 0, 255); LEDS.show(); break; //---ALL COLOR Z
  }
  bouncedirection = 0;
  one_color_all(0, 0, 0);
  ledMode = newmode;
}

void loop() {

  if (Serial.available() > 0) {     // если что то прислали
    ledMode = Serial.parseInt();    // парсим в тип данных int
    change_mode(ledMode);           // меняем режим через change_mode (там для каждого режима стоят цвета и задержки)
  }
  switch (ledMode) {
    case 999: break;                           // пазуа
    case  2: rainbow_fade(); break;            // плавная смена цветов всей ленты
    case  3: rainbow_loop(); break;            // крутящаяся радуга
    case  4: random_burst(); break;            // случайная смена цветов
    case  5: color_bounce(); break;            // бегающий светодиод
    case  6: color_bounceFADE(); break;        // бегающий паровозик светодиодов
    case  7: ems_lightsONE(); break;           // вращаются красный и синий
    case  8: ems_lightsALL(); break;           // вращается половина красных и половина синих
    case  9: flicker(); break;                 // случайный стробоскоп
    case 10: pulse_one_color_all(); break;     // пульсация одним цветом
    case 11: pulse_one_color_all_rev(); break; // пульсация со сменой цветов
    case 12: fade_vertical(); break;           // плавная смена яркости по вертикали (для кольца)
    case 13: rule30(); break;                  // безумие красных светодиодов
    case 14: random_march(); break;            // безумие случайных цветов
    case 15: rwb_march(); break;               // белый синий красный бегут по кругу (ПАТРИОТИЗМ!)
    case 16: radiation(); break;               // пульсирует значок радиации
    case 17: color_loop_vardelay(); break;     // красный светодиод бегает по кругу
    case 18: white_temps(); break;             // бело синий градиент (?)
    case 19: sin_bright_wave(); break;         // тоже хрень какая то
    case 20: pop_horizontal(); break;          // красные вспышки спускаются вниз
    case 21: quad_bright_curve(); break;       // полумесяц
    case 22: flame(); break;                   // эффект пламени
    case 23: rainbow_vertical(); break;        // радуга в вертикаьной плоскости (кольцо)
    case 24: pacman(); break;                  // пакман
    case 25: random_color_pop(); break;        // безумие случайных вспышек
    case 26: ems_lightsSTROBE(); break;        // полицейская мигалка
    case 27: rgb_propeller(); break;           // RGB пропеллер
    case 28: kitt(); break;                    // случайные вспышки красного в вертикаьной плоскости
    case 29: matrix(); break;                  // зелёненькие бегают по кругу случайно
    case 30: new_rainbow_loop(); break;        // крутая плавная вращающаяся радуга
    case 31: strip_march_ccw(); break;         // чёт сломалось
    case 32: strip_march_cw(); break;          // чёт сломалось
    case 33: colorWipe(0x00, 0xff, 0x00, thisdelay);
      colorWipe(0x00, 0x00, 0x00, thisdelay); break;                                // плавное заполнение цветом
    case 34: CylonBounce(0xff, 0, 0, 4, 10, thisdelay); break;                      // бегающие светодиоды
    case 35: Fire(55, 120, thisdelay); break;                                       // линейный огонь
    case 36: NewKITT(0xff, 0, 0, 8, 10, thisdelay); break;                          // беготня секторов круга (не работает)
    case 37: rainbowCycle(thisdelay); break;                                        // очень плавная вращающаяся радуга
    case 38: TwinkleRandom(20, thisdelay, 1); break;                                // случайные разноцветные включения (1 - танцуют все, 0 - случайный 1 диод)
    case 39: RunningLights(0xff, 0xff, 0x00, thisdelay); break;                     // бегущие огни
    case 40: Sparkle(0xff, 0xff, 0xff, thisdelay); break;                           // случайные вспышки белого цвета
    case 41: SnowSparkle(0x10, 0x10, 0x10, thisdelay, random(100, 1000)); break;    // случайные вспышки белого цвета на белом фоне
    case 42: theaterChase(0xff, 0, 0, thisdelay); break;                            // бегущие каждые 3 (ЧИСЛО СВЕТОДИОДОВ ДОЛЖНО БЫТЬ НЕЧЁТНОЕ)
    case 43: theaterChaseRainbow(thisdelay); break;                                 // бегущие каждые 3 радуга (ЧИСЛО СВЕТОДИОДОВ ДОЛЖНО БЫТЬ КРАТНО 3)
    case 44: Strobe(0xff, 0xff, 0xff, 10, thisdelay, 1000); break;                  // стробоскоп

    case 45: BouncingBalls(0xff, 0, 0, 3); break;                                   // прыгающие мячики
    case 46: BouncingColoredBalls(3, ballColors); break;                            // прыгающие мячики цветные

    case 888: demo_modeA(); break;             // длинное демо
    case 889: demo_modeB(); break;             // короткое демо
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

dj-toxa пишет:

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

Ну для начала надо разобраться, почему у Тараса не работает. Может лента, а может в моем коде косяк. Без этого двигаться вперед рано.

Taras9696
Offline
Зарегистрирован: 01.03.2019

У меня лента скорее всего сдохла, на всех прошивких полная ахинея, наверное буду заказывать на 12в( 

Taras9696
Offline
Зарегистрирован: 01.03.2019

подскажите надежную ленту под которую есть прошивки

OdinochkA
Offline
Зарегистрирован: 05.07.2015

Taras9696 пишет:

У меня лента скорее всего сдохла, на всех прошивких полная ахинея, наверное буду заказывать на 12в( 

Отключите от ардуины всё. Оставьте только ленту. Её подключите к своему пину на ардуине через резистор 100-400Ом (у меня идет из набора 220 Ом). Питание подавать сразу и на ленту и на дуню с одного блока. 

Далее в Arduino  зайдите Файл-Примеры-EEPROM-eeprom_clear. Этим вы очистите всю память. Загрузите скетч в дуню. После этого загружайте скетч который я вам дал для проверки ленты в сообщении №138. Там должна бежать змейка со сменой цветов и другие эффекты. Если лента будет продолжать вести себя не нормально, значит она накрылась и стоит искать другую. Если цвета меняются нормально и по порядку, значит смотрите проблемы в часовом скетче. Проверьте правильность пайки и направления светодиодов.

А если использовать ленту на 12 В, вам ещё придется понижающий модуль ставить, потому как дуне нужно 5 в.

У меня лента ws2812b 5 в. Питаю всё своё хозяство китайским блоком 5в 3 а (хотя можно и побольше ампер с запасом). Блок чуть тёплый, часы светятся на яркости 200. Вы писали что у вас блок на 5в 1а. Не может быть в этом проблема? Мало тока? И попробуйте убрать конденсаторы про которые вы писали. Только лента с резистором, ардуино и питание и код для проверки ленты

dj-toxa
Offline
Зарегистрирован: 06.04.2016

Taras9696 пишет:

подскажите надежную ленту под которую есть прошивки

тут особо не подскажешь и у хороших продовцов бывает попадаются не удачные (косячные) партии лент. но по моему личному опыту 2811 лучше чем 2812 (с 2812 лично мне не везло), но с 2811 есть свои нюансы, а вместо 2812 сейчас появилась 2813, вроде лучше, но тут тоже не знаю возможно лотерея как и с 2812

dj-toxa
Offline
Зарегистрирован: 06.04.2016

OdinochkA пишет:

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

 не обязательно менять всё возможно вылетел первы-второй  диод (статика, брак и пр..) и после замены всё будет норм. по питанию обычно 2811 12в, 2812 5в. для подобных часов блока питания 12в 2А хватает за глаза (для 2812 если много диодов (4-5) на сегмент, 3А с небольшим запасиком). самое оптимальное собирать такие часы на 2811 сразу три диода (1 пиксель) на сегмент. единственное что у них цветовая палитра вроде отличается не RGB, а GBR

b707
Offline
Зарегистрирован: 26.05.2017

OdinochkA пишет:

Далее в Arduino  зайдите Файл-Примеры-EEPROM-eeprom_clear. Этим вы очистите всю память.

это не нужно, скетч из сообщения #138 не использует  ЕЕПРОМ

OdinochkA
Offline
Зарегистрирован: 05.07.2015

b707 пишет:

OdinochkA пишет:

Далее в Arduino  зайдите Файл-Примеры-EEPROM-eeprom_clear. Этим вы очистите всю память.

это не нужно, скетч из сообщения #138 не использует  ЕЕПРОМ

Просто очистить дуню от всего шлака, что там мог накопиться. Я всегда делаю если начинаются какие то гоны

Taras9696
Offline
Зарегистрирован: 01.03.2019

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

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

Я чего думал 2811 тк ток то меньше в этом наверное и надежноть, а дуню можно и через ЛМ317 запитать

bwn
Offline
Зарегистрирован: 25.08.2014

Мне думается, что БП вам гадил (был 5В 1А?). Они есть от зарядок с поганой стабилизацией. Ток устанавливается чипом в диоде, здесь вы ничего сделать не сможете, а прыгающее напряжение может и пожечь.
Как, кстати, питающая разводка по лентам сделана, какое сечение провода?

Taras9696
Offline
Зарегистрирован: 01.03.2019

bwn пишет:

Мне думается, что БП вам гадил (был 5В 1А?). Они есть от зарядок с поганой стабилизацией. Ток устанавливается чипом в диоде, здесь вы ничего сделать не сможете, а прыгающее напряжение может и пожечь.
Как, кстати, питающая разводка по лентам сделана, какое сечение провода?

Да скорее всего БП, тк замерял на слабом просадки 5-3в, сейчас вроде стабильно пашет, но пашет только один день, послежу дня три, да хз какое сечение) на входе провода с комплекта толстые, остальное провода с магнитофона, но все же думаю на источник 

b707
Offline
Зарегистрирован: 26.05.2017

Taras9696 пишет:

В общем такие дела, разобрал часы и поменял первые 7 сегментом и последние и все заработало

Уточните, плиз - работает новый код или старый?