Тел. (495) 972-27-12

Вывод аналогового входа на LCD16x2

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY

Вывод аналогового входа на LCD16x2

Сообщение Гена » 20 дек 2013, 11:48

Подскажите, как избавиться от такой проблемы:
Например, вывожу на дисплей показания потенциометра в порядке убывания. При переходе со 100 на 99, показывает не 99, а 990 :(
то есть 3 знак остается. как так?
Гена
 
Сообщения: 6
Зарегистрирован: 20 дек 2013, 11:44

Re: Вывод аналогового входа на LCD16x2

Сообщение Mr.Kubikus » 20 дек 2013, 12:19

Привет! Покажите ваш код. Без исходников сложно ответить.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Вывод аналогового входа на LCD16x2

Сообщение Гена » 20 дек 2013, 13:06

и кстати тут после OFF при переключении на ON на дисплее появляется ONF, то есть старые символы не стираются
если писать в цикле lcd.clear(); то дисплей мигает
и как сделать, чтобы например на дисплее какие-то знаки мигали (то есть при достижении уровня, это значение мигает)?
Спасибо :)

Code: [Выделить всё] [Expand/Collapse]
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


int PotPin = 0;    // The potentiometer is connected to
                      // analog pin 0
                     
int ledPin = 13;     

void setup() {
   lcd.begin(16, 2);
 
}
pinMode(ledPin, OUTPUT);

void loop() {
  // read the potentiometer on A0:
  int sensorReading = analogRead(PotPin);

  int Value = map(sensorReading, 0, 1023, 0, 253);


  lcd.setCursor (5, 0);
  lcd.print(sensorReading);

  lcd.setCursor(5, 1);

  lcd.print(Value);


if value > 1000
{
lcd.setCursor(12, 1);
lcd.Print("ON")

}
else
{
lcd.setCursor(12, 1);
lcd.Print("OFF")
}

}
GeSHi © Codebox Plus
Гена
 
Сообщения: 6
Зарегистрирован: 20 дек 2013, 11:44

Re: Вывод аналогового входа на LCD16x2

Сообщение Mr.Kubikus » 20 дек 2013, 18:27

Эту задачу можно решить путем предварительной очистки знакоместа под цифры. Для этого можно делать вывод трех пробелов:
Code: [Выделить всё] [Expand/Collapse]
lcd.setCursor (5, 0);
lcd.print("   "); // Выводим три пробела для очистки поля
lcd.print(sensorReading);
GeSHi © Codebox Plus
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Вывод аналогового входа на LCD16x2

Сообщение Гена » 20 дек 2013, 21:00

Так дисплей будет писать сигнал после пробелов, а не на их месте?!
Гена
 
Сообщения: 6
Зарегистрирован: 20 дек 2013, 11:44

Re: Вывод аналогового входа на LCD16x2

Сообщение Mr.Kubikus » 20 дек 2013, 21:13

Значит надо возвращать курсор в нужную позицию:
Code: [Выделить всё] [Expand/Collapse]
lcd.setCursor (5, 0);
lcd.print("   "); // Выводим три пробела для очистки поля
lcd.setCursor (5, 0);
lcd.print(sensorReading);
GeSHi © Codebox Plus
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Вывод аналогового входа на LCD16x2

Сообщение Тима » 21 дек 2013, 10:25

Если чистить пробелами и потом на его место выводить значения, экран моргает!
Я решил эту проблему выводом после значения двух пробелов. Это если будет выводиться трехзначное число, если четырехзначное - надо 3 пробела.
Последний раз редактировалось Тима 22 дек 2013, 22:25, всего редактировалось 1 раз.
Тима
 
Сообщения: 119
Зарегистрирован: 16 ноя 2012, 21:03

Re: Вывод аналогового входа на LCD16x2

Сообщение Mr.Kubikus » 21 дек 2013, 19:15

Тоже хороший вариант. В стандартной библиотеке для языка C есть функция printf, которая позволяет выводить форматированный текст. С её помощью можно было организовать вывод значения в поле фиксированной ширины.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Вывод аналогового входа на LCD16x2

Сообщение Гена » 21 дек 2013, 20:32

Можно ли чуть подробнее для чайника ?:)
Гена
 
Сообщения: 6
Зарегистрирован: 20 дек 2013, 11:44

Re: Вывод аналогового входа на LCD16x2

Сообщение Mr.Kubikus » 21 дек 2013, 21:31

printf — обобщённое название семейства функций, используемых для форматного вывода — вывода значений разных типов, отформатированных согласно заданному шаблону. Этот шаблон определяется составленной по специальным правилам строкой (форматной строкой). Функция printf и её производные являются частью стандартной библиотеки Си++.

Запись форматированной строки в строку без ограничения по размеру строки
int sprintf( char *s, const char *format, ... );

Параметры:
format — строка форматирования (формат описан ниже)
s — строка для помещения результата работы функции

Пример использования для Arduino:
Code: [Выделить всё] [Expand/Collapse]
char msg[10]; // Строка, в которую будем помещать результат выполнения printf
int  value = 0; // Переменная для экспериментов

void setup() {
}

void loop() {

  value = 5; 
  sprintf(msg, "%03d", value); // Запишет в msg строку "005"

  value = 55; 
  sprintf(msg, "%03d", value); // Запишет в msg строку "055"

  value = 555; 
  sprintf(msg, "%03d", value); // Запишет в msg строку "555"
 
}
GeSHi © Codebox Plus


Более подробно на википедии
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва


Вернуться в Arduino и Ко. ♥♥♥



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron