Речь то и идёт именно о секундах, только экран на первом десятке СЕКУНД первой минуты гасит правый крайний разряд, считая его не значащим, а со второй минуты перестаёт его гасить и счёт первого десятка СЕКУНД второй минуты начинается не с 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, у вас же не выводится 01, правильно?
Виртуальные часы ускорены в 100 раз !
Не, я имею в виду ходовые функции библиотек - запрос времени в виде строки и вывод на дисплей полученной строки.
ведущий ноль надо ручками формировать
// Функция gettime("строка с параметрами"):
// функция получает и выводит строку заменяя описанные ниже символы на текущее время
// пример: time.gettime("d-m-Y, H:i:s, D"); ответит строкой "01-10-2015, 14:00:05, Thu"
Вот из описания ненавистной:
<iarduino_RTC.h>
да это не в коня корм - @Евгений5 в ФЛПроге пишет, вряд ли он Си код поймет
А это что за НАХ ?
Как что? Защита от переполнения жи ))
Там наверняка есть подобный пазл.