Проблема с выводом в Serial

Написал небольшой код который секунды переводит в нормально представление: часы минут секунды, но возникла проблемка если значение свыше 10 часов то выводит как то так:
0-3:0-12:0-16, как я понимаю это превышено значение типо integer и меняет знак, но у меня то его нет, сам код:

    long h=0;
    long m=0;
    long s=0;
    long tp=0;
    String ext="";
    //Считаем
    tp=floor(count/60);
    s=count-(tp*60);
    h=floor(tp/60);
    m=tp-(h*60);
    //Преобразование
    if(h<10){ext=ext+0+h+":";}else{ext=ext+h+":";}
    if(m<10){ext=ext+0+m+":";}else{ext=ext+m+":";}
    if(s<10){ext=ext+0+s;}else{ext=ext+s;}
    Serial1.println((String)"/?mode="+mode+"&time="+ext);

значение count ставлю 36000

Приведите код полностью. По этому кусочку трудно что-то говорить. Например, совершенное неясно какого типа у Вас count.

Код должен быть коротким, но полным, чтобы любой мог его запустить и увидеть проблему.

void sendit(long count)
  {
    long h=0;
    long m=0;
    long s=0;
    long tp=0;
    String ext="";
    //Считаем
    tp=(long)floor(count/60);
    s=(long)(count-(tp*60));
    h=(long)floor(tp/60);
    m=(long)tp-(h*60);
    //Преобразование
    if(h<10){ext=ext+0+h+":";}else{ext=ext+h+":";}
    if(m<10){ext=ext+0+m+":";}else{ext=ext+m+":";}
    if(s<10){ext=ext+0+s;}else{ext=ext+s;}
    Serial1.println((String)"/?mode="+mode+"&time="+ext);
  }

Простите, проблема у Вас или у меня?

Повторю ещё раз, в третий раз повторять уже не буду:

long count=0;
void setup() {
  // put your setup code here, to run once:
  Serial1.begin(38400);
}

void sendit(long count)
  {
    long h=0;
    long m=0;
    long s=0;
    long tp=0;
    String ext="";
    //Считаем
    tp=floor(count/60);
    s=(count-(tp*60));
    h=floor(tp/60);
    m=tp-(h*60);
    //Преобразование
    if(h<10){ext=ext+0+h+":";}else{ext=ext+h+":";}
    if(m<10){ext=ext+0+m+":";}else{ext=ext+m+":";}
    if(s<10){ext=ext+0+s;}else{ext=ext+s;}
    Serial1.println("&time="+ext);
  }

void loop() {
  // put your main code here, to run repeatedly:
  delay(1000);
  sendit(36000);
}

Ну, печатает 10:00:00
Всё правильно.
Проблема в чём?

Если строке 29 написать 54000, то печатает 15:00:00

Не вижу проблемы (ну, кроме того, что код писался явно на конкурс “Написать самый неоптимальный код из всех возможных”).

по коду не спорю что не оптимальный, но если свыше 10 часов ввести то он начинает глючить, например выдает такое 0-8:0-12:0-19

Послушайте, я Вам дважды написал, приведите, наконец, код в котором видна проблема! Для альтернативно одарённых, ещё раз: сделайте такой код, чтобы я запустил и увидел проблему!

В том коде, что Вы привели проблема не видна. Когда я подставил 15 часов - тоже проблемы не было, всё печаталось правильно! Вы покажете свою проблему или нет? Если нет, то решайте её сами.

Замените строки 15-18 вот так

  h = count / 3600;
  tp = count % 3600;
  m = tp / 60;
  s = tp % 60;

@v258, да погодите Вы, до оптимизации ещё доберёмся, дайте ему хоть проблему-то показать :slight_smile:

3 лайка

Сделал 5 проверок свыше 10часов - код рабочий

код в точности такой, может это глюк контроллера, это выявилось в большой программе, тогда я сделал скетч маленький который показал и пробовал на нем, такой же результат

Приведите значение count при котором глючит

а контроллер какой?

Ну, так задайте такой count при котором будет видна проблема (появится глюк).

Если не можете, то проблема, скорее всего, не в этом коде.

Например, она может быть в недостатке памяти, Вы же зачем-то используете String и при этом нигде не проверяете хватает ему памяти или нет.

В любом случаем, чтобы получить помощь в глюке, Вы должны показать людям этот глюк. Иначе - всё “в пользу бедных”.

Вы прям мастер так ответить на вопрос, чтоб никто ничего не понял.
Какой “такой же результат” вы получили на своем коде? Такой же правильный, как у @ЕвгенийП или такой же неверный, как пишете в первом сообщении?
Если у вас есть небольшой код, который дает ошибку - покажите этот код, задайте исходное значение count и выложите копию вывода в Сериал монитор.

Вобщем сейчас в 'эту функцию отправляется такое выражение:

b1_6*60*60

пробовал и так:

(long)b1_6*60*60

помогло лишь поставить переменной b1_6 тип long (чего бы не хотелось так как это часы и большого значения там не будет), ранее был тип int и с ним возникала эта проблема

А чему b1_6 равно (максимально)?

1000 часов

сейчас максимально 546 и потом проблема опять возникает