Вывод на индикатор с гашением старших разрядов если они равны нулю

Доброго времени суток. Такая проблемка. Нужно вывести на индикатор с отправкой данных по Serial трех значное число от 0 до 255 . С этим я справился ниже будет пример как я вывожу. Дальше по тз потребовалось погасить старшие разряды если они равны нулю. Например сейчас у меня выводится 043 а хочется вывести 43 погасив первый разряд индикатора.

unsigned char skor[3] = {0, 0, 0};

//конвертируем скорость для вывода на индикатор
void dig_convert_skor(unsigned int i_conv1)
{
  unsigned char tmp = 0;

  //конвертируем skor_tek
  tmp = i_conv1 %10;
  skor[2] =  tmp;         //Разряд 3
  tmp = i_conv1 /10 %10;
  skor[1] =  tmp;         //Разряд 2
  tmp = i_conv1 /100 %10;
  skor[0] =  tmp;         //Разряд 1
}

 //сотни
 Serial1.print(char(0x1B));     //подача служебной команды на установку курсора.  
 Serial1.print(char(29));       //установка курсора на 29 знакоместо (0-47 допустимое значение)
Serial1.print(skor[0]);    //отправка текущая скорость Разряд 1

//десятки
 Serial1.print(char(0x1B));     //подача служебной команды на установку курсора.  
Serial1.print(char(30));       //установка курсора на 30 знакоместо (0-47 допустимое значение)
Serial1.print(skor[1]);    //отправка текущая скорость Разряд 2

//единицы
Serial1.print(char(0x1B));     //подача служебной команды на установку курсора.  
Serial1.print(char(31));       //установка курсора на 31 знакоместо (0-47 допустимое значение)
Serial1.print(skor[2]);    //отправка текущая скорость Разряд 3

Прошу помощи как мне правильно погасить ненужные нули.

Вывести в эти позиции “пробел” .

А уж как в вашем индикаторе пробел показать - никто кроме вас не знает

пробел я вывожу так

Serial1.print(char(0x1B));  //подача служебной команды на установку курсора.  
Serial1.print(char(29));    //установка курсора на 29 знакоместо (0-47 допустимое значение)
Serial1.print(" ");         //отправка пробела для очистки знакоместа от преведущей надписи Разряд 1

я о том как условие правильно написать попробовал написать если разряд равен нулю то гасить его но тут проблема у меня ведь три разряда и если цифра 105 то у меня погаснет 2й разряд и получится 1 5

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

А можно просто к исходной цифре привязатся, если она меньше 100- гасим первый разряд, а если меньше 10 - два первых.

Это ж все логика, думайте!

@b707 опять обсуждаем кривой и неполный код? Ну, потом не жалуйтесь :frowning:

не, мы обсуждаем алгоритм.

Попробуй как-то так сделать:

bool f=false;
for (int i=0;i<=2;i++){
  Serial1.print(char(0x1B));
  Serial1.print(char(i+29));
  if (skor[i]!='0') {f=true;};
  if (f) {serial1.print(skor[i]);} else {serial1.print(' ');}
}

незачет.

Ваш код будет работать так, как описано тут:

Форматированный вывод спасет отца русской демократии.

@alexval2007 , посмотрел Ваш код (хотя и не следовало т.к. вставлен он не по правилам).
Вы, когда в тетрадке пишите, тоже открываете тетрадку, находите нужную страницу, вписываете одну букву и закрываете тетрадку, а для следующей буквы проделываете ту же самую последовательность?

Ставим курсор
Если число меньше ста печатаем пробел, иначе печатаем сотни
Если число меньше десяти печатаем пробел, иначе печатаем десятки
Печатаем единицы.

Еще вариант:

  1. char buf[3]; // создаем буфер для работы с представлением трехзначного числа
  2. sprintf(buf,“%3d”,value); // заполняем его нужными нам символами
  3. // посимвольно выводим на индикатор
    Впрочем, Kakmyc уже упомянул эту методу.

Ну если

а не всякие там printf и т.п. то алгоритм должен подойти.
А недочеты топикстартер уж сам поправит.

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

//=================================================================
unsigned long TimerOld = 0;          //Предыдущее время Millis для цикла 0,4с
unsigned long TimerTek = 0;          //Текущее время в Millis
unsigned long TimerProshlo = 0;   //Прошедшее с предыдущего время в Millis

byte skor_tek2 = 0;        //скорость текущая
byte skor_dop = 0;         //допустимая скорость
unsigned char skor_zds[6] = {0, 0, 0, 0, 0, 0};
//=================================================================
//конвертируем скорость для вывода на индикатор
//skor_tek2, skor_dop
void dig_convert_skor(unsigned int i_conv1, unsigned int i_conv2)
{
  unsigned char tmp = 0;

  //конвертируем skor_tek2
  tmp = i_conv1 %10;
  skor[2] =  tmp;         //Разряд 3
  
  tmp = i_conv1 /10 %10;
  skor[1] =  tmp;         //Разряд 2
  
  tmp = i_conv1 /100 %10;
  skor[0] =  tmp;         //Разряд 1

  //конвертируем skor_dop
  tmp = i_conv2  %10;
  skor[5] =  tmp;         //Разряд 6
  tmp = i_conv2 /10 %10;
  skor[4] =  tmp;         //Разряд 5
  tmp = i_conv2 /100 %10;
  skor[3] =  tmp;         //Разряд 4 
}
//=================================================================
void loop()
{
     TimerTek = millis();
     TimerProshlo = TimerTek - TimerOld;
     if (TimerProshlo >= 400)//Сообщения отправляемые с циклом 400ms
     {
        //конвертируем скорость для вывода на индикатор
        //skor_tek2, skor_dop
        dig_convert_skor(skor_tek2, skor_dop);
        display_state();            //Обновим состояние дисплея . 
      
        TimerOld = millis(); 
      }//конец if (TimerProshlo >= 400)//Сообщения отправляемые с циклом 400ms
}
//================================================
void display_state() 
{

     //Выводим допустимую скорость. Сотни.
     if (skor[3] > 0)//если разряд больше нуля то выводим сотни
     {
       Serial1.print(char(0x1B));  //подача служебной команды на установку курсора.  
       Serial1.print(char(13));    //установка курсора на 13 знакоместо (0-47 допустимое значение)
       Serial1.print(skor[3]); //отправка допустимая скорость Разряд 4
     }
     else //Иначе тушим разряд.
     {
       Serial1.print(char(0x1B));  //подача служебной команды на установку курсора.  
       Serial1.print(char(13));    //установка курсора на 13 знакоместо (0-47 допустимое значение)
       Serial1.print(" ");         //отправка пробела для очистки знакоместа от преведущей надписи Разряд 4
     }

     //Выводим допустимую скорость. Десятки.
     if ((skor[4] == 0) && (skor[3] == 0))//если разряд десятков равен 0 и разряд сотен равен 0 то тушим разряд.
     {
       Serial1.print(char(0x1B));  //подача служебной команды на установку курсора.  
       Serial1.print(char(14));    //установка курсора на 14 знакоместо (0-47 допустимое значение)
       Serial1.print(" ");         //отправка пробела для очистки знакоместа от преведущей надписи Разряд 5
     }
     else //Иначе выводим разряд десятков
     {
       Serial1.print(char(0x1B));  //подача служебной команды на установку курсора.  
       Serial1.print(char(14));    //установка курсора на 14 знакоместо (0-47 допустимое значение)
       Serial1.print(skor[4]); //отправка отправка допустимая скорость Разряд 5
     }

     //Выводим допустимую скорость. Единицы.
     Serial1.print(char(0x1B));    //подача служебной команды на установку курсора.  
     Serial1.print(char(15));      //установка курсора на 15 знакоместо (0-47 допустимое значение)
     Serial1.print(skor[5]);   //отправка отправка допустимая скорость Разряд 6
}
//================================================

а вы подумайте.
Вы, похоже, не понимаете даже как ваш собственный код работает

Научитесь таки правильно вставлять код, в таком виде обсуждать его невозможно

уже озвучено в ветке - смотрите просто на число. Если оно меньше ста - гасим первую цифру, а если меньше 10-ти - две цифры.

Ну Вы все тут такие быстрые. Я еще свое сообщение отредактировать не успел как зацитировали…))))

извиняюсь за неправильный вывод кода форум новый сразу не разобрался.

Ну, если именно исходный алгоритм лечить, то можно делать так:
0. Присваиваем переменной char c значение " " (пробел)

  1. Последовательно проходя разряды числа слева направо (сотни, десятки, единицы → d) выполняем:
    если d==0 выводим c
    иначе {
    выводим d
    присваиваем переменной c значение “0” (ноль)
    }