Нули в разрядах для семисегментного индикатора
- Войдите на сайт для отправки комментариев
Сб, 08/10/2022 - 01:32
Здравствуйте.
Нужно на 4 - х разрядный индикатор выводить числа, только если число 123, то должно быть 0123, число 25 - значит 0025, то есть нули должны быть.
byte digit[4] = {0, 0, 0, 0}; uint16_t num = 1; digit[3] = num % 10 % 10; digit[2] = num / 10 % 10; digit[1] = num / 100 % 10; digit[0] = num / 1000 % 10; Serial.println(digit[0]); Serial.println(digit[1]); Serial.println(digit[2]); Serial.println(digit[3]);
Так будет правильно?
Правильно будет sprintf() c форматом "%04d"
Так будет правильно?
А зачем два раза ?
Так будет правильно?
А зачем два раза ?
Для непонятливых видимо )))
Правильно будет sprintf() c форматом "%04d"
Деда, залогинься. Внуки балутся. Как sprintf для семисегментников?))
Правильно будет sprintf() c форматом "%04d"
Деда, залогинься. Внуки балутся. Как sprintf для семисегментников?))
а шо не так? сначала спринтом в буфер - оттуда в семисегментник. Я, правда, через itoa() делал, так тоже можно.
Я тоже через itoa()
Вроде любая библиотека для семисегментника позволяет выводить как с нулями, так и без них
Вроде любая библиотека для семисегментника позволяет выводить как с нулями, так и без них
у Деда своя, сейчас он нам скажет
А зачем два раза ?
Опечатка. Спасибо.
Почему получаю 49 50 51 52?
Ну sprintf может оказаться очень тяжело для МК. У AVR sprintf не работает с числами с плавающей точкой и, возможно, именно поэтому не слишком объемный. А для stm32, например, он добавляет к коду 12 кбайт.
В общем, предложенный в исходном сообщении вариант не так уж плох, разумеется, если убрать из него лишние операции взятия по модулю. Недостаток - несколько обращений к функции печати.
Мне кажется, лучше сделать массив на 5 char, заполнить его символами, т.е: digit[3] = (num % 10) + '0'; и распечатать как строку одним вызовом функции печати.
Правильно будет sprintf() c форматом "%04d"
Что значит "%04d" ?
А зачем два раза ?
Опечатка. Спасибо.
Почему получаю 49 50 51 52?
Потому что преобразуете в символы, а печатаете как числа. (почитайте про разницу между символами и числами)
Ну sprintf может оказаться очень тяжело для МК. У AVR sprintf не работает с числами с плавающей точкой и, возможно, именно поэтому не слишком объемный. А для stm32, например, он добавляет к коду 12 кбайт.
В общем, предложенный в исходном сообщении вариант не так уж плох, разумеется, если убрать из него лишние операции взятия по модулю. Недостаток - несколько обращений к функции печати.
Мне кажется, лучше сделать массив на 5 char, заполнить его символами, т.е: digit[3] = (num % 10) + '0'; и распечатать как строку одним вызовом функции печати.
Я не буду печатать, буду выводить на семисегментный индикатор
Спасибо.
Потому что преобразуете в символы, а печатаете как числа. (почитайте про разницу между символами и числами)
Что - то не тот у меня...
а шо не так? сначала спринтом в буфер - оттуда в семисегментник.
А я так тупо обычный printf к семисегментнику напрямую привязывал. Очень удобно, если ресурсов хватает на prinf.