LCD 1602
Как на lcd дисплей вывести флоат 16 бит или double 32 бит так что бы вывести только первые 5 бит информации. Низшие разряды стереть
- Реклама
Код: Выделить всё
float ff = 1234.56;Код: Выделить всё
lcd.print((int)(ff));Код: Выделить всё
lcd.print((long)(ff));https://www.arduino.cc/en/reference/cast
Это переводит из одного типа данных в другой? Мне нужно отсечь лишние цыфры после запятой
Приведите пример. Не могу понять, что еще должно быть.
Теперь отображается на дисплее целая часть (1234) из 1234,56 без явной трансформации (преобразование) типа.
Какие 5 бит (у float) имеете в виду?
Теперь отображается на дисплее целая часть (1234) из 1234,56 без явной трансформации (преобразование) типа.
Какие 5 бит (у float) имеете в виду?
pressure. getPressure (P, T) ; // возвращает значение давления в mbar.
// на дисплее отображает полностью double 32 бита. А нужно только 5 цифр
// на дисплее отображает полностью double 32 бита. А нужно только 5 цифр
- Реклама
- Сообщения: 7722
- Зарегистрирован: Вс июл 24, 2011 11:38:09
Arduino умеет выводить только целые числа. Видимо зависит от библиотеки экрана.
Я делал через dtostrf(), но нужно верно указать размерность. Если строка будет слишком короткой она всё равно будет показана верно, просто гдето в другой части экрана картинку покосит. Но если задать слишком большие размеры, то просто будет отжирать лишние байты.
Я делал через dtostrf(), но нужно верно указать размерность. Если строка будет слишком короткой она всё равно будет показана верно, просто гдето в другой части экрана картинку покосит. Но если задать слишком большие размеры, то просто будет отжирать лишние байты.
Есьт большая разница между 5 битами и 5 цифрами
.
например:
ответ: 34567
---
[uquote="74LS00",url="/forum/viewtopic.php?p=4058005#p4058005"]Arduino умеет выводить только целые числа...[/uquote]
Arduino выводить много типов, вкл double (int = 2). Посмотрите Print.h в C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino.
Код: Выделить всё
float ff = pressure.getPressure (P, T);
long xx = 0;Код: Выделить всё
ff = 1234567.89Код: Выделить всё
xx = (long) ff;
xx %= 100000;
lcd.print(xx);---
[uquote="74LS00",url="/forum/viewtopic.php?p=4058005#p4058005"]Arduino умеет выводить только целые числа...[/uquote]
Arduino выводить много типов, вкл double (int = 2). Посмотрите Print.h в C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino.
Последний раз редактировалось veso74 Ср июл 07, 2021 20:47:47, всего редактировалось 1 раз.
Пример программы. Запустить как есть. Потом извлеките нужные Вам строки и заместите ff с число, полученного из Вашей функции pressure.
(я частично пользуюсь переводчиком БГ-РУ)
(я частично пользуюсь переводчиком БГ-РУ)
Спойлер
Код: Выделить всё
#include <LiquidCrystal.h>
float ff = 1234567.89;
long xx;
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print(ff);
lcd.setCursor(0, 1);
xx = (long) ff;
xx %= 100000;
lcd.print(xx);
}- Сообщения: 2314
- Зарегистрирован: Вт янв 26, 2021 22:33:21
Зачем вообще флоат использовать ?
Добавлено after 17 minutes 46 seconds:
А что бы отбросить младшие разряды, нужно число разделить на 10 в степени разрядов которые нужно отбросить ... О чём речь ?
Добавлено after 17 minutes 46 seconds:
А что бы отбросить младшие разряды, нужно число разделить на 10 в степени разрядов которые нужно отбросить ... О чём речь ?
Не спрашивай по ком звонит колокол, он звонит по тебе !
Я не использую float. Он идет из методов библиотеки для барометрического датчика. И выдает результат в double типе данных
Добавлено after 4 minutes 31 second:
[uquote="Аlex",url="/forum/viewtopic.php?p=4058077#p4058077"]sprintf Вам в помощь.[/uquote]
Переделать в строку и вывести так что ли?
Добавлено after 4 minutes 31 second:
[uquote="Аlex",url="/forum/viewtopic.php?p=4058077#p4058077"]sprintf Вам в помощь.[/uquote]
Переделать в строку и вывести так что ли?
А кто мешает предварительно обработку данных сделать?
Перед тем, как скормить результат стандартной библиотеке.

Перед тем, как скормить результат стандартной библиотеке.
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Старшие 5 бит?mixon46 писал(а):что бы вывести только первые 5 бит информации. Низшие разряды стереть
В СИ есть инструмент
Спойлер
Код: Выделить всё
union BytByte_32 {
struct {
uint16_t ostalnoe;
unsigned bm: 11;
unsigned bs: 5;
} bit;
volatile float byte;
}__attribute__((packed));
union BytByte_32 myBByte_32;
float ff = 1234.56;
unsigned char otvet;
myBByte_32.byte = ff;
otvet = myBByte_32.bit.bs;А как иначе Вы выводите переменные ?mixon46 писал(а):Переделать в строку и вывести так что ли?
Добавлено after 3 minutes 36 seconds:
[uquote="mixon46",url="/forum/viewtopic.php?p=4058015#p4058015"]Что то не понял[/uquote] Кстати, Вас тоже никто не понимает.
Сначала Вы говорите про 5 бит, потом про 5 цифр.
Вас просили - приведите пример. Вы не приводите.
Одни догадки ...
[uquote="Аlex",url="/forum/viewtopic.php?p=4058394#p4058394"]
Добавлено after 3 minutes 36 seconds:
[uquote="mixon46",url="/forum/viewtopic.php?p=4058015#p4058015"]Что то не понял[/uquote] Кстати, Вас тоже никто не понимает.
Сначала Вы говорите про 5 бит, потом про 5 цифр.
Вас просили - приведите пример. Вы не приводите.
Одни догадки ...[/uquote]
В смысле догадки. Вот например.
lcd. print (P, DEC)
Вывожу переменную double в которой хранится значение давления на дисплей в десятичном виде. 748.84774730840000000090000909000000. Так ведь? А мне надо отсечь лишние цыфры после запятой. Так? Оставить только 748.84
А как иначе Вы выводите переменные ?mixon46 писал(а):Переделать в строку и вывести так что ли?
Добавлено after 3 minutes 36 seconds:
[uquote="mixon46",url="/forum/viewtopic.php?p=4058015#p4058015"]Что то не понял[/uquote] Кстати, Вас тоже никто не понимает.
Сначала Вы говорите про 5 бит, потом про 5 цифр.
Вас просили - приведите пример. Вы не приводите.
Одни догадки ...[/uquote]
В смысле догадки. Вот например.
lcd. print (P, DEC)
Вывожу переменную double в которой хранится значение давления на дисплей в десятичном виде. 748.84774730840000000090000909000000. Так ведь? А мне надо отсечь лишние цыфры после запятой. Так? Оставить только 748.84
ето переменная для pressure:
double ppp = 748.84774730840000000090000909000000;
для печати дисплея добавьте просто
lcd.print(ppp, 2);
и будет на екране 748.84
double ppp = 748.84774730840000000090000909000000;
для печати дисплея добавьте просто
lcd.print(ppp, 2);
и будет на екране 748.84
[uquote="veso74",url="/forum/viewtopic.php?p=4058426#p4058426"]ето переменная для pressure:
double ppp = 748.84774730840000000090000909000000;
для печати дисплея добавьте просто
lcd.print(ppp, 2);
и будет на екране 748.84[/uquote]
Да здорово. Это работает.
Подскажи а почему команда lcd.print () есть. А в библиотеке я ее не могу найти. Я только изучаю как это все работает. И мне интересны все взаимосвязи языка c#. Библиотека LicuidCrystal I2C
double ppp = 748.84774730840000000090000909000000;
для печати дисплея добавьте просто
lcd.print(ppp, 2);
и будет на екране 748.84[/uquote]
Да здорово. Это работает.
Подскажи а почему команда lcd.print () есть. А в библиотеке я ее не могу найти. Я только изучаю как это все работает. И мне интересны все взаимосвязи языка c#. Библиотека LicuidCrystal I2C
Потому что искать надо в базовой библиотеке
file:///C:/Arduino/reference/www.arduino.cc/en/Reference/Libraries.html
и далее
file:///C:/Arduino/reference/www.arduino.cc/en/Reference/LiquidCrystal.html
собственно это встроенная библиотека.
А LicuidCrystal I2C обеспечивает транспорт для ЖКИ с I2C интерфейсом, но использует методы из базовой библиотеки.
Да и в ардуине не С#, а Си/С++ используется - их и надо изучать.

file:///C:/Arduino/reference/www.arduino.cc/en/Reference/Libraries.html
и далее
file:///C:/Arduino/reference/www.arduino.cc/en/Reference/LiquidCrystal.html
собственно это встроенная библиотека.
А LicuidCrystal I2C обеспечивает транспорт для ЖКИ с I2C интерфейсом, но использует методы из базовой библиотеки.
Да и в ардуине не С#, а Си/С++ используется - их и надо изучать.


