Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

LCD 1602

Ср июл 07, 2021 17:14:42

Как на lcd дисплей вывести флоат 16 бит или double 32 бит так что бы вывести только первые 5 бит информации. Низшие разряды стереть

Re: LCD 1602

Ср июл 07, 2021 18:36:45

Код:
float ff = 1234.56;

...
Код:
lcd.print((int)(ff));

или для большего числа
Код:
lcd.print((long)(ff));

Arduino Cast:
https://www.arduino.cc/en/reference/cast

Re: LCD 1602

Ср июл 07, 2021 19:12:09

Это переводит из одного типа данных в другой? Мне нужно отсечь лишние цыфры после запятой

Re: LCD 1602

Ср июл 07, 2021 19:53:09

Приведите пример. Не могу понять, что еще должно быть.
Теперь отображается на дисплее целая часть (1234) из 1234,56 без явной трансформации (преобразование) типа.
Какие 5 бит (у float) имеете в виду?

Re: LCD 1602

Ср июл 07, 2021 20:03:15

pressure. getPressure (P, T) ; // возвращает значение давления в mbar.
// на дисплее отображает полностью double 32 бита. А нужно только 5 цифр

Re: LCD 1602

Ср июл 07, 2021 20:18:17

Arduino умеет выводить только целые числа. Видимо зависит от библиотеки экрана.

Я делал через dtostrf(), но нужно верно указать размерность. Если строка будет слишком короткой она всё равно будет показана верно, просто гдето в другой части экрана картинку покосит. Но если задать слишком большие размеры, то просто будет отжирать лишние байты.

Re: LCD 1602

Ср июл 07, 2021 20:24:49

Есьт большая разница между 5 битами и 5 цифрами :).
Код:
float ff = pressure.getPressure (P, T);
long xx = 0;

например:
Код:
ff = 1234567.89

Код:
xx = (long) ff;
xx %= 100000;
lcd.print(xx);

ответ: 34567
---
Arduino умеет выводить только целые числа...

Arduino выводить много типов, вкл double (int = 2). Посмотрите Print.h в C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino.
Последний раз редактировалось veso74 Ср июл 07, 2021 20:47:47, всего редактировалось 1 раз.

Re: LCD 1602

Ср июл 07, 2021 20:41:27

Что то не понял

Re: LCD 1602

Ср июл 07, 2021 20:46:25

Пример программы. Запустить как есть. Потом извлеките нужные Вам строки и заместите ff с число, полученного из Вашей функции pressure.
(я частично пользуюсь переводчиком БГ-РУ)

Re: LCD 1602

Ср июл 07, 2021 22:14:16

sprintf Вам в помощь.

Re: LCD 1602

Чт июл 08, 2021 00:09:44

Зачем вообще флоат использовать ?

Добавлено after 17 minutes 46 seconds:
А что бы отбросить младшие разряды, нужно число разделить на 10 в степени разрядов которые нужно отбросить ... О чём речь ?

Re: LCD 1602

Чт июл 08, 2021 06:28:12

Я не использую float. Он идет из методов библиотеки для барометрического датчика. И выдает результат в double типе данных

Добавлено after 4 minutes 31 second:
sprintf Вам в помощь.

Переделать в строку и вывести так что ли?

Re: LCD 1602

Чт июл 08, 2021 12:28:28

А кто мешает предварительно обработку данных сделать?
Перед тем, как скормить результат стандартной библиотеке.
8)

Re: LCD 1602

Чт июл 08, 2021 19:16:44

mixon46 писал(а):что бы вывести только первые 5 бит информации. Низшие разряды стереть
Старшие 5 бит?
В СИ есть инструмент
Перефразируйте свой вопрос, а то я и из середины float могу 5 бит вытащить.

Re: LCD 1602

Чт июл 08, 2021 23:36:58

mixon46 писал(а):Переделать в строку и вывести так что ли?
А как иначе Вы выводите переменные ?

Добавлено after 3 minutes 36 seconds:
Что то не понял
Кстати, Вас тоже никто не понимает.
Сначала Вы говорите про 5 бит, потом про 5 цифр.
Вас просили - приведите пример. Вы не приводите.
Одни догадки ...

Re: LCD 1602

Пт июл 09, 2021 06:58:53

mixon46 писал(а):Переделать в строку и вывести так что ли?
А как иначе Вы выводите переменные ?

Добавлено after 3 minutes 36 seconds:
Что то не понял
Кстати, Вас тоже никто не понимает.
Сначала Вы говорите про 5 бит, потом про 5 цифр.
Вас просили - приведите пример. Вы не приводите.
Одни догадки ...

В смысле догадки. Вот например.
lcd. print (P, DEC)

Вывожу переменную double в которой хранится значение давления на дисплей в десятичном виде. 748.84774730840000000090000909000000. Так ведь? А мне надо отсечь лишние цыфры после запятой. Так? Оставить только 748.84

Re: LCD 1602

Пт июл 09, 2021 07:08:14

ето переменная для pressure:
double ppp = 748.84774730840000000090000909000000;

для печати дисплея добавьте просто
lcd.print(ppp, 2);

и будет на екране 748.84

Re: LCD 1602

Пт июл 09, 2021 07:31:23

ето переменная для pressure:
double ppp = 748.84774730840000000090000909000000;

для печати дисплея добавьте просто
lcd.print(ppp, 2);

и будет на екране 748.84

Да здорово. Это работает.

Подскажи а почему команда lcd.print () есть. А в библиотеке я ее не могу найти. Я только изучаю как это все работает. И мне интересны все взаимосвязи языка c#. Библиотека LicuidCrystal I2C

Re: LCD 1602

Пт июл 09, 2021 12:11:15

Потому что искать надо в базовой библиотеке
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 интерфейсом, но использует методы из базовой библиотеки.
Да и в ардуине не С#, а Си/С++ используется - их и надо изучать.
8)

Re: LCD 1602

Сб июл 10, 2021 17:32:17

Не нашёл этого метода в библиотеке liquidqcystal
Ответить