ESP, IoT [BigClock] Большие часы на WS2812, ESP8266, Народный мониторинг

Какой вариант датчика используется у вас? Интересно, использует ли кто BME280, как у меня?)

  • BMP280

    Голосов: 26 26.8%
  • BME280

    Голосов: 71 73.2%

  • Всего проголосовало
    97

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Изменил здесь
C++:
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + DOTS_NUM +1)  // вычисляем кол-во светодиодов
segment_4 = NUM_LEDS - LEDS_IN_SEGMENT * 7 - DOTS_NUM;
C++:
 Serial.println((String)FtempS + " | " + FtempS);
  Dots(!Dot);
  //leds[114]=ledColor;
  leds[NUM_LEDS]=ledColor;
  int a = FtempS * 10;
"Сломались" цифры.
 

Вложения

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@S_Sergey_G, изменилась длина ленты, попробуй отнять по единице от каждого сегмента. Лучше конечно на бумаге начертить и проверить расчёт, наглядно понять, если не сработает. Я не дома, сложно точно говорить)
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Если код не меняю, оставляю так;
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + DOTS_NUM)

Всё работает, но точка всегда светиться и на градусах и на часах. Наверное в часах её как то гасить надо.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@S_Sergey_G, где выключить нужно, там и добавить.
В часах можно тут, void TimeToArray()
На будущее надо подумать, как реализовать в прошивке, чтобы можно было включать)
 
Изменено:

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Загрузил Вашу последнею бета версию. Точка появилась. Но не могу погасить в часах. Здесь пробовал void TimeToArray() в разных местах.
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
C++:
void TimeToArray() {    // вывод времени на экран
  leds[NUM_LEDS]=0;
int Now = GetTime();  // получаем время
  boolean change_color_flag = false;
Так не работает.
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Погасили и в часах и в градусах.
И первая цифра исчезла, да и в часах бардак.
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Да.
Опять, несколько перепрошивок и точка пропала. Уже очистил ESP не появляется. Ничего не пойму.
Надо как то назначать её, что ли.
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@S_Sergey_G, странно как-то. Может контакты?) Прошивка может влиять только на настройки еепром. Стирать полностью, или только скетч.
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Стирал через командную строку Piton_ом.Да нет контакты хорошие, часы не трогаю. Прошиваю LEDS_IN_SEGMENT * 28 + DOTS_NUM+1 появляется сразу, но бардак в цифрах.
C++:
segment_4 = NUM_LEDS - LEDS_IN_SEGMENT * 6;
  segment_3 = NUM_LEDS - LEDS_IN_SEGMENT * 13;
  segment_2 = NUM_LEDS - LEDS_IN_SEGMENT * 20 - DOTS_NUM;
  segment_1 = NUM_LEDS - LEDS_IN_SEGMENT * 27 - DOTS_NUM;
Делал так, не помогает.
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Вот несколько прошивок точка появилась. Без +1. И команда leds[30]=CRGB(0, 0, 0); не гасит её. Видать хаотично зажигается, поэтому ни чем погасить и не можем.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@S_Sergey_G, так если без +1, то адрес в 30 неизвестен) 0-29

Вот и я ошибся)
Как и говорил, надо начертить схему и все станет понятно. Легко код интегрировать в саму прошивку)
Вот смотри на чертеж, думаю все понятно в сокращениях. Завтра внесу в саму прошивку, пока время свободное есть)
 

Вложения

Изменено:

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
C++:
segment_4 = NUM_LEDS - LEDS_IN_SEGMENT * 7;
  segment_3 = NUM_LEDS - LEDS_IN_SEGMENT * 14;
  segment_2 = NUM_LEDS - LEDS_IN_SEGMENT * 21 - DOTS_NUM;
  segment_1 = NUM_LEDS - LEDS_IN_SEGMENT * 28 - DOTS_NUM;
Если так я понял, то точки нет.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
C++:
segment_4 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 7;
segment_3 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 14;
segment_2 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 21 - DOTS_NUM;
segment_1 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 28 - DOTS_NUM;
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@S_Sergey_G, в общем +1 нужен, мы же добавили один диод, а чуть выше мы отнимает его из расчета, для сегментов.

И я так понимаю, надо подправить digit, там же тоже переполнен NUM_LEDS, вычесть единицу.

Стоп. не прав, там сегменты...

Тут пробуй TimeToArray
int cursor = (NUM_LEDS -1) - i * LEDS_IN_SEGMENT * 7;
 
Изменено:

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Вот с такими изменениями всё заработало правильно. Проверьте всё ли правильно?
C++:
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + DOTS_NUM + 1)  // вычисляем кол-во светодиодов
C++:
void TimeToArray() {    // вывод времени на экран
  leds[30]=0; // выключаем точку в часах
  int Now = GetTime();  // получаем время
C++:
 void firstSetSegment(){

 segment_4 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 7;
 segment_3 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 14;
 segment_2 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 21 - DOTS_NUM;
 segment_1 = (NUM_LEDS -1) - LEDS_IN_SEGMENT * 28 - DOTS_NUM;
C++:
void TempStreetToArray() {                       // вывод уличной температуры на экран Float
  sensors.requestTemperatures();                      // опрос датчика уличной температуры
  FtempS = sensors.getTempCByIndex(0) + o.cor_tempS;  // чтение уличной температуры с датчика 0, аналогично следующий будет 1
  tempS = FtempS;
  Serial.println((String)FtempS + " | " + FtempS);
  Dots(!Dot);
  leds[30]=ledColor; // включаем точку
  int a = FtempS * 10;   //25.43 -> 254
Спасибо большое за помощь и за учёбу.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@S_Sergey_G, да, всё верно. Только немного переделаю, чтобы точка тоже в новогоднем режиме работала)
Проверь работу)
 

Вложения

Изменено:
  • Лойс +1
Реакции: S_Sergey_G

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
168
3
Чисто для образования. Если продлить ленту например на ещё 1 или 2 светодиода, по такой же формуле код пересчитываем?
C++:
#define NUM_LEDS (LEDS_IN_SEGMENT * 28 + DOTS_NUM + 2)
И сдвигаем сегменты как Вы нарисовали?