Собственно как??
Как-то не верится - сужу по коду в блоке. Данный блок выполняется в каждом цикле ф-и Loop(), т.е. в каждом цикле он обрабатывает данные со входов, и вгоняет их по медленной шине I2C в ТМ1637, даже если эти данные не менялись. Кроме того, уважаемый неизвестный автор этого блока выводит мигание точек и данные со входа Hours даже в режиме отображения температуры и потом "затирает" их данными со входа Mins (где уже температура). Так-же применяет тип данных integer(2 байта), для записи данных времени (которые байтовые) и яркости (которая имеет всего 7-мь градаций).
Код: Выделить всё
//TimeDisp[0] = Hours / 10; // переносим ниже, выполняется если выключена инд. температуры
//TimeDisp[1] = Hours % 10; // переносим ниже, выполняется если выключена инд. температуры
//if ( Sec ) tm1637.point(HIGH); // зачем сравнивать, всё равно перезаписываем?
// else tm1637.point(LOW); // эти два безполезных условия(сравнения) заменяем tm1637.point( Sec ); там где это должно выполняться
if (temp) {
// TimeDisp[0] = Mins / 10; // Данные со входа минут десятки (уже температура) выводим в крайний левый разряд
// TimeDisp[1] = Mins % 10; // Данные со входа минут единицы (уже температура) выводим в левый разряд
TimeDisp[2] = Mins / 100; // Почему/100, сюда нужно записать символ градуса -константа 0х63
TimeDisp[3] = Mins % 100; //Почему%100, сюда нужно записать символ С (Celsium) -константа 0х39
}else{
TimeDisp[0] = Hours / 10;
TimeDisp[1] = Hours % 10;
TimeDisp[2] = Mins / 10;
TimeDisp[3] = Mins % 10;
tm1637.point( Sec );
}
tm1637.display(TimeDisp);
tm1637.set(Brightness);
Я бы сказал, что он отображает ту фигню (ссылка), которая у Вас получилась после записи данных типа Float (с датчика DHT) в переменную типа integer. Вы же не станете наливать в 100-граммовый стакан пол-литра (просто как пример), но пишете 32-х битовый Float в 16-ти битовый Integer. Странно, что это позволяет сделать FLProg.
Код: Выделить всё
TimeDisp[0] = Hours / 10;
TimeDisp[1] = Hours % 10;
if ( Sec ) tm1637.point(HIGH);
else tm1637.point(LOW);
tm1637.set(Brightness);
if (temp)
{
TimeDisp[2] = 18; // В авторской библиотеке Grove_4Digital_Display в массиве static int8_t tube_tab[]
/*только 16-ть элементов , что приводит к выводу чёрт знает чего
* это-же можно сделать без модернизации оригинальной библиотеки через using namespace char2segments
* там (namespace { uint8_t char2segments(char c))есть искомый символ: case '*' : return 0x63; // °
* см. файл TM1637.cpp
*/
TimeDisp[3] = 12;
}
else
{
TimeDisp[2] = Mins / 10;
TimeDisp[3] = Mins % 10;
}
tm1637.display(TimeDisp);