lcd

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

доброго времени 

Подскажите пожалусто как ограничеть значения in_volt и out_volt с точностью до сотых 0.00

а то выдает на дисплей полный ответ 0.000000000 так на дисплее места не хватит на все что надо вывести на дисплей.

 

[code]
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

const int PWM_PIN = 3;  // выход расходомер 
const int AIN_PIN = A0; // вход расходомер
int val = 0;   // переменная для хранения сигнала входящего расходомера

  byte VAF[256] //таблица выход
{
205,202,198,195,192,189,185,182,179,176,
172,169,167,165,164,162,160,158,157,155,
153,151,150,148,146,145,144,142,141,140,
138,136,134,133,132,130,129,128,126,125,
123,122,121,120,119,118,117,116,115,114,
113,112,111,110,109,108,107,106,105,104,
103,102,101,100,99,98,96,95,94,93,
92,91,90,89,88,87,86,85,84,83,
82,81,80,79,78,77,76,75,74,73,
72,71,70,70,69,69,68,67,67,66,
66,65,65,64,63,63,62,62,61,60,
60,59,58,58,57,57,56,56,55,54,
54,53,52,52,51,51,50,49,49,48,
48,47,46,46,45,44,44,43,43,42,
41,41,40,40,40,39,39,39,38,38,
38,37,37,37,36,36,36,35,35,34,
34,34,33,33,33,32,32,32,31,31,
30,30,30,30,30,30,29,29,29,28,
28,28,27,27,26,26,26,25,25,25,      
24,24,24,23,23,23,22,22,21,21,
21,20,20,20,19,19,19,18,18,18,
17,17,16,16,16,15,15,15,14,14,
14,14,14,14,13,13,13,12,12,12,
11,11,11,10,10,9,9,8,8,7,
7,6,6,5,5,4,4,3,3,2,
2,1,1,1,0,0
};


void setup()
{ 
lcd.begin(16, 2);
lcd.print("\x50\A\C\X\O\xE0\ \B\O\xA4\xE0\xA9\X\A");
lcd.setCursor(0, 1);
lcd.print("\B\o\xBB\xC4\x89\ \xDA\   \xD9\     ");
 
TCCR2B = TCCR2B & 0b11111000 | 0x02;

pinMode (PWM_PIN, OUTPUT); // сконфигурировать  контакт как выход

pinMode (AIN_PIN, INPUT);  // сконфигурировать контакт как вход

}

void loop() 
{
 int val = analogRead ( AIN_PIN );
 int inSignal = map (val,0,1023,0,255);
 analogWrite (PWM_PIN,VAF[inSignal]);

  float in_volt = (inSignal*0.01953125);
  float out_volt = (VAF[inSignal]*0.01953125);
  lcd.setCursor (7,1);
  lcd.print (in_volt);
  lcd.setCursor (11,1);
  lcd.print (out_volt);
 }

[/code]

и еще как замедлить обновление дисплея но не трогая программу по работе с массивом

bwn
Offline
Зарегистрирован: 25.08.2014

lcd.print (out_volt, 2);

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

так я пробовал не помогает почемуто

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:
lcd.print (out_volt, 2);

А - lcd.println (out_volt, 2); ?

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

bwn пишет:
lcd.print (out_volt, 2);

А - lcd.println (out_volt, 2); ?

А ln здесь при чем? Куда строку переводить?

bwn
Offline
Зарегистрирован: 25.08.2014

yrik8407 пишет:
так я пробовал не помогает почемуто

Попробуйте библиотеку заменить, у меня работает без проблем.

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

bwn пишет:

yrik8407 пишет:
так я пробовал не помогает почемуто

Попробуйте библиотеку заменить, у меня работает без проблем.


а какую библиотеку использовать

bwn
Offline
Зарегистрирован: 25.08.2014

Та найдите любую другую и попробуйте. Может какая левая попалась.

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

вроде оригинальную использую .
вечером поищу

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

ua6em пишет:

bwn пишет:
lcd.print (out_volt, 2);

А - lcd.println (out_volt, 2); ?

А ln здесь при чем? Куда строку переводить?

не переводить а проверить коды перевода строк отображает...
У меня код работает, правда для проверки чуток правил
 

//#include <LiquidCrystal.h>
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
 
//LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

const int PWM_PIN = 13;  // выход расходомер 
const int AIN_PIN = A0; // вход расходомер
int val = 73;   // переменная для хранения сигнала входящего расходомера

  byte VAF[256] //таблица выход
{
205,202,198,195,192,189,185,182,179,176,
172,169,167,165,164,162,160,158,157,155,
153,151,150,148,146,145,144,142,141,140,
138,136,134,133,132,130,129,128,126,125,
123,122,121,120,119,118,117,116,115,114,
113,112,111,110,109,108,107,106,105,104,
103,102,101,100,99,98,96,95,94,93,
92,91,90,89,88,87,86,85,84,83,
82,81,80,79,78,77,76,75,74,73,
72,71,70,70,69,69,68,67,67,66,
66,65,65,64,63,63,62,62,61,60,
60,59,58,58,57,57,56,56,55,54,
54,53,52,52,51,51,50,49,49,48,
48,47,46,46,45,44,44,43,43,42,
41,41,40,40,40,39,39,39,38,38,
38,37,37,37,36,36,36,35,35,34,
34,34,33,33,33,32,32,32,31,31,
30,30,30,30,30,30,29,29,29,28,
28,28,27,27,26,26,26,25,25,25,      
24,24,24,23,23,23,22,22,21,21,
21,20,20,20,19,19,19,18,18,18,
17,17,16,16,16,15,15,15,14,14,
14,14,14,14,13,13,13,12,12,12,
11,11,11,10,10,9,9,8,8,7,
7,6,6,5,5,4,4,3,3,2,
2,1,1,1,0,0
};


void setup()
{ 
lcd.begin(16, 2);
//lcd.print("\x50\A\C\X\O\xE0\ \B\O\xA4\xE0\xA9\X\A");
lcd.print("RASHOD VOZDUHA");
lcd.setCursor(0, 1);
//lcd.print("\B\o\xBB\xC4\x89\ \xDA\   \xD9\     ");
 
TCCR2B = TCCR2B & 0b11111000 | 0x02;

pinMode (PWM_PIN, OUTPUT); // сконфигурировать  контакт как выход

pinMode (AIN_PIN, INPUT);  // сконфигурировать контакт как вход

}

void loop() 
{
 int val = val + analogRead ( AIN_PIN );
 int inSignal = map (val,0,1023,0,255);
 analogWrite (PWM_PIN,VAF[inSignal]);

  float in_volt = (inSignal*0.01953125);
  float out_volt = (VAF[inSignal]*0.01953125);
  lcd.setCursor (1,1);
  lcd.print(in_volt,2);
  lcd.setCursor (8,1);
  lcd.print (out_volt,2);
  delay(2000);
 }

 

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

не переводить а проверить коды перевода строк отображает...
У меня код работает, правда для проверки чуток правил

Возможно. У меня все I2C, с библиотекой ТС не проверить. В корректной библиотеке работать обязано.

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

а может от дисплея зависит ?
у меня амтел 1602
самое главное я сейчас для себя заметил что не все прочитал по документации наверное надо сначало изучить там все
я только учусь
спасибо что помогаете

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

и подскажите что такое ТС очень часто встречается

bwn
Offline
Зарегистрирован: 25.08.2014

ТС = topicStarter

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

все понятно)
надо идти домашние дела делать вечером буду дальше разбираться
и с наступающим

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

ДОБРОГО ВРЕМЕНИ вот что у меня получилось

[code]
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

const int PWM_PIN = 3;  // выход расходомер 
const int AIN_PIN = A0; // вход расходомер
int val = 0;   // переменная для хранения сигнала входящего расходомера

  byte VAF[256] //таблица выход
{
205,202,198,195,192,189,185,182,179,176,
172,169,167,165,164,162,160,158,157,155,
153,151,150,148,146,145,144,142,141,140,
138,136,134,133,132,130,129,128,126,125,
123,122,121,120,119,118,117,116,115,114,
113,112,111,110,109,108,107,106,105,104,
103,102,101,100,99,98,96,95,94,93,
92,91,90,89,88,87,86,85,84,83,
82,81,80,79,78,77,76,75,74,73,
72,71,70,70,69,69,68,67,67,66,
66,65,65,64,63,63,62,62,61,60,
60,59,58,58,57,57,56,56,55,54,
54,53,52,52,51,51,50,49,49,48,
48,47,46,46,45,44,44,43,43,42,
41,41,40,40,40,39,39,39,38,38,
38,37,37,37,36,36,36,35,35,34,
34,34,33,33,33,32,32,32,31,31,
30,30,30,30,30,30,29,29,29,28,
28,28,27,27,26,26,26,25,25,25,      
24,24,24,23,23,23,22,22,21,21,
21,20,20,20,19,19,19,18,18,18,
17,17,16,16,16,15,15,15,14,14,
14,14,14,14,13,13,13,12,12,12,
11,11,11,10,10,9,9,8,8,7,
7,6,6,5,5,4,4,3,3,2,
2,1,1,1,0,0
};


void setup()
{ 
lcd.begin(16, 2);

lcd.print("\x50\A\C\X\O\xE0\ \B\O\xA4\xE0\xA9\X\A");

TCCR2B = TCCR2B & 0b11111000 | 0x02;

pinMode (PWM_PIN, OUTPUT); // сконфигурировать  контакт как выход

pinMode (AIN_PIN, INPUT);  // сконфигурировать контакт как вход

}

void loop() 
{
 int val = analogRead ( AIN_PIN );
 int inSignal = map (val,0,1023,0,255);
 analogWrite (PWM_PIN,VAF[inSignal]);
{
  float vvolt = (inSignal*0.01953125);
  float ivolt = (VAF[inSignal]*0.01953125);
  
 lcd.setCursor(0, 1);
 lcd.print("\B\o\xBB\xC4\x89\xDA\    \xD9\      ");
 
  lcd.setCursor (6,1);
  lcd.print (vvolt);
  lcd.setCursor (11,1);
  lcd.print (ivolt);
 }
 }
[/code]

но есть еще вопрос  как сделать задержку для вывода инфо на дисплей но чтоб не тормазила программа с входящим и выходящим сигналом

почемуто слова на дисплей выводятся нормально а цифры постоянно мерцают