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

Slesar-genekolog

✩✩✩✩✩✩✩
6 Фев 2020
8
0
Например, на ru.pool.ntp.org.
В прошивке.
Надеюсь, вы время не меняли?
#define NTP_ADDRESS ("ru.pool.ntp.org") // сервер времени
#define NTP_INTERVAL (30UL * 60UL * 1000UL) // интервал синхронизации времени (30 минут)
не менял, только часовой пояс в соответствующей строке
 

how_eee

✩✩✩✩✩✩✩
18 Янв 2020
7
0
@Сотнег, разницу по строкам не сравнивал. В вашем архиве очевидно что крайняя от гайвера, а у него старая да еще и переписанная. ну возможно я чтото путаю, но работает же.
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,161
1,453
@how_eee, по вашей ссылке и в архиве с прошивкой - одни и те же файлы.
Ну, работает, и хорошо.
Возможно, библиотеки у вас раньше были от другой прошивки.
 

Сотнег

★★★★★★★
15 Янв 2020
4,161
1,453
У кого не хватает кальки на лампе, можно заодно проверить лайфхак...

IMG_20200430_192137.jpg IMG_20200430_192237.jpg IMG_20200430_192048.jpg

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

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

Но есть надежда, что бутылёк подойдёт для наших целей. Отпишитесь, кто испытает!

ПС: клей стирается растительным маслом.
 

Сотнег

★★★★★★★
15 Янв 2020
4,161
1,453
Пара десятков сомнительных эффектов.
У кого есть мысли, которые стоит переносить к нам на лампу?
(номера эффектов автор проговаривает голосом)
Ссылка на исходники.
Наконец-то портировал первый эффект из видео (№11). Пока что лишь бы посмотреть без оптимизации.
C-like:
// ------------------------------ ЭФФЕКТ БОЛЬШОЙ ВЗРЫВ ----------------------
// https://github.com/marcmerlin/NeoMatrix-FastLED-IR/blob/master/Table_Mark_Estes_Impl.h
// https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/master/LEDMatrix/Table_Mark_Estes/Table_Mark_Estes.ino
int16_t pointy, blender = 128;//, laps, hue, steper,  xblender, hhowmany, radius3, xpoffset[MATRIX_WIDTH * 3];
unsigned int  counter, ringdelay;//, bringdelay, sumthum;
int16_t shifty = 6;//, pattern = 0, poffset;
int16_t radius2, fpeed[WIDTH * 3], fcount[WIDTH * 3], fcountr[WIDTH * 3];//, xxx, yyy, dot = 3, rr, gg, bb, adjunct = 3;
uint8_t fcolor[WIDTH * 3];
uint16_t h = 0, howmany;// ccoolloorr, why1, why2, why3, eeks1, eeks2, eeks3, oldpattern, xhowmany, kk;
float driftx, drifty;//, locusx, locusy, xcen, ycen, yangle, xangle;
float xfire[WIDTH * 3], yfire[WIDTH * 3], cangle, sangle;//radius, xslope[MATRIX_WIDTH * 3], yslope[MATRIX_WIDTH * 3];

//Дополнитеьная функция построения линий
void DrawLine(int x1, int y1, int x2, int y2, CHSV color)
{
  int tmp;
  int x,y;
  int dx, dy;
  int err;
  int ystep;

  uint8_t swapxy = 0;

  if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1;
  if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1;

  if ( dy > dx )
  {
    swapxy = 1;
    tmp = dx; dx =dy; dy = tmp;
    tmp = x1; x1 =y1; y1 = tmp;
    tmp = x2; x2 =y2; y2 = tmp;
  }
  if ( x1 > x2 )
  {
    tmp = x1; x1 =x2; x2 = tmp;
    tmp = y1; y1 =y2; y2 = tmp;
  }
  err = dx >> 1;
  if ( y2 > y1 ) ystep = 1; else ystep = -1;
  y = y1;

  for( x = x1; x <= x2; x++ )
  {
    if ( swapxy == 0 ) drawPixelXY(x, y, color);
    else drawPixelXY(y, x, color);
    err -= (uint8_t)dy;
    if ( err < 0 )
    {
      y += ystep;
      err += dx;
    }
  }
}

void drawstar(int16_t xlocl, int16_t ylocl, int16_t biggy, int16_t little, int16_t points, int16_t dangle, int16_t koler)// random multipoint star
{
  if (counter == 0) {
    shifty = 3;//move quick
  }
  radius2 = 255 / points;
  for (int i = 0; i < points; i++)
  {
    DrawLine(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
    DrawLine(xlocl + ((little * (sin8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
  }
}

void starer() {
  if (counter >= ringdelay)
  {
    if (counter - ringdelay <= WIDTH + 5)
      drawstar(driftx  , drifty, 2 * (counter - ringdelay), (counter - ringdelay), pointy, blender + h, h * 2 + 85);
    else {
      ringdelay = counter + random(50, 99);
      pointy = random(3, 9);
    }
  }
}


void whitewarp() {
  dimAll(255U - modes[currentMode].Scale * 2);

  hue++;//increment the color basis
  h = hue;  //set h to the color basis
  counter++;
  if (counter % shifty == 0) driftx =  driftx + cangle;//move the x center every so often
  if (driftx > (WIDTH - spirocenterX / 2))//change directin of drift if you get near the right 1/4 of the screen
    cangle = 0 - fabs(cangle);
  if (driftx < spirocenterX / 2)//change directin of drift if you get near the right 1/4 of the screen
    cangle = fabs(cangle);
  if ((counter + shifty / 2) % shifty == 0) drifty =  drifty + sangle;//move the y center every so often
  if (drifty > ( HEIGHT - spirocenterY / 2))// if y gets too big, reverse
    sangle = 0 - fabs(sangle);
  if (drifty < spirocenterY / 2) {// if y gets too small reverse
    sangle = fabs(sangle);
  }

  driftx = constrain(driftx, spirocenterX - spirocenterX / 3, spirocenterX + spirocenterX / 3);//constrain the center, probably never gets evoked any more but was useful at one time to keep the graphics on the screen....
  drifty = constrain(drifty, spirocenterY - spirocenterY / 3, spirocenterY - spirocenterY / 3);


  if (loadingFlag)
  {
    loadingFlag = false;

    pointy = 7;

    hue = random8();//get a starting point for the color progressions
    driftx = random8(4, WIDTH - 4);//set an initial location for the animation center
    drifty = random8(4, HEIGHT - 4);// set an initial location for the animation center

    cangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation gives a float value between -1 and 1
    sangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation in the y direction gives a float value between -1 and 1
    shifty = random (3, 12);//how often the drifter moves

    howmany = random (spirocenterX * 3 / 2, WIDTH + 4 );
//для нечётных скоростей убираем летящие точки, чтобы они не мешали смотреть на звёзды
if (modes[currentMode].Speed & 0x01) howmany = 1U;

    for (int i = 0; i < howmany; i++) {
      fcount[i] = random8(); //angle
      fcolor[i] = random8();
      fpeed[i] = random(2, 12);
      xfire[i] = driftx;
      yfire[i] = drifty;

    }
  }

  for (int i = 0; i < howmany; i++)
  {
    xfire[i] = xfire[i] + fpeed[i] / 4.0 * (sin8(fcount[i] + h ) - 128.0) / 128.0;
    yfire[i] = yfire[i] + fpeed[i] / 4.0 * (cos8(fcount[i] + h ) - 128.0) / 128.0;

//    if (!flip2)
//      leds[xfire[i], yfire[i]] = CRGB::White;
//    else
//      leds[XY((uint8_t)round(xfire[i]), (uint8_t)round(yfire[i]))] = CHSV(fcolor[i] , 255, 255); //one shade of color
    if (round(xfire[i]) < WIDTH && round(xfire[i]) >= 0U && round(yfire[i]) < HEIGHT && round(yfire[i]) >= 0U)
      leds[XY((uint8_t)(round(xfire[i])), (uint8_t)(round(yfire[i])))] = CRGB::White;// = CHSV(fcolor[i] , 255, 255); //one shade of color
    else
    {
      xfire[i] = driftx;
      yfire[i] = drifty;
      fcount[i] = random8(); //angle
      fcolor[i] = random8();
      fpeed[i] = random8(2, 12);
    }
  }
//хз, зачем тут ещё раз последняя точка улетает другим цветом. закомментировал
//  leds[XY((uint8_t)(round(xfire[howmany - 1])), (uint8_t)(round(yfire[howmany - 1])))] = CRGB::White;//  = CHSV(fcolor[howmany - 1] , 255, 255);//many color

starer();
}
Выглядит довольно убого на нашем размере матрицы.
Летящие точки, которые пытаются закрутить свою траекторию на длине пути в 8 пикселей - это очень плохо...

Без закручивания не многим лучше:
C-like:
// ------------------------------ ЭФФЕКТ БОЛЬШОЙ ВЗРЫВ ----------------------
// https://github.com/marcmerlin/NeoMatrix-FastLED-IR/blob/master/Table_Mark_Estes_Impl.h
// https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/master/LEDMatrix/Table_Mark_Estes/Table_Mark_Estes.ino
int16_t pointy, blender = 128;//, laps, hue, steper,  xblender, hhowmany, radius3, xpoffset[MATRIX_WIDTH * 3];
unsigned int  counter, ringdelay;//, bringdelay, sumthum;
int16_t shifty = 6;//, pattern = 0, poffset;
int16_t radius2, fpeed[WIDTH * 3], fcount[WIDTH * 3], fcountr[WIDTH * 3];//, xxx, yyy, dot = 3, rr, gg, bb, adjunct = 3;
uint8_t fcolor[WIDTH * 3];
uint16_t h = 0, howmany;// ccoolloorr, why1, why2, why3, eeks1, eeks2, eeks3, oldpattern, xhowmany, kk;
float driftx, drifty;//, locusx, locusy, xcen, ycen, yangle, xangle;
float xfire[WIDTH * 3], yfire[WIDTH * 3], cangle, sangle;//radius, xslope[MATRIX_WIDTH * 3], yslope[MATRIX_WIDTH * 3];

int8_t starpointX[HEIGHT], starpointY[HEIGHT], starpointXway[HEIGHT], starpointYway[HEIGHT];

//Дополнитеьная функция построения линий
void DrawLine(int x1, int y1, int x2, int y2, CHSV color)
{
  int tmp;
  int x,y;
  int dx, dy;
  int err;
  int ystep;

  uint8_t swapxy = 0;
 
  if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1;
  if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1;

  if ( dy > dx )
  {
    swapxy = 1;
    tmp = dx; dx =dy; dy = tmp;
    tmp = x1; x1 =y1; y1 = tmp;
    tmp = x2; x2 =y2; y2 = tmp;
  }
  if ( x1 > x2 )
  {
    tmp = x1; x1 =x2; x2 = tmp;
    tmp = y1; y1 =y2; y2 = tmp;
  }
  err = dx >> 1;
  if ( y2 > y1 ) ystep = 1; else ystep = -1;
  y = y1;

  for( x = x1; x <= x2; x++ )
  {
    if ( swapxy == 0 ) drawPixelXY(x, y, color);
    else drawPixelXY(y, x, color);
    err -= (uint8_t)dy;
    if ( err < 0 )
    {
      y += ystep;
      err += dx;
    }
  }
}

void drawstar(int16_t xlocl, int16_t ylocl, int16_t biggy, int16_t little, int16_t points, int16_t dangle, int16_t koler)// random multipoint star
{
  if (counter == 0) {
    shifty = 3;//move quick
  }
  radius2 = 255 / points;
  for (int i = 0; i < points; i++)
  {
    DrawLine(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
    DrawLine(xlocl + ((little * (sin8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
  }
}

void starer() {
  if (counter >= ringdelay)
  {
    if (counter - ringdelay <= WIDTH + 5)
      drawstar(driftx  , drifty, 2 * (counter - ringdelay), (counter - ringdelay), pointy, blender + h, h * 2 + 85);
    else {
      ringdelay = counter + random(50, 99);
      pointy = random(3, 9);
    }
  }
}


void whitewarp() {
  dimAll(255U - modes[currentMode].Scale * 2);

  if (loadingFlag)
  {
    loadingFlag = false;
    //setCurrentPalette();

    pointy = 7;
   
    driftx = random8(4, WIDTH - 4);//set an initial location for the animation center
    drifty = random8(4, HEIGHT - 4);// set an initial location for the animation center
   
    cangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation gives a float value between -1 and 1
    sangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation in the y direction gives a float value between -1 and 1
    shifty = random (3, 12);//how often the drifter moves
   
    howmany = random (spirocenterX * 3 / 2, WIDTH + 4 );
//для нечётных скоростей оставляем ровно 8 летящих точек
if (modes[currentMode].Speed & 0x01) howmany = 8U;

    for (uint8_t i = 0; i < howmany; i++) {
      switch (i % 8)
      {
        case 0U:
         starpointXway[i] = -1;
         starpointYway[i] = -1;
         break;
        case 1U:
         starpointXway[i] = -1;
         starpointYway[i] = 0;
         break;
        case 2U:
         starpointXway[i] = -1;
         starpointYway[i] = 1;
         break;
        case 3U:
         starpointXway[i] = 0;
         starpointYway[i] = 1;
         break;
        case 4U:
         starpointXway[i] = 1;
         starpointYway[i] = 1;
         break;
        case 5U:
         starpointXway[i] = 1;
         starpointYway[i] = 0;
         break;
        case 6U:
         starpointXway[i] = 1;
         starpointYway[i] = -1;
         break;
        default:
         starpointXway[i] = 0;
         starpointYway[i] = -1;
      }
      starpointX[i] = round(driftx) + starpointXway[i] * i;
      starpointY[i] = round(drifty) + starpointYway[i] * i;
    }
  }

 
  hue++;//increment the color basis
  h = hue;  //set h to the color basis
  counter++;
  if (driftx > (WIDTH - spirocenterX / 2U))//change directin of drift if you get near the right 1/4 of the screen
    cangle = 0 - fabs(cangle);
  if (driftx < spirocenterX / 2U)//change directin of drift if you get near the right 1/4 of the screen
    cangle = fabs(cangle);
  if (counter % shifty == 0)
    driftx = driftx + cangle;//move the x center every so often

  if (drifty > ( HEIGHT - spirocenterY / 2U))// if y gets too big, reverse
    sangle = 0 - fabs(sangle);
  if (drifty < spirocenterY / 2U) // if y gets too small reverse
    sangle = fabs(sangle);
  if ((counter + shifty / 2U) % shifty == 0)
    drifty =  drifty + sangle;//move the y center every so often
 
  //по идее, не нужно равнять диапазоны плавающего центра. за них и так вылет невозможен
  //но они какого-то хуя вылезают за диапазоны и не возвращаются
  //driftx = constrain(driftx, spirocenterX - spirocenterX / 3, spirocenterX + spirocenterX / 3);//constrain the center, probably never gets evoked any more but was useful at one time to keep the graphics on the screen....
  //drifty = constrain(drifty, spirocenterY - spirocenterY / 3, spirocenterY + spirocenterY / 3);

 
  for (int i = 0; i < howmany; i++)
  {
    starpointX[i] += starpointXway[i];
    starpointY[i] += starpointYway[i];
    if (starpointX[i] < 0U || starpointY[i] < 0U || starpointX[i] >= WIDTH || starpointY[i] >= HEIGHT)
    {
      starpointX[i] = round(driftx);
      starpointY[i] = round(drifty);
    }
//    else
    leds[XY(starpointX[i], starpointY[i])] = CRGB::White;
  }

starer();
}
 
Изменено:
  • Лойс +1
Реакции: Belokota

menooooo

★✩✩✩✩✩✩
4 Мар 2019
71
10
Наконец-то портировал первый эффект из видео (№11). Пока что лишь бы посмотреть без оптимизации.
C-like:
// ------------------------------ ЭФФЕКТ БОЛЬШОЙ ВЗРЫВ ----------------------
// https://github.com/marcmerlin/NeoMatrix-FastLED-IR/blob/master/Table_Mark_Estes_Impl.h
// https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/master/LEDMatrix/Table_Mark_Estes/Table_Mark_Estes.ino
int16_t pointy, blender = 128;//, laps, hue, steper,  xblender, hhowmany, radius3, xpoffset[MATRIX_WIDTH * 3];
unsigned int  counter, ringdelay;//, bringdelay, sumthum;
int16_t shifty = 6;//, pattern = 0, poffset;
int16_t radius2, fpeed[WIDTH * 3], fcount[WIDTH * 3], fcountr[WIDTH * 3];//, xxx, yyy, dot = 3, rr, gg, bb, adjunct = 3;
uint8_t fcolor[WIDTH * 3];
uint16_t h = 0, howmany;// ccoolloorr, why1, why2, why3, eeks1, eeks2, eeks3, oldpattern, xhowmany, kk;
float driftx, drifty;//, locusx, locusy, xcen, ycen, yangle, xangle;
float xfire[WIDTH * 3], yfire[WIDTH * 3], cangle, sangle;//radius, xslope[MATRIX_WIDTH * 3], yslope[MATRIX_WIDTH * 3];

//Дополнитеьная функция построения линий
void DrawLine(int x1, int y1, int x2, int y2, CHSV color)
{
  int tmp;
  int x,y;
  int dx, dy;
  int err;
  int ystep;

  uint8_t swapxy = 0;

  if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1;
  if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1;

  if ( dy > dx )
  {
    swapxy = 1;
    tmp = dx; dx =dy; dy = tmp;
    tmp = x1; x1 =y1; y1 = tmp;
    tmp = x2; x2 =y2; y2 = tmp;
  }
  if ( x1 > x2 )
  {
    tmp = x1; x1 =x2; x2 = tmp;
    tmp = y1; y1 =y2; y2 = tmp;
  }
  err = dx >> 1;
  if ( y2 > y1 ) ystep = 1; else ystep = -1;
  y = y1;

  for( x = x1; x <= x2; x++ )
  {
    if ( swapxy == 0 ) drawPixelXY(x, y, color);
    else drawPixelXY(y, x, color);
    err -= (uint8_t)dy;
    if ( err < 0 )
    {
      y += ystep;
      err += dx;
    }
  }
}

void drawstar(int16_t xlocl, int16_t ylocl, int16_t biggy, int16_t little, int16_t points, int16_t dangle, int16_t koler)// random multipoint star
{
  if (counter == 0) {
    shifty = 3;//move quick
  }
  radius2 = 255 / points;
  for (int i = 0; i < points; i++)
  {
    DrawLine(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
    DrawLine(xlocl + ((little * (sin8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
  }
}

void starer() {
  if (counter >= ringdelay)
  {
    if (counter - ringdelay <= WIDTH + 5)
      drawstar(driftx  , drifty, 2 * (counter - ringdelay), (counter - ringdelay), pointy, blender + h, h * 2 + 85);
    else {
      ringdelay = counter + random(50, 99);
      pointy = random(3, 9);
    }
  }
}


void whitewarp() {
  dimAll(255U - modes[currentMode].Scale * 2);

  hue++;//increment the color basis
  h = hue;  //set h to the color basis
  counter++;
  if (counter % shifty == 0) driftx =  driftx + cangle;//move the x center every so often
  if (driftx > (WIDTH - spirocenterX / 2))//change directin of drift if you get near the right 1/4 of the screen
    cangle = 0 - abs(cangle);
  if (driftx < spirocenterX / 2)//change directin of drift if you get near the right 1/4 of the screen
    cangle = abs(cangle);
  if ((counter + shifty / 2) % shifty == 0) drifty =  drifty + sangle;//move the y center every so often
  if (drifty > ( HEIGHT - spirocenterY / 2))// if y gets too big, reverse
    sangle = 0 - abs(sangle);
  if (drifty < spirocenterY / 2) {// if y gets too small reverse
    sangle = abs(sangle);
  }

  driftx = constrain(driftx, spirocenterX - spirocenterX / 3, spirocenterX + spirocenterX / 3);//constrain the center, probably never gets evoked any more but was useful at one time to keep the graphics on the screen....
  drifty = constrain(drifty, spirocenterY - spirocenterY / 3, spirocenterY - spirocenterY / 3);


  if (loadingFlag)
  {
    loadingFlag = false;
    setCurrentPalette();

    pointy = 7;

    hue = random8();//get a starting point for the color progressions
    driftx = random8(4, WIDTH - 4);//set an initial location for the animation center
    drifty = random8(4, HEIGHT - 4);// set an initial location for the animation center

    cangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation gives a float value between -1 and 1
    sangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation in the y direction gives a float value between -1 and 1
    shifty = random (3, 12);//how often the drifter moves

    howmany = random (spirocenterX * 3 / 2, WIDTH + 4 );
//для нечётных скоростей убираем летящие точки, чтобы они не мешали смотреть на звёзды
if (modes[currentMode].Speed & 0x01) howmany = 1U;

    for (int i = 0; i < howmany; i++) {
      fcount[i] = random8(); //angle
      fcolor[i] = random8();
      fpeed[i] = random(2, 12);
      xfire[i] = driftx;
      yfire[i] = drifty;

    }
  }

  for (int i = 0; i < howmany; i++)
  {
    xfire[i] = xfire[i] + fpeed[i] / 4.0 * (sin8(fcount[i] + h ) - 128.0) / 128.0;
    yfire[i] = yfire[i] + fpeed[i] / 4.0 * (cos8(fcount[i] + h ) - 128.0) / 128.0;

//    if (!flip2)
//      leds[xfire[i], yfire[i]] = CRGB::White;
//    else
//      leds[XY((uint8_t)round(xfire[i]), (uint8_t)round(yfire[i]))] = CHSV(fcolor[i] , 255, 255); //one shade of color
    if (round(xfire[i]) < WIDTH && round(xfire[i]) >= 0U && round(yfire[i]) < HEIGHT && round(yfire[i]) >= 0U)
      leds[XY((uint8_t)(round(xfire[i])), (uint8_t)(round(yfire[i])))] = CRGB::White;// = CHSV(fcolor[i] , 255, 255); //one shade of color
    else
    {
      xfire[i] = driftx;
      yfire[i] = drifty;
      fcount[i] = random8(); //angle
      fcolor[i] = random8();
      fpeed[i] = random8(2, 12);
    }
  }
//хз, зачем тут ещё раз последняя точка улетает другим цветом. закомментировал
//  leds[XY((uint8_t)(round(xfire[howmany - 1])), (uint8_t)(round(yfire[howmany - 1])))] = CRGB::White;//  = CHSV(fcolor[howmany - 1] , 255, 255);//many color

starer();
}
Выглядит довольно убого на нашем размере матрицы.
Летящие точки, которые пытаются закрутить свою траекторию на длине пути в 8 пикселей - это очень плохо...

Без закручивания не многим лучше:
C-like:
// ------------------------------ ЭФФЕКТ БОЛЬШОЙ ВЗРЫВ ----------------------
// https://github.com/marcmerlin/NeoMatrix-FastLED-IR/blob/master/Table_Mark_Estes_Impl.h
// https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/master/LEDMatrix/Table_Mark_Estes/Table_Mark_Estes.ino
int16_t pointy, blender = 128;//, laps, hue, steper,  xblender, hhowmany, radius3, xpoffset[MATRIX_WIDTH * 3];
unsigned int  counter, ringdelay;//, bringdelay, sumthum;
int16_t shifty = 6;//, pattern = 0, poffset;
int16_t radius2, fpeed[WIDTH * 3], fcount[WIDTH * 3], fcountr[WIDTH * 3];//, xxx, yyy, dot = 3, rr, gg, bb, adjunct = 3;
uint8_t fcolor[WIDTH * 3];
uint16_t h = 0, howmany;// ccoolloorr, why1, why2, why3, eeks1, eeks2, eeks3, oldpattern, xhowmany, kk;
float driftx, drifty;//, locusx, locusy, xcen, ycen, yangle, xangle;
float xfire[WIDTH * 3], yfire[WIDTH * 3], cangle, sangle;//radius, xslope[MATRIX_WIDTH * 3], yslope[MATRIX_WIDTH * 3];

int8_t starpointX[HEIGHT], starpointY[HEIGHT], starpointXway[HEIGHT], starpointYway[HEIGHT];

//Дополнитеьная функция построения линий
void DrawLine(int x1, int y1, int x2, int y2, CHSV color)
{
  int tmp;
  int x,y;
  int dx, dy;
  int err;
  int ystep;

  uint8_t swapxy = 0;

  if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1;
  if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1;

  if ( dy > dx )
  {
    swapxy = 1;
    tmp = dx; dx =dy; dy = tmp;
    tmp = x1; x1 =y1; y1 = tmp;
    tmp = x2; x2 =y2; y2 = tmp;
  }
  if ( x1 > x2 )
  {
    tmp = x1; x1 =x2; x2 = tmp;
    tmp = y1; y1 =y2; y2 = tmp;
  }
  err = dx >> 1;
  if ( y2 > y1 ) ystep = 1; else ystep = -1;
  y = y1;

  for( x = x1; x <= x2; x++ )
  {
    if ( swapxy == 0 ) drawPixelXY(x, y, color);
    else drawPixelXY(y, x, color);
    err -= (uint8_t)dy;
    if ( err < 0 )
    {
      y += ystep;
      err += dx;
    }
  }
}

void drawstar(int16_t xlocl, int16_t ylocl, int16_t biggy, int16_t little, int16_t points, int16_t dangle, int16_t koler)// random multipoint star
{
  if (counter == 0) {
    shifty = 3;//move quick
  }
  radius2 = 255 / points;
  for (int i = 0; i < points; i++)
  {
    DrawLine(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
    DrawLine(xlocl + ((little * (sin8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
  }
}

void starer() {
  if (counter >= ringdelay)
  {
    if (counter - ringdelay <= WIDTH + 5)
      drawstar(driftx  , drifty, 2 * (counter - ringdelay), (counter - ringdelay), pointy, blender + h, h * 2 + 85);
    else {
      ringdelay = counter + random(50, 99);
      pointy = random(3, 9);
    }
  }
}


void whitewarp() {
  dimAll(255U - modes[currentMode].Scale * 2);

  hue++;//increment the color basis
  h = hue;  //set h to the color basis
  counter++;
  if (counter % shifty == 0) driftx =  driftx + cangle;//move the x center every so often
  if (driftx > (WIDTH - spirocenterX / 2))//change directin of drift if you get near the right 1/4 of the screen
    cangle = 0 - abs(cangle);
  if (driftx < spirocenterX / 2)//change directin of drift if you get near the right 1/4 of the screen
    cangle = abs(cangle);
  if ((counter + shifty / 2) % shifty == 0) drifty =  drifty + sangle;//move the y center every so often
  if (drifty > ( HEIGHT - spirocenterY / 2))// if y gets too big, reverse
    sangle = 0 - abs(sangle);
  if (drifty < spirocenterY / 2) {// if y gets too small reverse
    sangle = abs(sangle);
  }

  driftx = constrain(driftx, spirocenterX - spirocenterX / 3, spirocenterX + spirocenterX / 3);//constrain the center, probably never gets evoked any more but was useful at one time to keep the graphics on the screen....
  drifty = constrain(drifty, spirocenterY - spirocenterY / 3, spirocenterY - spirocenterY / 3);


  if (loadingFlag)
  {
    loadingFlag = false;
    setCurrentPalette();

    pointy = 7;
  
    hue = random8();//get a starting point for the color progressions
    driftx = random8(4, WIDTH - 4);//set an initial location for the animation center
    drifty = random8(4, HEIGHT - 4);// set an initial location for the animation center
  
    cangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation gives a float value between -1 and 1
    sangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation in the y direction gives a float value between -1 and 1
    shifty = random (3, 12);//how often the drifter moves
  
    howmany = random (spirocenterX * 3 / 2, WIDTH + 4 );
//для нечётных скоростей убираем летящие точки, чтобы они не мешали смотреть на звёзды
if (modes[currentMode].Speed & 0x01) howmany = 8U;

    for (uint8_t i = 0; i < howmany; i++) {
      switch (i % 8)
      {
        case 0U:
         starpointXway[i] = -1;
         starpointYway[i] = -1;
         break;
        case 1U:
         starpointXway[i] = -1;
         starpointYway[i] = 0;
         break;
        case 2U:
         starpointXway[i] = -1;
         starpointYway[i] = 1;
         break;
        case 3U:
         starpointXway[i] = 0;
         starpointYway[i] = 1;
         break;
        case 4U:
         starpointXway[i] = 1;
         starpointYway[i] = 1;
         break;
        case 5U:
         starpointXway[i] = 1;
         starpointYway[i] = 0;
         break;
        case 6U:
         starpointXway[i] = 1;
         starpointYway[i] = -1;
         break;
        default:
         starpointXway[i] = 0;
         starpointYway[i] = -1;
      }
      starpointX[i] = round(driftx) + starpointXway[i] * i;
      starpointY[i] = round(drifty) + starpointYway[i] * i;
    }
  }

  for (int i = 0; i < howmany; i++)
  {
    starpointX[i] += starpointXway[i];
    starpointY[i] += starpointYway[i];
    if (starpointX[i] < 0U || starpointY[i] < 0U || starpointX[i] >= WIDTH || starpointY[i] >= HEIGHT)
    {
      starpointX[i] = round(driftx);
      starpointY[i] = round(drifty);
    }
    else
      leds[XY(starpointX[i], starpointY[i])] = CRGB::White;
  }

starer();
}
А что такое "setCurrentPalette"?
Можешь её указать?
 

LexT

✩✩✩✩✩✩✩
2 Май 2020
2
0
Здравствуйте, возникла проблема с лампой, все сделал по инструкции и пайка как на сайте но, лампа не включается. На матрице горит один синий светодиод а если менять настройки лампы в телефоне то мигает светодиод на сенсорной кнопке. У Гайвера лампа на видео сразу заработала у меня нет, что это может быть?
 

LexT

✩✩✩✩✩✩✩
2 Май 2020
2
0
Видимо, вы на неё припаяли пин, предназначенный для ленты или типа того.
Плата Wemos mini прошивка последняя от Гайвера, матрица такая же как у него, кнопка припаяна как на картинке на D2 а матрица на D4
Все работает, вот я баран оказывается WEMOS и LOLIN WEMOS это разные вещи.
 
Изменено:

fandoz

✩✩✩✩✩✩✩
2 Май 2020
6
0
Здравстуйте, есть проблема с двумя лампами.
1) Первую лампу собрал давно работал нормально, пока не перестала работать через приложение (прошивка от gunner47 V1.4. Позже обновил прошивку до V1.5, но проблема осталась )приложение её просто не видит и сама лампа не включается. После 5 минут лампа переходит в режим ESP_MODE_0 уже включается, но все еще не подключается к приложению//фото1.
2)Вторую лампу собрал на днях. Не удовалось загрузить прошивку,(прошивка встает если отсоединить провод управления матрицей).Собрав все на матрице горит два светодиода, она не включается и не раздает wi-fi.// фото2
// В прошивке ничего не менял
//приложение wifiLamp и Led Lamp
 

Вложения

Сотнег

★★★★★★★
15 Янв 2020
4,161
1,453
сама лампа не включается. После 5 минут лампа переходит в режим ESP_MODE_0 уже включается
Первая лампа пытается подключиться к роутеру по ранее сохранённым настройкам. Обнулить бы их, и войти в веб-интерфейс для выбора новых настроек.

У второй что-то с проводами напутано, или с моделью платы, или с питанием проблема.
 

menooooo

★✩✩✩✩✩✩
4 Мар 2019
71
10
@Сотнег, А можешь сделать эффект "развивающего флага"? Украины, РФ и Белорусский?
Или подсказать как это можно сделать?
Заранее спасибо!
 

Сотнег

★★★★★★★
15 Янв 2020
4,161
1,453
@menooooo, у меня знаний только на gif-анимацию хватило бы. Не уверен, что результат будет стоящим.

Но не возьмусь. Мне оно без надобности.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Сотнег, А можешь сделать эффект "развивающего флага"? Украины, РФ и Белорусский?
Или подсказать как это можно сделать?
Если без гербов или подобного - то синус или косинус в помощь + смещение + разукрашка, код для сделать по аналогии можно в той же призмате взять.
* Но я тоже делать не буду, т.к. не вижу целесообразности.
 

andree75

✩✩✩✩✩✩✩
26 Фев 2020
28
4
Еще есть идея простого эффекта для тех кто умеет: вращающиеся горизонтальные круги в разных направлениях с изменением цветов. Высота круга 2 светодиода.
 

galgalg

★✩✩✩✩✩✩
11 Янв 2020
58
18
Я, если бы соображал, то сделал бы пляшущего человечка.Screenshot_2020-05-04-10-03-18-530_com.koteyka.superfirelamp.png
 
Изменено:

Ravshan

✩✩✩✩✩✩✩
4 Май 2020
18
0
Всем привет я обновил все библиотеки от алекс грайвера до последний версии и FastLED тоже. скажите это нормально или надо ставит версии от алекса?
и еще почему так происходит и как решить эту проблему?

Возникла ошибка при загрузке http://arduino.esp8266.com/stable/package_esp8266com_..
Возникла ошибка при загрузке http://arduino.esp8266.com/stable/package_esp8266com_..
 

Сотнег

★★★★★★★
15 Янв 2020
4,161
1,453
@Ravshan, библиотеки нужно ставить из архива с прошивкой. Остальные лучше вообще удалить.
 

Ravshan

✩✩✩✩✩✩✩
4 Май 2020
18
0
@Ravshan, библиотеки нужно ставить из архива с прошивкой. Остальные лучше вообще удалить.
не понял вас суть такая я открыль программу Arduino IDE и он показал что есть обновлении этих библиотеки алекса и я обновил все. Это же хорошо что все библиотеки обновлени до последнии версии? или нет
 

Сотнег

★★★★★★★
15 Янв 2020
4,161
1,453
@Ravshan, мы не проверяли.
Если нужно, чтобы работало, ставьте те, которые точно работают (из архива с прошивкой).
 

trio

✩✩✩✩✩✩✩
3 Май 2020
9
0
Добрый день уважаемые обитатели сообщества.

Подскажите пожалуйста.
Я собрал ГайверЛамп пол года назад на nodemcu, как то всё быстро получилось и работало супер круто.

Но на днях я поменял точку доступа wifi.
Подскажите, как мне перенастроить nodemcu на новую точку доступа?
Я уже там на плате все кнопки нажимал, держал кучу секунд нажатыми, SOS азбукой морзе на них выстукивал, ничего не помогает.

В гугле, ничего вразумительного не нашел, вроде как есть какая то утилита для сброса настроек, но что? где?ничего не понятно.
Наверняка есть путь п проще, с кнопками на плате, это же логично. сброс параметров через аппаратные штуки. Наверное есть секрет?
Он же есть?

Как сбросить настройки подключения на wifi на плате nodemcu?
Не перепрошивать же из за этого лампу снова?

Спасибо за ответ.

В общем перепрошил, и ок.
Но всё таки интересно, на будущее, как сменить сеть?
 

Вложения