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, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 

Константин 271

★★★✩✩✩✩
12 Июл 2020
950
105
Думал уже не выпускают, так как в нашей ленте не нашел.
да вот я последние забрал.

Только нюанс вылез - пробкой хочу вниз. В ней нужно сверлить отверстие под кабель. Это не проблема. НО в неё же вкручивается банка из стекла - я не могу его сверлить. Приходит на ум только сверловка внизу, почти у дна крышки, а банку не вкручивать до конца, сажать на жид. сопли. Есть ещё идеи? Дремлер или как его там не покупал и не планирую.

ps а что за режим такой там у вас - бегут пауки и скапливаются вверху?
 

EGORka

★✩✩✩✩✩✩
15 Мар 2020
87
37
за режим такой там у вас - бегут пауки и скапливаются вверху?
Это режим стек на контроллере. тут с 2.30 -

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

Константин 271

★★★✩✩✩✩
12 Июл 2020
950
105
, в сантехнике купить кольцо в размер крышки и выбрать его толщину, чтоб призакручивании край банки упирался в кольцо и не давал закрутится до конца.
да, сегодня придумал систему - 3-4 упора из пластика или ластик дя стирания нарезать, приклеить, будет 5 мм для провода. Принцип тот же. Проверим.

я ж из такой пару лет назад торшер сделал.
скажите, а датчик-сенсор имеет какую-то особенную реакцию на стекло?

У меня сегодня лампа сильно глючила. Сама включалась, выключалась, меняла яркость. Одел стеклянную банку, покрасив белым внутри. И кнопка очень туго реагирует. Палец кбрал, она гаснет ещё через ~0.4 сек, двойные клики почти невозможны
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
Новый
Эффект Мотыльки

Эффект устанавливается с теми, у которых бегунок Скорость не регулирует задержку между кадрами.
Отличие от Светлячков (кроме того, что эти новые плавно летают) в том,
что Мотыльки периодически как бы садятся на стекло, ну и летают кругами.

C-like:
// ------------- Светлячки 2 - Светлячки в банке - Мотыльки --------------
// (c) SottNick

//#define LIGHTERS_AM           (100U)
float lighters2PosX[LIGHTERS_AM];
float lighters2PosY[LIGHTERS_AM];
float lighters2SpeedX[LIGHTERS_AM];
float lighters2SpeedY[LIGHTERS_AM];
float lighters2Turn[LIGHTERS_AM];
uint8_t lighters2Color[LIGHTERS_AM];
uint8_t lighters2Brightness[LIGHTERS_AM];

void lightersRoutine2()
{
  if (loadingFlag)
  {
    loadingFlag = false;
    randomSeed(millis());
    if (modes[currentMode].Scale > LIGHTERS_AM) modes[currentMode].Scale = LIGHTERS_AM;
    for (uint8_t i = 0U; i < LIGHTERS_AM; i++)
    {
      //lightersIdx=0;
      lighters2PosX[i] = random8(WIDTH);
      lighters2PosY[i] = random8(HEIGHT);
      lighters2SpeedX[i] = 0;
      lighters2SpeedY[i] = 0;
      lighters2Turn[i] = 0;
      lighters2Color[i] = random8();
      lighters2Brightness[i] = 255U;

    }
  }
  FastLED.clear();
  float maxspeed;
  uint8_t tmp;
  float speedfactor = (float)modes[currentMode].Speed / 2048.0f + 0.001f;
  if (++step >= modes[currentMode].Scale)
    step = 0U;
  for (uint8_t i = 0U; i < modes[currentMode].Scale; i++)
  {

    lighters2PosX[i] += lighters2SpeedX[i]*speedfactor;
    lighters2PosY[i] += lighters2SpeedY[i]*speedfactor;

    if (lighters2PosX[i] < 0)
      lighters2PosX[i] = (float)(WIDTH - 1) + lighters2PosX[i];
    if (lighters2PosX[i] > WIDTH - 1)
      lighters2PosX[i] = lighters2PosX[i] + 1 - WIDTH;

    if (lighters2PosY[i] < 0)
    {
      lighters2PosY[i] = -lighters2PosY[i];
      lighters2SpeedY[i] = -lighters2SpeedY[i];
      //lighters2SpeedX[i] = -lighters2SpeedX[i];
    }
    if (lighters2PosY[i] > HEIGHT - 1U)
    {
      lighters2PosY[i] = (HEIGHT << 1U) - 2U - lighters2PosY[i];
      lighters2SpeedY[i] = -lighters2SpeedY[i];
      //lighters2SpeedX[i] = -lighters2SpeedX[i];
    }

    //проворот траектории
    maxspeed = fabs(lighters2SpeedX[i])+fabs(lighters2SpeedY[i]); // максимальная суммарная скорость
    if (maxspeed == fabs(lighters2SpeedX[i] + lighters2SpeedY[i]))
      {
          if (lighters2SpeedX[i] > 0) // правый верхний сектор вектора
          {
            lighters2SpeedX[i] += lighters2Turn[i];
            if (lighters2SpeedX[i] > maxspeed) // если вектор переехал вниз
              {
                lighters2SpeedX[i] = maxspeed + maxspeed - lighters2SpeedX[i];
                lighters2SpeedY[i] = lighters2SpeedX[i] - maxspeed;
              }
            else
              lighters2SpeedY[i] = maxspeed - fabs(lighters2SpeedX[i]);
          }
          else                           // левый нижний сектор
          {
            lighters2SpeedX[i] -= lighters2Turn[i];
            if (lighters2SpeedX[i] + maxspeed < 0) // если вектор переехал вверх
              {
                lighters2SpeedX[i] = 0 - lighters2SpeedX[i] - maxspeed - maxspeed;
                lighters2SpeedY[i] = maxspeed - fabs(lighters2SpeedX[i]);
              }
            else
              lighters2SpeedY[i] = fabs(lighters2SpeedX[i]) - maxspeed;
          }
      }
    else //левый верхний и правый нижний секторы вектора
      {
          if (lighters2SpeedX[i] > 0) // правый нижний сектор
          {
            lighters2SpeedX[i] -= lighters2Turn[i];
            if (lighters2SpeedX[i] > maxspeed) // если вектор переехал наверх
              {
                lighters2SpeedX[i] = maxspeed + maxspeed - lighters2SpeedX[i];
                lighters2SpeedY[i] = maxspeed - lighters2SpeedX[i];
              }
            else
              lighters2SpeedY[i] = fabs(lighters2SpeedX[i]) - maxspeed;
          }
          else                           // левый верхний сектор
          {
            lighters2SpeedX[i] += lighters2Turn[i];
            if (lighters2SpeedX[i] + maxspeed < 0) // если вектор переехал вниз
              {
                lighters2SpeedX[i] = 0 - lighters2SpeedX[i] - maxspeed - maxspeed;
                lighters2SpeedY[i] = 0 - lighters2SpeedX[i] - maxspeed;
              }
            else
              lighters2SpeedY[i] = maxspeed - fabs(lighters2SpeedX[i]);
          }
      }
    
    if (lighters2Brightness[i] == 255U)
    {
      if (step == i && random8(2U) == 0U)//(step == 0U && ((pcnt + i) & 0x01))
      {
        lighters2Brightness[i] = random8(200U,240U);
        lighters2SpeedX[i] = (float)random8(101U) / 20.0f + 1.0f;
        if (random8(2U) == 0U) lighters2SpeedX[i] = -lighters2SpeedX[i];
        lighters2SpeedY[i] = (float)random8(101U) / 20.0f + 1.0f;
        if (random8(2U) == 0U) lighters2SpeedY[i] = -lighters2SpeedY[i];
        // проворот траектории
        //lighters2Turn[i] = (float)random8((fabs(lighters2SpeedX[i])+fabs(lighters2SpeedY[i]))*2.0+2.0) / 40.0f;
        lighters2Turn[i] = (float)random8((fabs(lighters2SpeedX[i])+fabs(lighters2SpeedY[i]))*20.0f+2.0f) / 200.0f;
        if (random8(2U) == 0U) lighters2Turn[i] = -lighters2Turn[i];
      }
    }
    else 
    {
      if (step == i)
        lighters2Brightness[i]++;
      tmp = 255U - lighters2Brightness[i];
      if (tmp == 0U || ((uint16_t)(lighters2PosX[i] * tmp) % tmp == 0U && (uint16_t)(lighters2PosY[i] * tmp) % tmp == 0U))
      {
        lighters2PosX[i] = round(lighters2PosX[i]);
        lighters2PosY[i] = round(lighters2PosY[i]);
        lighters2SpeedX[i] = 0;
        lighters2SpeedY[i] = 0;
        lighters2Turn[i] = 0;
        lighters2Brightness[i] = 255U;
      }
    }
    
    drawPixelXYF(lighters2PosX[i], lighters2PosY[i], CHSV(lighters2Color[i], 255U, lighters2Brightness[i])); // это процедура рисования с нецелочисленными координатами. ищите её в прошивке
    
  }
  for (uint8_t i = 0U; i < modes[currentMode].Scale; i++) // ещё раз рисуем всех Мотыльков, которые "сидят на стекле"
    if (lighters2Brightness[i] == 255U)
      drawPixelXY(lighters2PosX[i], lighters2PosY[i], CHSV(lighters2Color[i], 255U, lighters2Brightness[i]));
}
 
Изменено:

fayras

✩✩✩✩✩✩✩
26 Авг 2020
1
0
Всем привет! Только что собрал лампу на последней прошивке гайвера. Ктонибудь может подсказать как модифицировать прошивку под яблоко чтобы не приходилось адрес какждый раз забивать?
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
С модификацией от @kostyamat

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

У меня в коде добавлено.
И защита от беспосадочного режима тоже сделана,
но она будет конфликтовать с вашей реализацией "крылышек".
 
Изменено:

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632
И защита от беспосадочного режима тоже сделана,
но она будет конфликтовать с вашей реализацией "крылышек".
В смысле "защита от беспосадочного режима"?
Что именно конфликтует с "крылышками", защита или прорисовка? Не совсем понятно.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
Ещё вот так можно
Эффект Лампа с мотыльками

Типа как будто включен эффект Цвет,
но под плафоном насекомые.

Не так сильно мерцает, по сравнению с обычными Мотыльками.

На чётных скоростях взмахи крыльев отключаются:

C-like:
// ------------- Светлячки 2 - Светлячки в банке - Мотыльки - Лампа с мотыльками --------------
// (c) SottNick

#define BUTTERFLY_MAX_COUNT           (70U) // максимальное количество мотыльков
#define BUTTERFLY_FIX_COUNT           (20U) // количество мотыльков для режима, конда бегунок Масштаб регулирует цвет
float butterflysPosX[BUTTERFLY_MAX_COUNT];
float butterflysPosY[BUTTERFLY_MAX_COUNT];
float butterflysSpeedX[BUTTERFLY_MAX_COUNT];
float butterflysSpeedY[BUTTERFLY_MAX_COUNT];
float butterflysTurn[BUTTERFLY_MAX_COUNT];
uint8_t butterflysColor[BUTTERFLY_MAX_COUNT];
uint8_t butterflysBrightness[BUTTERFLY_MAX_COUNT];

void butterflysRoutine(bool isColored)
{
  bool isWings = modes[currentMode].Speed & 0x01;
  if (loadingFlag)
  {
    loadingFlag = false;
    randomSeed(millis());
    if (isColored) // для режима смены цвета фона фиксируем количество мотыльков
      deltaValue = (modes[currentMode].Scale > BUTTERFLY_MAX_COUNT) ? BUTTERFLY_MAX_COUNT : modes[currentMode].Scale;
    else
      deltaValue = BUTTERFLY_FIX_COUNT;
    for (uint8_t i = 0U; i < BUTTERFLY_MAX_COUNT; i++)
    {
      butterflysPosX[i] = random8(WIDTH);
      butterflysPosY[i] = random8(HEIGHT);
      butterflysSpeedX[i] = 0;
      butterflysSpeedY[i] = 0;
      butterflysTurn[i] = 0;
      butterflysColor[i] = (isColored) ? random8() : 255U;
      butterflysBrightness[i] = 255U;
    }
    //для инверсии, чтобы сто раз не пересчитывать
    if (modes[currentMode].Scale != 1U)
      hue = (float)(modes[currentMode].Scale - 1U) * 2.6;
    hue2 = (modes[currentMode].Scale == 100U) ? 0U : 255U;  // вычисление базового оттенка
  }
  if (isWings && isColored)
    dimAll(35U); // для крылышков
  else
    FastLED.clear();

  float maxspeed;
  uint8_t tmp;
  float speedfactor = (float)modes[currentMode].Speed / 2048.0f + 0.001f;
  if (++step >= deltaValue)
    step = 0U;
  for (uint8_t i = 0U; i < deltaValue; i++)
  {
    butterflysPosX[i] += butterflysSpeedX[i]*speedfactor;
    butterflysPosY[i] += butterflysSpeedY[i]*speedfactor;

    if (butterflysPosX[i] < 0)
      butterflysPosX[i] = (float)(WIDTH - 1) + butterflysPosX[i];
    if (butterflysPosX[i] > WIDTH - 1)
      butterflysPosX[i] = butterflysPosX[i] + 1 - WIDTH;

    if (butterflysPosY[i] < 0)
    {
      butterflysPosY[i] = -butterflysPosY[i];
      butterflysSpeedY[i] = -butterflysSpeedY[i];
      //butterflysSpeedX[i] = -butterflysSpeedX[i];
    }
    if (butterflysPosY[i] > HEIGHT - 1U)
    {
      butterflysPosY[i] = (HEIGHT << 1U) - 2U - butterflysPosY[i];
      butterflysSpeedY[i] = -butterflysSpeedY[i];
      //butterflysSpeedX[i] = -butterflysSpeedX[i];
    }

    //проворот траектории
    maxspeed = fabs(butterflysSpeedX[i])+fabs(butterflysSpeedY[i]); // максимальная суммарная скорость
    if (maxspeed == fabs(butterflysSpeedX[i] + butterflysSpeedY[i]))
      {
          if (butterflysSpeedX[i] > 0) // правый верхний сектор вектора
          {
            butterflysSpeedX[i] += butterflysTurn[i];
            if (butterflysSpeedX[i] > maxspeed) // если вектор переехал вниз
              {
                butterflysSpeedX[i] = maxspeed + maxspeed - butterflysSpeedX[i];
                butterflysSpeedY[i] = butterflysSpeedX[i] - maxspeed;
              }
            else
              butterflysSpeedY[i] = maxspeed - fabs(butterflysSpeedX[i]);
          }
          else                           // левый нижний сектор
          {
            butterflysSpeedX[i] -= butterflysTurn[i];
            if (butterflysSpeedX[i] + maxspeed < 0) // если вектор переехал вверх
              {
                butterflysSpeedX[i] = 0 - butterflysSpeedX[i] - maxspeed - maxspeed;
                butterflysSpeedY[i] = maxspeed - fabs(butterflysSpeedX[i]);
              }
            else
              butterflysSpeedY[i] = fabs(butterflysSpeedX[i]) - maxspeed;
          }
      }
    else //левый верхний и правый нижний секторы вектора
      {
          if (butterflysSpeedX[i] > 0) // правый нижний сектор
          {
            butterflysSpeedX[i] -= butterflysTurn[i];
            if (butterflysSpeedX[i] > maxspeed) // если вектор переехал наверх
              {
                butterflysSpeedX[i] = maxspeed + maxspeed - butterflysSpeedX[i];
                butterflysSpeedY[i] = maxspeed - butterflysSpeedX[i];
              }
            else
              butterflysSpeedY[i] = fabs(butterflysSpeedX[i]) - maxspeed;
          }
          else                           // левый верхний сектор
          {
            butterflysSpeedX[i] += butterflysTurn[i];
            if (butterflysSpeedX[i] + maxspeed < 0) // если вектор переехал вниз
              {
                butterflysSpeedX[i] = 0 - butterflysSpeedX[i] - maxspeed - maxspeed;
                butterflysSpeedY[i] = 0 - butterflysSpeedX[i] - maxspeed;
              }
            else
              butterflysSpeedY[i] = maxspeed - fabs(butterflysSpeedX[i]);
          }
      }
 
    if (butterflysBrightness[i] == 255U)
    {
      if (step == i && random8(2U) == 0U)//(step == 0U && ((pcnt + i) & 0x01))
      {
        butterflysBrightness[i] = random8(220U,244U);
        butterflysSpeedX[i] = (float)random8(101U) / 20.0f + 1.0f;
        if (random8(2U) == 0U) butterflysSpeedX[i] = -butterflysSpeedX[i];
        butterflysSpeedY[i] = (float)random8(101U) / 20.0f + 1.0f;
        if (random8(2U) == 0U) butterflysSpeedY[i] = -butterflysSpeedY[i];
        // проворот траектории
        //butterflysTurn[i] = (float)random8((fabs(butterflysSpeedX[i])+fabs(butterflysSpeedY[i]))*2.0+2.0) / 40.0f;
        butterflysTurn[i] = (float)random8((fabs(butterflysSpeedX[i])+fabs(butterflysSpeedY[i]))*20.0f+2.0f) / 200.0f;
        if (random8(2U) == 0U) butterflysTurn[i] = -butterflysTurn[i];
      }
    }
    else
    {
      if (step == i)
        butterflysBrightness[i]++;
      tmp = 255U - butterflysBrightness[i];
      if (tmp == 0U || ((uint16_t)(butterflysPosX[i] * tmp) % tmp == 0U && (uint16_t)(butterflysPosY[i] * tmp) % tmp == 0U))
      {
        butterflysPosX[i] = round(butterflysPosX[i]);
        butterflysPosY[i] = round(butterflysPosY[i]);
        butterflysSpeedX[i] = 0;
        butterflysSpeedY[i] = 0;
        butterflysTurn[i] = 0;
        butterflysBrightness[i] = 255U;
      }
    }

    if (isWings)
      drawPixelXYF(butterflysPosX[i], butterflysPosY[i], CHSV(butterflysColor[i], 255U, (butterflysBrightness[i] == 255U) ? 255U : 128U + random8(2U) * 111U)); // это процедура рисования с нецелочисленными координатами. ищите её в прошивке
    else
      drawPixelXYF(butterflysPosX[i], butterflysPosY[i], CHSV(butterflysColor[i], 255U, butterflysBrightness[i])); // это процедура рисования с нецелочисленными координатами. ищите её в прошивке
  }

  // постобработка кадра
  if (isColored){
    for (uint8_t i = 0U; i < deltaValue; i++) // ещё раз рисуем всех Мотыльков, которые "сидят на стекле"
      if (butterflysBrightness[i] == 255U)
        drawPixelXY(butterflysPosX[i], butterflysPosY[i], CHSV(butterflysColor[i], 255U, butterflysBrightness[i]));
  }
  else {
    //теперь инверсия всей матрицы
    if (modes[currentMode].Scale == 1U)
      if (++deltaHue == 0U) hue++;
    for (uint16_t i = 0U; i < NUM_LEDS; i++)
      leds[i] = CHSV(hue, hue2, 255U - leds[i].r);
  }
}
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
В смысле "защита от беспосадочного режима"?
В beta-версии рано или поздно все Мотыльки начинали летать без остановок.

Что именно конфликтует с "крылышками", защита или прорисовка? Не совсем понятно.
Защита. У меня сейчас в яркости мотылька отсчитывается вероятность посадки.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kostyamat, последний?
В прошивке когда-нибудь.

Просто все мотыльки рисуются красным цветом,
а в конце вся матрица инвертируется в выбранный цвет.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kostyamat, я всё в одно впихнул.
Теперь всё сложно и используется несколько переменных от других эффектов.
 

kostyamat

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

@Сотнег, спасибо, обновлю.
Есть идея через bland() фоном свечку (один язык пламени из огненной лампы) фоном запустить на ночных мотыльках. Вообще отпад будет. Может попробуете? Я наверное не потяну, ума не хватит.
 
  • Лойс +1
Реакции: Belokota

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kostyamat, "ночным мотылькам" нужен засвет.
Они же тёмные. Если под ними пусто, их не увидеть.

Или речь про разноцветных?
Тогда я не представляю себе, как "свечку" нарисовать приличного вида.
 

kostyamat

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

@Сотнег,
Не, я имею ввиду "ночных мотыльков" не на чисто желтый накладывать, а под ними один язык пламени нарисовать и заблюрить хорошенько, чтобы было похоже на горящую внутри свечу.
Правда, наверное, придется еще один, или даже два, массива leds создавать для промежуточных кадров. У меня есть пример такого кода. Показать?
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kostyamat, не надо.
свечу нужно под каждым мотыльком рисовать, иначе тёмного мотылька на тёмном фоне видно не будет.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632
@Сотнег, почему же под каждым? Огонь не прогашивать полностью, а эдак процентов на 20 каждый кадр, как раз цветной пульсирующий фон под мотыльки и получите. Хотя автор-барин. Может сам когда сделаю, хотя дел под релиз и без того хватает. Может потом. Еще раз Большое Спасибо.
Эх, еще бы @obliterator со своей "Восковой лампой" из прогулов вышел. Нет терпежа глянуть - что у него получилось в результате?
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632
hue2 = (modes[currentMode].Scale == 100U) ? 0U : 255U; // вычисление базового оттенка
Чёт не соображу, что задумано этой строкой (у меня ползунок 1-64, проверить нет возможности не меняя сильно код)? hue то я перемапил на 64, а это не совсем понятно.

*** Что-то я совершенно не выспался сегодня, туплю безбожно, сча поправлю на 32 да и сам гляну что это.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kostyamat, это насыщенность.
На максимальном (=100) масштабе цвет заливки лампы будет белый.
Надо, кстати, переделать на более тёплый оттенок.
 
  • Лойс +1
Реакции: kostyamat

kostyamat

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

@Сотнег,
Я конечно не указ, но ИМХО, fadeToBlackBy (leds, NUM_LEDS, 255U - val) == dimAll(val), встроен в FastLED, работает быстрее, и результат выглядит лучше. По моему dimAll() атавизм из эффектов, разработанных для старых версий эффектов, когда в FastLED этой функции еще не было. Я у себя потихоньку меняю.
 
  • Лойс +1
Реакции: Сотнег