Дисплей ST7789 и Arduino nano

Речь то и идёт именно о секундах, только экран на первом десятке СЕКУНД первой минуты гасит правый крайний разряд, считая его не значащим, а со второй минуты перестаёт его гасить и счёт первого десятка СЕКУНД второй минуты начинается не с 1, а с 19. Далее идёт 29,39,49, и т.д. Со второго десятка секунд второй минуты отображение идёт правильно, поскольку появляется второй значащий разряд. Ошибка возможно и элементарная но пожалуй не моя.

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

А чья же?
Какие разряды зажигать, а какие гасить - дело вас как автора кода.

Но код вы не показываете - значит у вас нет шансов его исправить. Продолжайте верить, что это полтергейст

ЗЫ
Если все-таки преодолеете гордыню и соберетесь исправить ВАШ ОШИБОЧНЫЙ КОД - я в сообщении 20 подсказал, как это сделать. Всегда выводите секунды в два разряда .

#include <Wire.h>
#include <TFT_eSPI.h>
#include <OneWire.h>
#include <TimeLib.h>
byte _d18x2x1Addr[8]={0x28, 0xFF, 0x64, 0xE, 0x77, 0xC7, 0xCB, 0xF6};
OneWire  _ow4(4);
TFT_eSPI tft= TFT_eSPI();
int R_shunt_244690025_2;
float Voltage_244690025_2;
float Current_244690025_2;
float V_Shunt_244690025_2;
bool MAX_Current_244690025_2;
unsigned long old_time_244690025_2;
bool EN_31582123_2;
String Text_31582123_2;
int SIZE_31582123_2;
byte X_31582123_2;
byte Y_31582123_2;
bool EN_74918377_2;
String Text_74918377_2;
int SIZE_74918377_2;
byte X_74918377_2;
byte Y_74918377_2;
bool EN_45181868_2;
String Text_45181868_2;
int SIZE_45181868_2;
byte X_45181868_2;
byte Y_45181868_2;
bool EN_61604410_2;
String Text_61604410_2;
int SIZE_61604410_2;
byte X_61604410_2;
byte Y_61604410_2;
bool EN_74918377_1;
String Text_74918377_1;
int SIZE_74918377_1;
byte X_74918377_1;
byte Y_74918377_1;
bool EN_74918377_3;
String Text_74918377_3;
int SIZE_74918377_3;
byte X_74918377_3;
byte Y_74918377_3;
bool EN_74918377_4;
String Text_74918377_4;
int SIZE_74918377_4;
byte X_74918377_4;
byte Y_74918377_4;
bool EN_74918377_5;
String Text_74918377_5;
int SIZE_74918377_5;
byte X_74918377_5;
byte Y_74918377_5;
bool EN_74918377_6;
String Text_74918377_6;
int SIZE_74918377_6;
byte X_74918377_6;
byte Y_74918377_6;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
bool _bounseInputD15S = 0;
bool _bounseInputD15O = 0;
unsigned long _bounseInputD15P = 0UL;
byte H;
byte M;
byte S;
float _tempVariable_float;
void setup()
{
    pinMode(15, INPUT_PULLUP);
    _bounseInputD15O =  digitalRead(15);
    tft.init(); // инициализация дисплея
        tft.setRotation(0); // вращение на90,180,240 градусов
        tft.fillScreen(TFT_BLACK); // заливка цветом
    Wire.begin();
    	delay(200);
    Wire.beginTransmission(64);
    Wire.write(0x00);
    Wire.write(0x39);
    Wire.write(0xE7);
    Wire.endTransmission();
}
void loop()
{
    bool  _bounceInputTmpD15 =  (digitalRead (15));
    if (_bounseInputD15S)
    {
        if (millis() >= (_bounseInputD15P + 40))
        {
            _bounseInputD15O= _bounceInputTmpD15;
            _bounseInputD15S=0;
        }
    }
    else
    {
        if (_bounceInputTmpD15 != _bounseInputD15O)
        {
            _bounseInputD15S=1;
            _bounseInputD15P = millis();
        }
    }
    //Плата:1
//Наименование:ГЛАВНЫЙ БЛОК
    //Плата:2
//Наименование:ДИСПЕЙ ТЕКСТ
    EN_74918377_3 = 1;
    Text_74918377_3 = String("Тестер АКБ");
    SIZE_74918377_3 = 3;
    X_74918377_3 = 20;
    Y_74918377_3 = 15;
    if(EN_74918377_3)
    {
         tft.setCursor(X_74918377_3, Y_74918377_3); // x,y координаты текста
            tft.setTextColor(TFT_WHITE,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_74918377_3); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_74918377_3); // вывод текста
        delay(100);
    }
    EN_74918377_1 = 1;
    Text_74918377_1 = String("ВОЛЬТ");
    SIZE_74918377_1 = 3;
    X_74918377_1 = 15;
    Y_74918377_1 = 55;
    if(EN_74918377_1)
    {
         tft.setCursor(X_74918377_1, Y_74918377_1); // x,y координаты текста
            tft.setTextColor(TFT_RED,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_74918377_1); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_74918377_1); // вывод текста
        delay(100);
    }
    R_shunt_244690025_2 = 1000;
    if (2000 < (millis() - old_time_244690025_2)) 
    {
        get_Parametr__244690025_2();
        old_time_244690025_2 = millis();
    }
    EN_45181868_2 = 1;
    Text_45181868_2 = (_floatToStringWitRaz(Current_244690025_2,2));
    SIZE_45181868_2 = 3;
    X_45181868_2 = 145;
    Y_45181868_2 = 85;
    if(EN_45181868_2)
    {
         tft.setCursor(X_45181868_2, Y_45181868_2); // x,y координаты текста
            tft.setTextColor(TFT_WHITE,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_45181868_2); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_45181868_2); // вывод текста
        delay(100);
    }
    EN_74918377_2 = 1;
    Text_74918377_2 = (_floatToStringWitRaz(Voltage_244690025_2,2));
    SIZE_74918377_2 = 3;
    X_74918377_2 = 145;
    Y_74918377_2 = 55;
    if(EN_74918377_2)
    {
         tft.setCursor(X_74918377_2, Y_74918377_2); // x,y координаты текста
            tft.setTextColor(TFT_WHITE,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_74918377_2); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_74918377_2); // вывод текста
        delay(100);
    }
    EN_74918377_5 = 1;
    Text_74918377_5 = String("АМПЕР");
    SIZE_74918377_5 = 3;
    X_74918377_5 = 15;
    Y_74918377_5 = 85;
    if(EN_74918377_5)
    {
         tft.setCursor(X_74918377_5, Y_74918377_5); // x,y координаты текста
            tft.setTextColor(TFT_YELLOW,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_74918377_5); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_74918377_5); // вывод текста
        delay(100);
    }
    EN_74918377_4 = 1;
    Text_74918377_4 = String("ВРЕМЯ");
    SIZE_74918377_4 = 3;
    X_74918377_4 = 75;
    Y_74918377_4 = 155;
    if(EN_74918377_4)
    {
         tft.setCursor(X_74918377_4, Y_74918377_4); // x,y координаты текста
            tft.setTextColor(TFT_BLUE,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_74918377_4); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_74918377_4); // вывод текста
        delay(100);
    }
    EN_74918377_6 = 1;
    Text_74918377_6 = String("ГРАД.С");
    SIZE_74918377_6 = 3;
    X_74918377_6 = 15;
    Y_74918377_6 = 115;
    if(EN_74918377_6)
    {
         tft.setCursor(X_74918377_6, Y_74918377_6); // x,y координаты текста
            tft.setTextColor(TFT_GREEN,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_74918377_6); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_74918377_6); // вывод текста
        delay(100);
    }
    if(_isTimer(_d18x2x1Tti, 3000)) 
    {
        _d18x2x1Tti = millis();
        _tempVariable_float =  _readDS18_ow4(_d18x2x1Addr, 0);
        if (_tempVariable_float < 500) 
        {
            _d18x2x1O = _tempVariable_float;
        }
    }
    EN_31582123_2 = 1;
    Text_31582123_2 = (_floatToStringWitRaz((_d18x2x1O),2));
    SIZE_31582123_2 = 3;
    X_31582123_2 = 145;
    Y_31582123_2 = 115;
    if(EN_31582123_2)
    {
         tft.setCursor(X_31582123_2, Y_31582123_2); // x,y координаты текста
            tft.setTextColor(TFT_WHITE,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_31582123_2); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_31582123_2); // вывод текста
        delay(100);
    }
    if((_bounseInputD15O)) 
    {
        S = (second());
        M = (minute());
        H = (hour());
    }
    EN_61604410_2 = 1;
    Text_61604410_2 = (((((String((H), DEC))) + (String(":")))) + ((String((M), DEC))) + (((String(":")) + ((String((S), DEC))))));
    SIZE_61604410_2 = 3;
    X_61604410_2 = 70;
    Y_61604410_2 = 195;
    if(EN_61604410_2)
    {
         tft.setCursor(X_61604410_2, Y_61604410_2); // x,y координаты текста
            tft.setTextColor(TFT_WHITE,TFT_BLACK); // цвет текста 
            tft.setTextSize(SIZE_61604410_2); // размер текста - №2 (7*2 = 14 точек)
            tft.print(Text_61604410_2); // вывод текста
        delay(100);
    }
}
String  _floatToStringWitRaz(float value, int raz)
{
    return String(value,raz);
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
    unsigned long currentTime;
    currentTime = millis();
    if (currentTime>= startTime) 
    {
        return (currentTime>=(startTime + period));
    }
     else 
    {
        return (currentTime >=(4294967295-startTime+period));
    }
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
    int16_t raw = (data[1] << 8) | data[0];
    if (type_s)
    {
        raw = raw << 3;
        if (data[7] == 0x10) 
        {
             raw = (raw & 0xFFF0) + 12 - data[6];
        }
    }
    else
    {
        byte cfg = (data[4] & 0x60);
        if (cfg == 0x00)raw = raw & ~7;
        else if(cfg == 0x20)raw = raw & ~3;
        else if(cfg == 0x40) raw = raw & ~1;
    }
    return  (float)raw / 16.0;
}
float _readDS18_ow4(byte addr[8], byte type_s)
{
    byte data[12];
    byte i;
    _ow4.reset();
    _ow4.select(addr);
    _ow4.write(0xBE);
    for (i = 0; i < 9; i++) 
    {
         data[i] = _ow4.read();
    }
    _ow4.reset();
    _ow4.select(addr);
    _ow4.write(0x44);
    if (_ow4.crc8(data, 8) != data[8])
    {
        return 501;
    }
    return _convertDS18x2xData(type_s, data);
}
void get_Parametr__244690025_2()
{
    	uint16_t vallue; // объявляем промеж переменную
          vallue = 0;
    	int16_t pptt; // объявляем 2 промеж переменную
    	wire_Read_244690025_2(0x01, &vallue); //считываем в промеж переменную регистр шунта
    	pptt = (int16_t)vallue; // получаем напряжение на шунте, в *10мкВ
    	V_Shunt_244690025_2 = pptt * 0.010; // получаем напряжение на шунте, тип Float, в мВ
    	Current_244690025_2 = V_Shunt_244690025_2 * 10 / R_shunt_244690025_2; // получаем амперы
          vallue = 0;
    	wire_Read_244690025_2(0x02, &vallue); //считываем в промеж переменную регистр напряжения
    	int16_t vollt = ((int16_t)((vallue >> 3) * 4)); // сдвигаем на 3 бита и умножаем на 4
    	Voltage_244690025_2 = vollt * 0.001; // получаем флоат, переводим мВ в Вольты
    	if ((V_Shunt_244690025_2 >319) | (V_Shunt_244690025_2 < -319)) MAX_Current_244690025_2 = 1;
    	else MAX_Current_244690025_2=0;
}
void wire_Read_244690025_2(uint8_t reg, uint16_t *value)
{
    	Wire.beginTransmission(64);
    Wire.write(reg);
    	Wire.endTransmission();
    	delay(50);
    	Wire.requestFrom((uint8_t) 64, (uint8_t)2);
    *value = ((Wire.read() << 8) | Wire.read());
}

ошибка в строке 232.
Кстати, почему вы беспокоитесь только о секундах? - у вас с минутами и часами ровно такая же проблема.

Хотя тем, кто пишет в FL_Code - на нашем форуме делать нечего.

Абсолютно такая же. На том форуме меня тоже послали в такой же хамской форме. Видимо по существу дела нечего сказать. Извините за доставленные неудобства. Хотя попробую повозиться с этой строчкой.

я вам прямо на ошибку указал… и обьяснил, в чем она заключается…

А по существу… ну да, по существу нечего. За лентяев код я не пишу.

Просто нет специалистов по графическому программированию. Не хотят поэты картинками стихи рисовать.
…Затирайте поле вывода фоновым цветом после каждой минуты.

проще ноль выводить - так и выглядеть будет лучше, строчка всегда одной длины

1 лайк

Наверно тоже начали с того, что это “не ваша ошибка”. И даже после того как вас послали - выводов не сделали.

Надо загуглить - ВЕДУЩИЙ НОЛЬ

А если выводить строкой, там ноль впереди не пишется?

С чего бы? Когда вы печатаете число 1, у вас же не выводится 01, правильно?

Виртуальные часы ускорены в 100 раз !

Не, я имею в виду ходовые функции библиотек - запрос времени в виде строки и вывод на дисплей полученной строки.

ведущий ноль надо ручками формировать

//  Функция gettime("строка с параметрами"):
//      функция получает и выводит строку заменяя описанные ниже символы на текущее время
//      пример: time.gettime("d-m-Y, H:i:s, D"); ответит строкой "01-10-2015, 14:00:05, Thu"

Вот из описания ненавистной:

<iarduino_RTC.h>

да это не в коня корм - @Евгений5 в ФЛПроге пишет, вряд ли он Си код поймет

А это что за НАХ ?

Как что? Защита от переполнения жи ))

Там наверняка есть подобный пазл.