Доброго времени суток. Такая проблемка. Нужно вывести на индикатор с отправкой данных по 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 - два первых.
@alexval2007 , посмотрел Ваш код (хотя и не следовало т.к. вставлен он не по правилам).
Вы, когда в тетрадке пишите, тоже открываете тетрадку, находите нужную страницу, вписываете одну букву и закрываете тетрадку, а для следующей буквы проделываете ту же самую последовательность?
Ставим курсор
Если число меньше ста печатаем пробел, иначе печатаем сотни
Если число меньше десяти печатаем пробел, иначе печатаем десятки
Печатаем единицы.
спасибо вы помогли направив меня в верный путь. Не знаю насколько правильно я это написал но оно заработало. Возможно это можно сделать проще и лучше. С радость и благодарностью приму советы.
//=================================================================
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
}
//================================================
Ну, если именно исходный алгоритм лечить, то можно делать так:
0. Присваиваем переменной char c значение " " (пробел)
Последовательно проходя разряды числа слева направо (сотни, десятки, единицы → d) выполняем:
если d==0 выводим c
иначе {
выводим d
присваиваем переменной c значение “0” (ноль)
}