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

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

  • BMP280

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

    Голосов: 71 73.2%

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

ASM

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

maksland

★★★✩✩✩✩
13 Янв 2019
615
144
Omsk
лучше в Китае закажу :) у нас дорого
хотя у меня плата то есть одна рабочая и готовая, к часам сегмент точек только доделаю и буду готов тестить сразу два проекта !
две недели загружен был на работе, без обедов и выходных но сейчас есть немного времени... простудился
 
Изменено:

Maxx1200

★✩✩✩✩✩✩
11 Фев 2022
95
19

@ASM,
Можно ли заодно добавить поддержку Ds1307?

Ps
Я пробовал вот так запустить
RTC_DS1307 rtc;
все работает
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Maxx1200, если работает, то хорошо) кому надо, могут заменить библиотеку вручную. Но точность у такого модуля низкая.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
баг вроде исправил, дописал строчку для DS1307...
осталось разобраться с ручным изменением цвета)
 
  • Лойс +1
Реакции: Maxx1200

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Старик Похабыч можно ли и как правильно сделать?)
C++:
for (int i = 1; i <= DOTS_NUM; i++) {
      leds[dot_(i)] = (Dot_On) ? ledColor : CRGB(0, 0, 0);
    }
чтобы не расписывать
C++:
leds[dot_1] = (Dot_On) ? ledColor : CRGB(0, 0, 0);
leds[dot_2] = (Dot_On) ? ledColor : CRGB(0, 0, 0);
уменьшить много строчек кода до минимума?)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,319
1,319
Москва
Ну если dot_(i) , где i от 1 до число светодиодов точек, выдаст номер светодиода в ленте. то можно.
Но я бы даже не так сделал. Если светодиоды точек идут строго подряд, то можно сделать так:

C++:
for (int i = dot_(1); i <= dot_(DOTS_NUM); i++) {
      leds[i] = (Dot_On) ? ledColor : CRGB(0, 0, 0);
    }
Но мне тут не нравится , что нумерация идет не так , как обычно в массивах, не с нуля, а с единицы. Это вводит в диссонанс,
 
  • Лойс +1
Реакции: ASM

SergeR

✩✩✩✩✩✩✩
23 Июн 2019
4
0
Здравствуйте, у меня версия Clock_ESP_8.1dots и заметил что при температуре ниже 0 градусов, на BME280 на табло не показывает знак минуса , на
DS18B20 всё нормально. Не подскажите где проблема ?
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@SergeR, bme не рассчитан на уличное применение, поэтому я и не стал прописывать этот момент. Но сложности особо и нет. В коде описан этот момент)
C++:
Digit(digits[12], segment_1);
заменить на
C++:
if (tempH <= -1) Digit(digits[13], segment_1);  // если < или = -1, то показываем -
  else
    Digit(digits[12], segment_1);
 
Изменено:
  • Лойс +1
Реакции: SergeR

SergeR

✩✩✩✩✩✩✩
23 Июн 2019
4
0
Насколько я понял из кода BME280 не уличный датчик и вывод минуса не предусмотрен. Есть ли возможность добавить в коде такую возможность ?
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Старик Похабыч, так-то оно так, но... надо описать сначала этот 'dot_'
переписываю старый код
C++:
if (DOTS_NUM == 2) {
    dot_1 = LEDS_IN_SEGMENT * 14;
    dot_2 = (LEDS_IN_SEGMENT * 14) + 1;
  } else if (DOTS_NUM == 4) {
    dot_1 = LEDS_IN_SEGMENT * 14;
    dot_2 = (LEDS_IN_SEGMENT * 14) + 1;
    dot_3 = (LEDS_IN_SEGMENT * 14) + 2;
    dot_4 = (LEDS_IN_SEGMENT * 14) + 3;
  } else if (DOTS_NUM == 6) {
............................................
  }
на новый
C++:
for (int i = 1; i <= DOTS_NUM; i++) {
    dot_(i) = (LEDS_IN_SEGMENT * 14) + (i - 1);
  }
получаю
Код:
'dot_' cannot be used as a function
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,319
1,319
Москва
Ну а то! с круглыми скобками это функция, функцию можно приравнять, но не с параметром. (Нн тебя Алекс Гайвер отправлял уроки учить ?:D )
Я если честно вот это не понял:
dot_(i) = (LEDS_IN_SEGMENT * 14) + (i - 1)
может просто сделать int dot_n== (LEDS_IN_SEGMENT * 14) + (i - 1);
и потом менять цвет этого dot_n -нного светодиода ?
 

SergeR

✩✩✩✩✩✩✩
23 Июн 2019
4
0
Спасибо за код, BME показал минус, хотел спросить , есть ли возможность вывести на какой нибудь пин ESP почасовой сигнал для запуска например аудио ?
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@SergeR, да думаю больших сложностей недолжно быть) залить в память аудио и подключить динамик через плату плеера)
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Я если честно вот это не понял:
я понимаю что функция) поэтому ранее и спросил, возможно ли как-то реализовать задуманное мной?)
чтобы изменять последний символ, ничего похожего не нашел) а так красиво смотрелось бы)
попробую иначе...
Нн тебя Алекс Гайвер отправлял уроки учить ?
так да, я спрашивал об другом немного, но похоже придется переделывать немного текущую реализацию, непонятно только, как оно себя поведет...
вечером попробую))
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,319
1,319
Москва
Я не слежу за проектом, поэтому мне многое не понятно, что там где имеется ввиду.
Задача , как я понимаю, менять точки с любым заданным кол-вом светодиодов.
Попробуй словами описать что хочешь сделать. Подробною Как правило логические ошибки уходят сразу
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Старик Похабыч, у кого-то точки состояли не из двух диодов а более. Поэтому тогда и пришлось городить много строчек, для 4, 6, и 8 сделал) А т.к. с новым годом, код увеличился ещё в 2 раза, не только с ledcolor, а и с random ColorTable. Вечером попробую предложенный вариант использовать)
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Старик Похабыч
void setup:
for (int i = 1; i <= DOTS_NUM; i++) {
    dot_n = (LEDS_IN_SEGMENT * 14) + (i - 1);
  }
void Dots:
    for (int i = 1; i <= DOTS_NUM; i++) {
      leds[dot_n] = (Dot_On) ? ledColor : CRGB(0, 0, 0);    
}
вот так выглядит код после упрощения) экономия < 50 байт)
код работает для первой точки, а как для других, если не расписывать как раньше, пример для 4 точек
C++:
(DOTS_NUM == 4) {
    dot_1 = LEDS_IN_SEGMENT * 14;
    dot_2 = (LEDS_IN_SEGMENT * 14) + 1;
    dot_3 = (LEDS_IN_SEGMENT * 14) + 2;
    dot_4 = (LEDS_IN_SEGMENT * 14) + 3;
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,319
1,319
Москва
C++:
for (int i = 1; i <= DOTS_NUM; i++) {
    dot_n = (LEDS_IN_SEGMENT * 14) + (i - 1);
    leds[dot_n] = (Dot_On) ? ledColor : CRGB(0, 0, 0);
  }
Ну сам подумай, ты в 1-ом цикле получаешь номер светодиода, нигде его не используешь и в следующем круге получаешь новый.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
плату подготовил, можно заказывать
у меня готово на 99%)) потестирую еще))
цвет можно изменять на лету)
код разбил на вкладки, чтобы удобно было читать, а не одним большим текстом)
 
Изменено:
  • Лойс +1
Реакции: maksland и Maxx1200