LCD 1602

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

LCD 1602

Сообщение mixon46 »

Как на lcd дисплей вывести флоат 16 бит или double 32 бит так что бы вывести только первые 5 бит информации. Низшие разряды стереть
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: LCD 1602

Сообщение veso74 »

Код: Выделить всё

float ff = 1234.56;
...

Код: Выделить всё

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

Код: Выделить всё

lcd.print((long)(ff));
Arduino Cast:
https://www.arduino.cc/en/reference/cast
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: LCD 1602

Сообщение mixon46 »

Это переводит из одного типа данных в другой? Мне нужно отсечь лишние цыфры после запятой
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: LCD 1602

Сообщение veso74 »

Приведите пример. Не могу понять, что еще должно быть.
Теперь отображается на дисплее целая часть (1234) из 1234,56 без явной трансформации (преобразование) типа.
Какие 5 бит (у float) имеете в виду?
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: LCD 1602

Сообщение mixon46 »

pressure. getPressure (P, T) ; // возвращает значение давления в mbar.
// на дисплее отображает полностью double 32 бита. А нужно только 5 цифр
74LS00
Друг Кота
Сообщения: 7656
Зарегистрирован: Вс июл 24, 2011 11:38:09
Контактная информация:

Re: LCD 1602

Сообщение 74LS00 »

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

Я делал через dtostrf(), но нужно верно указать размерность. Если строка будет слишком короткой она всё равно будет показана верно, просто гдето в другой части экрана картинку покосит. Но если задать слишком большие размеры, то просто будет отжирать лишние байты.
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: LCD 1602

Сообщение veso74 »

Есьт большая разница между 5 битами и 5 цифрами :).

Код: Выделить всё

float ff = pressure.getPressure (P, T);
long xx = 0;
например:

Код: Выделить всё

ff = 1234567.89

Код: Выделить всё

xx = (long) ff;
xx %= 100000;
lcd.print(xx);
ответ: 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.
Последний раз редактировалось veso74 Ср июл 07, 2021 20:47:47, всего редактировалось 1 раз.
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: LCD 1602

Сообщение mixon46 »

Что то не понял
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: LCD 1602

Сообщение veso74 »

Пример программы. Запустить как есть. Потом извлеките нужные Вам строки и заместите 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);
}
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: LCD 1602

Сообщение Аlex »

sprintf Вам в помощь.
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Re: LCD 1602

Сообщение Alex_641 »

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

Добавлено after 17 minutes 46 seconds:
А что бы отбросить младшие разряды, нужно число разделить на 10 в степени разрядов которые нужно отбросить ... О чём речь ?
Не спрашивай по ком звонит колокол, он звонит по тебе !
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: LCD 1602

Сообщение mixon46 »

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

Добавлено after 4 minutes 31 second:
[uquote="Аlex",url="/forum/viewtopic.php?p=4058077#p4058077"]sprintf Вам в помощь.[/uquote]
Переделать в строку и вывести так что ли?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: LCD 1602

Сообщение BOB51 »

А кто мешает предварительно обработку данных сделать?
Перед тем, как скормить результат стандартной библиотеке.
8)
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: LCD 1602

Сообщение Dimon456 »

mixon46 писал(а):что бы вывести только первые 5 бит информации. Низшие разряды стереть
Старшие 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;
в otvet как раз и будет старшие 5 бит float
Перефразируйте свой вопрос, а то я и из середины float могу 5 бит вытащить.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: LCD 1602

Сообщение Аlex »

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

Добавлено after 3 minutes 36 seconds:
[uquote="mixon46",url="/forum/viewtopic.php?p=4058015#p4058015"]Что то не понял[/uquote] Кстати, Вас тоже никто не понимает.
Сначала Вы говорите про 5 бит, потом про 5 цифр.
Вас просили - приведите пример. Вы не приводите.
Одни догадки ...
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: LCD 1602

Сообщение mixon46 »

[uquote="Аlex",url="/forum/viewtopic.php?p=4058394#p4058394"]
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
veso74
Поставщик валерьянки для Кота
Сообщения: 1905
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: LCD 1602

Сообщение veso74 »

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

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

и будет на екране 748.84
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: LCD 1602

Сообщение mixon46 »

[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
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: LCD 1602

Сообщение BOB51 »

Потому что искать надо в базовой библиотеке
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)
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: LCD 1602

Сообщение mixon46 »

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

Вернуться в «Arduino»