LCD 1602
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1905
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: LCD 1602
Код: Выделить всё
float ff = 1234.56;Код: Выделить всё
lcd.print((int)(ff));Код: Выделить всё
lcd.print((long)(ff));https://www.arduino.cc/en/reference/cast
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: LCD 1602
Это переводит из одного типа данных в другой? Мне нужно отсечь лишние цыфры после запятой
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1905
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: LCD 1602
Приведите пример. Не могу понять, что еще должно быть.
Теперь отображается на дисплее целая часть (1234) из 1234,56 без явной трансформации (преобразование) типа.
Какие 5 бит (у float) имеете в виду?
Теперь отображается на дисплее целая часть (1234) из 1234,56 без явной трансформации (преобразование) типа.
Какие 5 бит (у float) имеете в виду?
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: LCD 1602
pressure. getPressure (P, T) ; // возвращает значение давления в mbar.
// на дисплее отображает полностью double 32 бита. А нужно только 5 цифр
// на дисплее отображает полностью double 32 бита. А нужно только 5 цифр
Re: LCD 1602
Arduino умеет выводить только целые числа. Видимо зависит от библиотеки экрана.
Я делал через dtostrf(), но нужно верно указать размерность. Если строка будет слишком короткой она всё равно будет показана верно, просто гдето в другой части экрана картинку покосит. Но если задать слишком большие размеры, то просто будет отжирать лишние байты.
Я делал через dtostrf(), но нужно верно указать размерность. Если строка будет слишком короткой она всё равно будет показана верно, просто гдето в другой части экрана картинку покосит. Но если задать слишком большие размеры, то просто будет отжирать лишние байты.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1905
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: LCD 1602
Есьт большая разница между 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 раз.
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: LCD 1602
Что то не понял
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1905
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: LCD 1602
Пример программы. Запустить как есть. Потом извлеките нужные Вам строки и заместите 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
sprintf Вам в помощь.
Re: LCD 1602
Зачем вообще флоат использовать ?
Добавлено after 17 minutes 46 seconds:
А что бы отбросить младшие разряды, нужно число разделить на 10 в степени разрядов которые нужно отбросить ... О чём речь ?
Добавлено after 17 minutes 46 seconds:
А что бы отбросить младшие разряды, нужно число разделить на 10 в степени разрядов которые нужно отбросить ... О чём речь ?
Не спрашивай по ком звонит колокол, он звонит по тебе !
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: LCD 1602
Я не использую 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]
Переделать в строку и вывести так что ли?
Re: LCD 1602
А кто мешает предварительно обработку данных сделать?
Перед тем, как скормить результат стандартной библиотеке.

Перед тем, как скормить результат стандартной библиотеке.
Re: LCD 1602
Старшие 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;- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: LCD 1602
А как иначе Вы выводите переменные ?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
[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
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1905
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: LCD 1602
ето переменная для pressure:
double ppp = 748.84774730840000000090000909000000;
для печати дисплея добавьте просто
lcd.print(ppp, 2);
и будет на екране 748.84
double ppp = 748.84774730840000000090000909000000;
для печати дисплея добавьте просто
lcd.print(ppp, 2);
и будет на екране 748.84
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: LCD 1602
[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
Re: LCD 1602
Потому что искать надо в базовой библиотеке
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 интерфейсом, но использует методы из базовой библиотеки.
Да и в ардуине не С#, а Си/С++ используется - их и надо изучать.
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: LCD 1602
Не нашёл этого метода в библиотеке liquidqcystal