ESP, IoT [MatrixClock] Большие часы 64х32, ESP32

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
РЕЛИЗ 2 в разработке с 16.04.23

  • переход на GyverHub​
  • обновление интерфейса​
  • замена библиотек датчиков​
  • обновление интерфейса вывода информации на дисплее​
  • оптимизация кода вывода показаний с датчиков​

 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,046
909
в #37 сделано на таймере, замечаний не было, но мне не нравится как работает...
в #37 таймер правильный, верни его.
А что именно не нравится? Может то, что не мигает? :) Состояние dot кто запоминать будет?
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@bort707, типа этого?)
C++:
  if (dot) {
    display.drawRect(27, 18, 2, 2, color);
    display.drawRect(27, 23, 2, 2, color);
    dot = true;
  }
  else {
    display.drawRect(27, 18, 2, 2, black);
    display.drawRect(27, 23, 2, 2, black);
    dot = false;
  }
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,046
909
@ASM, вроде и парень ты хороший... но иногда даже не пытаешься думать. Слушай, я к тебе хорошо отношусь - но подсказывать напрямую - у меня просто язык не поворачивается. Не надо такого от меня ждать.

Давй зайдем с другой стороны. Скажи, чем тебе код из #37 не нравится? Зачем ты просил меня его "глянуть"?
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@bort707, не помню, либо не работает, либо не циклично мерцает) вариантов несколько использовал, (тут только два варианта показал), всё не упомнишь) завтра попробую, я же не могу точно написать, как надо, надо экспериментировать, тем более такой вариант ни разу не встречался) примеры смотрел, не видел, чтобы у кого-то такое было, они тупо показывают точки, по типу display.print(%s ":" %s);
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
@ASM, ок, давай посмотри. только именно код #37. а не какой-то похожий. Я в нем вижу одну ошибку, моя ставка - что он вообще не мигает. Посмотрим, угадаю ли...

А чтоб исправить - еще раз подумай над последней фразой из сообщения #51. В ней - решение.
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
мигает, раз в 10 секунд с #52)
Как я вас люблю, новички... Просил же - запускай именно 37 код... И что? - все равно запустил какой-то другой...

По тем 6 строчкам, что в #52 - ничего сказать не могу, они вообще ничего не делают. Если по русски, знаешь что таи написано? - " если dot истина - значит dot истина, а иначе - ложь". Бессмыслица.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@bort707, #37 вроде не мигает) запускал и его, не переживай, не думал что быстро ответишь, дописал бы в прошлом сообщении)
сейчас посмотрю код, попробую дописать с флажком hasChange, как было в прошлом проекте)

код как от Похабыча
C++:
bool hasChange = false;
bool dot = false;
void Dots() {

  static uint32_t t = millis();
  if (millis() - t < 500) return;
  t = millis();
  dot = !dot;
  hasChange = true;

  if (dot) {
    display.drawRect(27, 18, 2, 2, color);
    display.drawRect(27, 23, 2, 2, color);
  }
  else {
    display.drawRect(27, 18, 2, 2, green);
    display.drawRect(27, 23, 2, 2, green);
  }
}
но что-то не работает.
если заменить знак < на >, то начинает мигать, но тремя цветами) прикол) ладно, потом посмотрю...
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,046
909
Если хочешь, чтоб посмотрел 52 - выкладывай полностью, в этих 6 строчках смотреть нечего.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Написал код, в мониторе порта работает как надо, но на матрице нет никаких миганий)
C++:
bool dot = true;
void Dots() {

  static uint32_t t = millis();
  if (millis() - t < 500) return;

  t = millis();

  if (dot) {
    display.clearDisplay();
    display.drawRect(27, 18, 2, 2, color);
    display.drawRect(27, 23, 2, 2, color);
    dot = false;
    return;
  }
  if (!dot) {
    display.clearDisplay();
    display.drawRect(27, 18, 2, 2, black);
    display.drawRect(27, 23, 2, 2, black);
    dot = true;
    return;
  }
}
решил проблему, почему-то clearDisplay() в void Time() блокировал прорисовку точек...
если перенести очистку в код точек, то появляется новая проблема, мерцание и анимация перерисовки)
каким образом лучше реализовать очистку?) fillScreen() не меняет обстановку)
пока мысль одна, как и говорил ранее, проверять изменилось ли значение чего либо и перед сменой делать очистку, только как будет работать...
можно проверять по минуте, если изменилась минута, то перерисовать и прочитать новые показания с датчиков, думаю такой вариант будет оптимальным)
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
такой вариант придумал, останется только логику правильно сделать, чтобы часы сразу запускались, а не пока переменные заполнятся)
C++:
void Time() {
  int minute = ntpClient.getMinutes();
  int m2 = minute % 10;
  display.setFont(&atawi21x12b);
  display.setTextColor(color);
  display.setCursor(43, 11);
  display.print (m2); //второй символ минуты
  int new_time, old_time;
  new_time = m2;
  if (new_time != old_time){
  display.clearDisplay();
    old_time = new_time;
  }
}
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
почему-то clearDisplay() в void Time() блокировал прорисовку точек...
а ты не догадываешься?:) я даже не видя кода могу сказать...
Потому что , как ни удивительно, clearDisplay очищает дисплей, то есть удаляет все символы и надписи... в том числе и точки.
такой вариант придумал
если ты выкладываешь код, чтобы кто-то посмотрел - четче пиши, что в нем не так.
Если же ты это делаешь, чтоб другие порадовались - так и пиши, я не буду тратить время на разглядывание.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@bort707, ну часы то показывались исправно) а вот точки уже нет)
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@bort707, наоборот)
Вызываются в loop обе функции.

если ты выкладываешь код, чтобы кто-то посмотрел - четче пиши, что в нем не так
чтобы часы сразу запускались, а не пока переменные заполнятся)
Часы показывают не сразу, а спустя несколько минут. Думаю вынесу проверку в loop, и оттуда вызывать...
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
Часы показывают не сразу, а спустя несколько минут
проще всего сделать переменную флаг, обозначающую, надо ли перерисовывать всю картинку. И в начале делать его истинным.

И кстати, когда спрашиваешь - всегда выкладывай код ПОЛНОСТЬЮ, а не по 10 строк. На большинство твоих вопросов без полного кода ответить нельзя.
 
  • Лойс +1
Реакции: ASM

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
проще всего сделать переменную флаг
я вот думаю этот вариант не в моем случае...

чуток модифицировал вчерашний код, логика вроде верная)
сделал переменные глобальными и присвоил одной значение минус единица, т.к. такого значения не бывает, то часы сразу перерисуются и больше перерисовки не будет, пока не изменится минута.
C++:
  int new_time;
  int old_time = -1;
void Time() {
  int minute = ntpClient.getMinutes();
  int m2 = minute % 10;
  display.setFont(&atawi21x12b);
  display.setTextColor(color);
  display.setCursor(43, 11);
  display.print (m2); //второй символ минуты
  new_time = m2;
  if (new_time != old_time){
  display.clearDisplay();
    old_time = new_time;
  }
}
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
Перерисовка может потребоватся не только по смене минуты, но и например по температуре или другим элементам. Поэтому флаг в принципе более общее решение.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@bort707, чем рекомендуешь править шрифты?)
Перерисовка может потребоватся не только по смене минуты, но и например по температуре или другим элементам
вот такой вариант будет)
C++:
  if (new_time != old_time) {
    display.clearDisplay();
    TempHome();
    TempStreet();
    Press();
    old_time = new_time;
  }
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@bort707, не читает программа этот шрифт)
вот они https://github.com/adafruit/Adafruit-GFX-Library/tree/master/Fonts
нашел онлайн редактор) https://tchapi.github.io/Adafruit-GFX-Font-Customiser/
Похвастаюсь своим шрифтом))
IMG_20220413_194615.jpg
п.с. какие же кривые шрифты в библиотеке)
думал раньше, что не так у меня на экране, а отправил на редактирование и понял, что шрифты делал кто-то подшофе)))
пш.JPG
Вот так перерисовал шрифт)
IMG_20220414_185828.jpg
 
Изменено:

BRUER

✩✩✩✩✩✩✩
16 Апр 2022
4
1
@ASM можно попросить ваши шрифты сам делаю такие часы щяс на таком этапе IMG_20220415_131014_246.jpg
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@BRUER,

п.с. как-то интересно работает матрица) с usb кабелем мерцаний практически нет, стоит запустить без кабеля, идут мерцания))
 

Вложения

BRUER

✩✩✩✩✩✩✩
16 Апр 2022
4
1
@ASM спасибо за шрифты , за мерцание не знаю не замечал такой проблемы