ESP, IoT WiFi лампа-будильник. Обсуждение проекта

Сообщение изъято на правах администрации
ВНИМАНИЕ !!!
те кто живой и хочет увидеть ссылку на свое исполнение, прошу централизовать все свои доработки и сообщения. Далее в теме пишем сообщение с ссылкой на ваше сообщение (с проектом), с пометкой @mechanic .


В данной ветке обсуждаются только сия проект. Общие вопросы, доработки и проблемы, не относящиеся к конкретным прошивкам!. Вопросы по прошивкам решаем в темах самих прошивок. Здесь такие разговоры оффтоп.
Всякий любой вопрос не по теме сразу удаляется БЕЗ объяснения причины!
Для этого есть соответствующие ветки форума. Вопрос почему удалили мой пост? также удаляется.

  • Общаясь на форуме будьте взаимно вежливы!
  • Обратите внимание на то, что у нас принято говорить Спасибо путём повышения репутации, нажав на кнопочку
    .
  • Если есть претензии то нажмите кнопку .
  • Запрещено писать красным цветом в ваших постах - этот цвет только для Модераторов .
  • Вопросы, ответ на которые есть в шапке или в FAQ, будут удаляться. За повторный вопрос пользователь может быть наказан.
  • Убедительная просьба придерживаться тематики ветки, избегать флуда и оффтопа!
Очень часто при первом запуске лампы, при подключении к сети лампы не открывается менеджер сетей WIFI.
Помогает комментирование строки #define ESP_USE_BUTTON (отключение кнопки) и заливка скетча выставив Erase flash в All Flash Content
После того, как вы подключили лампу к сети эту строку можно раскомментировать и залить скетч с параметром Erase flash установленным в Only Sketh
Наш участник собрал много полезной информации по блокам питания для лампы. Качественное питание - необходимое условие надёжной работы любого устройства. Изучаем: https://community.alexgyver.ru/threads/nebolshoj-opus-po-bp-dlja-gyverlamp-wifi-lampa-budilnik.3523/

ВНИМАНИЕ! Если у вас не компилируется или не загружается скетч - значит вы сделали что-то неправильно. Специально для вас созданы две темы:
ESP8266, проблема с компиляцией скетча
ESP8266, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 

Комментарии

recoshet

★✩✩✩✩✩✩
15 Июн 2019
1
14
Сообщение изъято на правах администрации
ВНИМАНИЕ !!!
те кто живой и хочет увидеть ссылку на свое исполнение, прошу централизовать все свои доработки и сообщения. Далее в теме пишем сообщение с ссылкой на ваше сообщение (с проектом), с пометкой @mechanic .


В данной ветке обсуждаются только сия проект. Общие вопросы, доработки и проблемы, не относящиеся к конкретным прошивкам!. Вопросы по прошивкам решаем в темах самих прошивок. Здесь такие разговоры оффтоп.
Всякий любой вопрос не по теме сразу удаляется БЕЗ объяснения причины!
Для этого есть соответствующие ветки форума. Вопрос почему удалили мой пост? также удаляется.

  • Общаясь на форуме будьте взаимно вежливы!
  • Обратите внимание на то, что у нас принято говорить Спасибо путём повышения репутации, нажав на кнопочку
    .
  • Если есть претензии то нажмите кнопку .
  • Запрещено писать красным цветом в ваших постах - этот цвет только для Модераторов .
  • Вопросы, ответ на которые есть в шапке или в FAQ, будут удаляться. За повторный вопрос пользователь может быть наказан.
  • Убедительная просьба придерживаться тематики ветки, избегать флуда и оффтопа!
Очень часто при первом запуске лампы, при подключении к сети лампы не открывается менеджер сетей WIFI.
Помогает комментирование строки #define ESP_USE_BUTTON (отключение кнопки) и заливка скетча выставив Erase flash в All Flash Content
После того, как вы подключили лампу к сети эту строку можно раскомментировать и залить скетч с параметром Erase flash установленным в Only Sketh
Наш участник собрал много полезной информации по блокам питания для лампы. Качественное питание - необходимое условие надёжной работы любого устройства. Изучаем: https://community.alexgyver.ru/threads/nebolshoj-opus-po-bp-dlja-gyverlamp-wifi-lampa-budilnik.3523/

ВНИМАНИЕ! Если у вас не компилируется или не загружается скетч - значит вы сделали что-то неправильно. Специально для вас созданы две темы:
ESP8266, проблема с компиляцией скетча
ESP8266, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
Некоторые хотят зачем-то
Эффект (режим)
ЧА
СЫ

IMG_20200514_145217.jpg IMG_20200514_174309.jpg IMG_20200514_193937.jpg

Идея была в том, чтобы впихнуть все цифры на одну видимую сторону лампы.
Но выглядит это довольно убого, особенно с моим размытием.

Высота цифр на первом фото всего 4 пикселя (подходит для матриц высотой не менее 10 пикселей, если без мигающих точек).
Под спойлером код эффекта с высотой 5 пикселей (для матриц от 12 и выше без мигающих точек, от 13, если с точками).
Во вложенных файлах оба варианта.
C-like:
// ------------------------------ ЭФФЕКТ ЧАСЫ ----------------------
// (c) SottNick

#define CLOCK_SAVE_MODE     // удалите или закомментируйте эту строчку, чтобы цифры всегда оставались на одном месте, не двигались по вертикали (не хорошо для светодиодов. выгорают зря)
#if HEIGHT > 12
#define CLOCK_BLINKING      // удалите или закомментируйте эту строчку, чтобы точки не мигали
#endif
//uint8_t hue, hue2; // храним тут часы и минуты
//uint8_t deltaHue, deltaHue2; // храним здесь задержки мигания точек
//uint8_t deltaValue; // счётчик цикла / яркости точек на часах
//uint8_t poleX, poleY; // храним здесь сдвиг циферблата по горизонтали и вертикали (переменные объявлены в эффекте Кубик Рубика)
static const uint8_t clockFont3x5[10][3] PROGMEM = { // цифры зеркально и на левом боку (так проще рисовать в циклах и экономнее для памяти)
  {B11111,
   B10001,
   B11111},
  {B01001,
   B11111,
   B00001},
  {B10011,
   B10101,
   B01001},
  {B10001,
   B10101,
   B01010},
  {B11100,
   B00100,
   B11111},
  {B11101,
   B10101,
   B10010},
  {B01111,
   B10101,
   B10111},
  {B10011,
   B10100,
   B11000},
  {B11111,
   B10101,
   B11111},
  {B11101,
   B10101,
   B11110}
};
void drawDig3x5(uint8_t x, uint8_t y, uint8_t num, CRGB color){ // uint8_t hue, uint8_t sat, uint8_t bri = 255U
    for (uint8_t i = 0U; i < 3U; i++)
    {
      uint8_t m = pgm_read_byte(&clockFont3x5[num][i]);
      for (uint8_t j = 0U; j < 5U; j++)
        if ((m >> j) & 0x01)
          drawPixelXY((x + i) % WIDTH, (y + j) % HEIGHT, color);
    }
}

void clockRoutine(){
    if (loadingFlag)
    {
      loadingFlag = false;
      poleX = (modes[currentMode].Speed - 1U) % WIDTH; //смещение цифр по горизонтали
      #ifdef CLOCK_BLINKING
        poleY = (modes[currentMode].Speed - 1U) / WIDTH % (HEIGHT - 13U);  //смещение цифр по вертикали (для режима CLOCK_SAVE_MODE будет меняться само)
      #else
        #if HEIGHT > 11
          poleY = (modes[currentMode].Speed - 1U) / WIDTH % (HEIGHT - 12U);  //смещение цифр по вертикали (для режима CLOCK_SAVE_MODE будет меняться само)
        #else // если матрица всего 11 пикселей в высоту, можно сэкономить 1 и впихнуть часы в неё. но если меньше, нужно брать код эффекта с высотой цифр 4 пикселя, а не 5
          poleY = (modes[currentMode].Speed - 1U) / WIDTH % (HEIGHT - 11U);  //смещение цифр по вертикали (для режима CLOCK_SAVE_MODE будет меняться само)
        #endif
      #endif
      hue2 = 255U; // количество минут в данный момент (первоначально запредельое значение)
      deltaHue2 = 0; // яркость точки в данный момент
      deltaValue = modes[currentMode].Scale * 2.55; // выбранный оттенок цифр
    }

  #ifdef USE_NTP
  time_t currentLocalTime = localTimeZone.toLocal(timeClient.getEpochTime());
  #else
  time_t currentLocalTime = millis() / 1000UL;
  #endif

  if (minute(currentLocalTime) != hue2)
  {
    #ifdef CLOCK_SAVE_MODE
      #ifdef CLOCK_BLINKING
        poleY = (poleY + 1U) % (HEIGHT - 13U);
      #else
        #if HEIGHT > 11
          poleY = (poleY + 1U) % (HEIGHT - 12U);
        #else // если матрица всего 11 пикселей в высоту, можно сэкономить 1 и впихнуть часы в неё. но если меньше, нужно брать код эффекта с высотой цифр 4 пикселя, а не 5
          poleY = (poleY + 1U) % (HEIGHT - 11U);
        #endif
      #endif
    #endif
    step = 1U; // = CLOCK_REFRESH_DELAY; раньше делал постепенное затухание. получалось хуже
    hue = hour(currentLocalTime);
    hue2 = minute(currentLocalTime);
  }
  if (step > 0) // тут меняются цифры на часах
  {
    step--;
    //uint8_t bri = (CLOCK_REFRESH_DELAY - step) * 255.0 / CLOCK_REFRESH_DELAY;
    uint8_t sat = (modes[currentMode].Scale == 100) ? 0U : 255U;

    FastLED.clear();
    // рисуем цифры
    #ifdef CLOCK_BLINKING
      drawDig3x5(poleX, (poleY + 8U) % HEIGHT,                  hue  / 10U % 10U, CHSV(deltaValue, sat, 255U));
      drawDig3x5((poleX + 4U) % WIDTH, (poleY + 8U) % HEIGHT,   hue        % 10U, CHSV(deltaValue, sat, 255U));
    #else
      #if HEIGHT > 11
        drawDig3x5(poleX, (poleY + 7U) % HEIGHT,                hue  / 10U % 10U, CHSV(deltaValue, sat, 255U));
        drawDig3x5((poleX + 4U) % WIDTH, (poleY + 7U) % HEIGHT, hue        % 10U, CHSV(deltaValue, sat, 255U));
      #else // если матрица всего 11 пикселей в высоту, можно сэкономить 1 и впихнуть часы в неё. но если меньше, нужно брать код эффекта с высотой цифр 4 пикселя, а не 5
        drawDig3x5(poleX, (poleY + 6U) % HEIGHT,                hue  / 10U % 10U, CHSV(deltaValue, sat, 255U));
        drawDig3x5((poleX + 4U) % WIDTH, (poleY + 6U) % HEIGHT, hue        % 10U, CHSV(deltaValue, sat, 255U));
      #endif
    #endif
    drawDig3x5(poleX, poleY,                                    hue2 / 10U % 10U, CHSV(deltaValue, sat, 255U));
    drawDig3x5((poleX + 4U) % WIDTH, poleY,                     hue2       % 10U, CHSV(deltaValue, sat, 255U));
  }

#ifdef CLOCK_BLINKING
  // тут мигают точки
//  if (deltaHue != 0U)
//    deltaHue--;
//  else
//  {
//    deltaHue = 4U; // множитель задержки 50 мс * 4+1U = 250 мс
    if (deltaHue2 & 0x01)
      deltaHue2 = deltaHue2 - ((deltaHue2 >  15U) ? 16U : 15U);//- ((deltaHue2 >  63U) ? 64U : 63U);
    else
      deltaHue2 = deltaHue2 + ((deltaHue2 < 240U) ? 16U : 15U);//+ ((deltaHue2 < 192U) ? 64U : 63U);

    drawPixelXY((poleX + 2U) % WIDTH, poleY + 6U, CHSV(deltaValue, (modes[currentMode].Scale == 100) ? 0U : 255U, deltaHue2)); // цвет белый для .Scale=100
    drawPixelXY((poleX + 4U) % WIDTH, poleY + 6U, CHSV(deltaValue, (modes[currentMode].Scale == 100) ? 0U : 255U, deltaHue2)); // цвет белый для .Scale=100
//  }
#endif
}
 

Вложения

Изменено:
  • Лойс +1
Реакции: KogenS, Belokota и Burai

Susan1n

✩✩✩✩✩✩✩
30 Мар 2020
4
0
Потребление даже погашенной матрицы около 250мА, уменьшить его можно только с помощью полевого транзистора, полностью отключающего матрицу.
Ага, ясно. А как и куда его ставить (я практически полный ламер в электронике)? У него 3 ножки, правильно?
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Сотнег, фигасе... А не проще ли было поиспользовать вывод текста задав статический оффсет? Там ведь уже и работа с шрифтами есть и прочее. Ну и вам тоже напоминаю, что у Шайтана вроде были аналоговые часы, хотя конечно на матрице свернутой в трубу - фиг его знает как они выглядеть будут. :)

Ага, ясно. А как и куда его ставить (я практически полный ламер в электронике)? У него 3 ножки, правильно?
В теме где-то были примеры. Поищите поиском по "мосфет". Тут главное подобрать нужный, чтобы открывался от 3.3В, ну или открывать биполярником.
 

Susan1n

✩✩✩✩✩✩✩
30 Мар 2020
4
0
@Сотнег,
В теме где-то были примеры. Поищите поиском по "мосфет". Тут главное подобрать нужный, чтобы открывался от 3.3В, ну или открывать биполярником.
Хмм, спасибо)
Такой вопрос возник, а если поставить физическую фиксирующуюся кнопку на линию питания от батарей, это поможет?
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Такой вопрос возник, а если поставить физическую фиксирующуюся кнопку на линию питания от батарей, это поможет?
Ну если отключать питание, то конечно поможет. Единственное кнопку берите такую, чтобы не выгорала от больших токов. В идеале раза в 3 больше по макс току, чем тот который у вас заложен в лимитах.
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,128
412
Москва
wan-derer.ru
Не должен. Пороговое напряжение это то, при котором транзистор только начинает открываться.
IRLZ44N можно попробовать. L означает логический, т.е. с логическим уровнем затвора. Но и он при 3В не полностью открыт, хотя лампу, возможно, потянет
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Не должен. Пороговое напряжение это то, при котором транзистор только начинает открываться.
Так я же приложил картинку с открытием от 2В, хотя IRLZ44N конечно лучше и надежнее для данного случая.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632

@Wan-Derer,
Ну а 60N03L подойдёт? Он N-канальный.
Ну и если я ему матрицу в соурс воткну, (в смысле + питания на дрейн транзистора, а из его соурса на + матрицы) - нормально?
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@azs27, смотря какая прошивка.

Вставить, скорее всего, просто в конец файла с эффектами (effects обычно называют).
При компиляции может потребоваться раскомментировать объявление каких-то переменных. Строчки там есть.

Вызывается эффект по имени clockRoutine();

Нужна ли эффекту регулировка скорости бегунком в effectTicker (в прошивках gunner47 есть разница),
я пока не решил. Работать может и так и так.
 

azs27

✩✩✩✩✩✩✩
19 Апр 2020
10
2
@Сотнег,
Уважаемый Сотнег, не могли бы Вы, вставить эти часы в любую версию Лампы .
Я думаю многие воспользуются этой прошивкой.

Спасибо большое.
 

menooooo

★✩✩✩✩✩✩
4 Мар 2019
72
10
Я правильно понял... Когда выключена матрица, на пине D1 Должно быть 3.3v если "HIGH" и 0v если "LOW"?
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492

@menooooo,
вопрос звучит странновато.
HIGH - означает "напряжение есть", LOW - "нету".

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

#define MOSFET_LEVEL (HIGH) // логический уровень, в который будет установлен пин MOSFET_PIN, когда матрица включена - HIGH или LOW
 

menooooo

★✩✩✩✩✩✩
4 Мар 2019
72
10

@menooooo,
вопрос звучит странновато.
HIGH - означает "напряжение есть", LOW - "нету".

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

#define MOSFET_LEVEL (HIGH) // логический уровень, в который будет установлен пин MOSFET_PIN, когда матрица включена - HIGH или LOW
К тому, что у меня что-то не так с матрицей....
Если подключить сигнальный кабель к пину "DIN" то матрица не сразу включается...
А если подключить к первому светодиоду, то матрица сразу включается....
Могу попробовать завтра снять видео...
Я хз почему так происходит....
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@menooooo, на разных пинах могут быть разные уровни (LOW/HIGH) при старте контроллера.
Потом прошивка в контроллере расставляет правильные уровни.

Я не понял, что вы к чему подключаете. Может, ну его нафиг, этот мосфет с аккумулятором, пока не взорвалось?
 
  • Лойс +1
Реакции: Vados2020

Фарит

✩✩✩✩✩✩✩
8 Май 2020
26
5
Некоторые хотят зачем-то
Эффект (режим)
ЧА
СЫ

Посмотреть вложение 13264 Посмотреть вложение 13276

Идея была в том, чтобы впихнуть все цифры на одну видимую сторону лампы.
Но выглядит это довольно убого, особенно с моим размытием.

Высота цифр на первом фото всего 4 пикселя (подходит для матриц высотой не менее 10 пикселей, если без мигающих точек).
Код спойлером код эффекта с высотой 5 пикселей (для матриц от 12 и выше без мигающих точек, от 13, если с точками).
Во вложенных файлах оба варианта.
C-like:
// ------------------------------ ЭФФЕКТ ЧАСЫ ----------------------
// (c) SottNick

#define CLOCK_SAVE_MODE     // удалите или закомментируйте эту строчку, чтобы цифры всегда оставались на одном месте, не двигались по вертикали (не хорошо для светодиодов. выгорают зря)
#if HEIGHT > 12
#define CLOCK_BLINKING      // удалите или закомментируйте эту строчку, чтобы точки не мигали
#endif
//uint8_t hue, hue2; // храним тут часы и минуты
//uint8_t deltaHue, deltaHue2; // храним здесь задержки мигания точек
//uint8_t deltaValue; // счётчик цикла / яркости точек на часах
//uint8_t poleX, poleY; // храним здесь сдвиг циферблата по горизонтали и вертикали (переменные объявлены в эффекте Кубик Рубика)
static const uint8_t clockFont3x5[10][3] PROGMEM = { // цифры зеркально и на левом боку (так проще рисовать в циклах и экономнее для памяти)
  {B11111,
   B10001,
   B11111},
  {B01001,
   B11111,
   B00001},
  {B10011,
   B10101,
   B01001},
  {B10001,
   B10101,
   B01010},
  {B11100,
   B00100,
   B11111},
  {B11101,
   B10101,
   B10010},
  {B01111,
   B10101,
   B10111},
  {B10011,
   B10100,
   B11000},
  {B11111,
   B10101,
   B11111},
  {B11101,
   B10101,
   B11110}
};
void drawDig3x5(uint8_t x, uint8_t y, uint8_t num, CRGB color){ // uint8_t hue, uint8_t sat, uint8_t bri = 255U
    for (uint8_t i = 0U; i < 3U; i++)
    {
      uint8_t m = pgm_read_byte(&clockFont3x5[num][i]);
      for (uint8_t j = 0U; j < 5U; j++)
        if ((m >> j) & 0x01)
          drawPixelXY((x + i) % WIDTH, (y + j) % HEIGHT, color);
    }
}

void clockRoutine(){
    if (loadingFlag)
    {
      loadingFlag = false;
      poleX = (modes[currentMode].Speed - 1U) % WIDTH; //смещение цифр по горизонтали
      #ifdef CLOCK_BLINKING
        poleY = (modes[currentMode].Speed - 1U) / WIDTH % (HEIGHT - 13U);  //смещение цифр по вертикали (для режима CLOCK_SAVE_MODE будет меняться само)
      #else
        #if HEIGHT > 11
          poleY = (modes[currentMode].Speed - 1U) / WIDTH % (HEIGHT - 12U);  //смещение цифр по вертикали (для режима CLOCK_SAVE_MODE будет меняться само)
        #else // если матрица всего 11 пикселей в высоту, можно сэкономить 1 и впихнуть часы в неё. но если меньше, нужно брать код эффекта с высотой цифр 4 пикселя, а не 5
          poleY = (modes[currentMode].Speed - 1U) / WIDTH % (HEIGHT - 11U);  //смещение цифр по вертикали (для режима CLOCK_SAVE_MODE будет меняться само)
        #endif
      #endif
      hue2 = 255U; // количество минут в данный момент (первоначально запредельое значение)
      deltaHue2 = 0; // яркость точки в данный момент
      deltaValue = modes[currentMode].Scale * 2.55; // выбранный оттенок цифр
    }

  #ifdef USE_NTP
  time_t currentLocalTime = localTimeZone.toLocal(timeClient.getEpochTime());
  #else
  time_t currentLocalTime = millis() / 1000UL;
  #endif

  if (minute(currentLocalTime) != hue2)
  {
    #ifdef CLOCK_SAVE_MODE
      #ifdef CLOCK_BLINKING
        poleY = (poleY + 1U) % (HEIGHT - 13U);
      #else
        #if HEIGHT > 11
          poleY = (poleY + 1U) % (HEIGHT - 12U);
        #else // если матрица всего 11 пикселей в высоту, можно сэкономить 1 и впихнуть часы в неё. но если меньше, нужно брать код эффекта с высотой цифр 4 пикселя, а не 5
          poleY = (poleY + 1U) % (HEIGHT - 11U);
        #endif
      #endif
    #endif
    step = 1U; // = CLOCK_REFRESH_DELAY; раньше делал постепенное затухание. получалось хуже
    hue = hour(currentLocalTime);
    hue2 = minute(currentLocalTime);
  }
  if (step > 0) // тут меняются цифры на часах
  {
    step--;
    //uint8_t bri = (CLOCK_REFRESH_DELAY - step) * 255.0 / CLOCK_REFRESH_DELAY;
    uint8_t sat = (modes[currentMode].Scale == 100) ? 0U : 255U;

    FastLED.clear();
    // рисуем цифры
    #ifdef CLOCK_BLINKING
      drawDig3x5(poleX, (poleY + 8U) % HEIGHT,                  hue  / 10U % 10U, CHSV(deltaValue, sat, 255U));
      drawDig3x5((poleX + 4U) % WIDTH, (poleY + 8U) % HEIGHT,   hue        % 10U, CHSV(deltaValue, sat, 255U));
    #else
      #if HEIGHT > 11
        drawDig3x5(poleX, (poleY + 7U) % HEIGHT,                hue  / 10U % 10U, CHSV(deltaValue, sat, 255U));
        drawDig3x4((poleX + 4U) % WIDTH, (poleY + 7U) % HEIGHT, hue        % 10U, CHSV(deltaValue, sat, 255U));
      #else // если матрица всего 11 пикселей в высоту, можно сэкономить 1 и впихнуть часы в неё. но если меньше, нужно брать код эффекта с высотой цифр 4 пикселя, а не 5
        drawDig3x5(poleX, (poleY + 6U) % HEIGHT,                hue  / 10U % 10U, CHSV(deltaValue, sat, 255U));
        drawDig3x4((poleX + 4U) % WIDTH, (poleY + 6U) % HEIGHT, hue        % 10U, CHSV(deltaValue, sat, 255U));
      #endif
    #endif
    drawDig3x5(poleX, poleY,                                    hue2 / 10U % 10U, CHSV(deltaValue, sat, 255U));
    drawDig3x5((poleX + 4U) % WIDTH, poleY,                     hue2       % 10U, CHSV(deltaValue, sat, 255U));
  }

#ifdef CLOCK_BLINKING
  // тут мигают точки
//  if (deltaHue != 0U)
//    deltaHue--;
//  else
//  {
//    deltaHue = 4U; // множитель задержки 50 мс * 4+1U = 250 мс
    if (deltaHue2 & 0x01)
      deltaHue2 = deltaHue2 - ((deltaHue2 >  15U) ? 16U : 15U);//- ((deltaHue2 >  63U) ? 64U : 63U);
    else
      deltaHue2 = deltaHue2 + ((deltaHue2 < 240U) ? 16U : 15U);//+ ((deltaHue2 < 192U) ? 64U : 63U);
 
    drawPixelXY((poleX + 2U) % WIDTH, poleY + 6U, CHSV(deltaValue, (modes[currentMode].Scale == 100) ? 0U : 255U, deltaHue2)); // цвет белый для .Scale=100
    drawPixelXY((poleX + 4U) % WIDTH, poleY + 6U, CHSV(deltaValue, (modes[currentMode].Scale == 100) ? 0U : 255U, deltaHue2)); // цвет белый для .Scale=100
//  }
#endif
}
@Сотнег, фигасе... А не проще ли было поиспользовать вывод текста задав статический оффсет? Там ведь уже и работа с шрифтами есть и прочее. Ну и вам тоже напоминаю, что у Шайтана вроде были аналоговые часы, хотя конечно на матрице свернутой в трубу - фиг его знает как они выглядеть будут. :)
@Сотнег,
Уважаемый Сотнег, не могли бы Вы, вставить эти часы в любую версию Лампы .
Я думаю многие воспользуются этой прошивкой.

Спасибо большое.
В этой прошивке добавил часы от Сотнега, и еще добавил эффект салют от Шайтана.
ссылка: https://yadi.sk/d/CdGaenk8-iQQ2Q
 
  • Лойс +1
Реакции: victory_lad и azs27

azs27

✩✩✩✩✩✩✩
19 Апр 2020
10
2
Последняя сборка, ОГОНЬ!!!

PS на всех прошивках 64, 66, 67 не работает эффект "ночного времени"
Часы как Были на яркости для вывода текущего времени бегущей строкой 255 так и остаются ночью с такой же яркостью.
 
Изменено:
  • Лойс +1
Реакции: Сотнег