Вывод аналогового входа на LCD16x2
Вывод аналогового входа на LCD16x2
Подскажите, как избавиться от такой проблемы:
Например, вывожу на дисплей показания потенциометра в порядке убывания. При переходе со 100 на 99, показывает не 99, а 990
то есть 3 знак остается. как так?
Например, вывожу на дисплей показания потенциометра в порядке убывания. При переходе со 100 на 99, показывает не 99, а 990
то есть 3 знак остается. как так?
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Вывод аналогового входа на LCD16x2
Привет! Покажите ваш код. Без исходников сложно ответить.
Re: Вывод аналогового входа на LCD16x2
и кстати тут после OFF при переключении на ON на дисплее появляется ONF, то есть старые символы не стираются
если писать в цикле lcd.clear(); то дисплей мигает
и как сделать, чтобы например на дисплее какие-то знаки мигали (то есть при достижении уровня, это значение мигает)?
Спасибо
если писать в цикле lcd.clear(); то дисплей мигает
и как сделать, чтобы например на дисплее какие-то знаки мигали (то есть при достижении уровня, это значение мигает)?
Спасибо
Код: Выделить всё
#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")
}
}
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Вывод аналогового входа на LCD16x2
Эту задачу можно решить путем предварительной очистки знакоместа под цифры. Для этого можно делать вывод трех пробелов:
Код: Выделить всё
lcd.setCursor (5, 0);
lcd.print(" "); // Выводим три пробела для очистки поля
lcd.print(sensorReading);
Re: Вывод аналогового входа на LCD16x2
Так дисплей будет писать сигнал после пробелов, а не на их месте?!
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Вывод аналогового входа на LCD16x2
Значит надо возвращать курсор в нужную позицию:
Код: Выделить всё
lcd.setCursor (5, 0);
lcd.print(" "); // Выводим три пробела для очистки поля
lcd.setCursor (5, 0);
lcd.print(sensorReading);
Re: Вывод аналогового входа на LCD16x2
Если чистить пробелами и потом на его место выводить значения, экран моргает!
Я решил эту проблему выводом после значения двух пробелов. Это если будет выводиться трехзначное число, если четырехзначное - надо 3 пробела.
Я решил эту проблему выводом после значения двух пробелов. Это если будет выводиться трехзначное число, если четырехзначное - надо 3 пробела.
Последний раз редактировалось Тима 22 дек 2013, 22:25, всего редактировалось 1 раз.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Вывод аналогового входа на LCD16x2
Тоже хороший вариант. В стандартной библиотеке для языка C есть функция printf, которая позволяет выводить форматированный текст. С её помощью можно было организовать вывод значения в поле фиксированной ширины.
Re: Вывод аналогового входа на LCD16x2
Можно ли чуть подробнее для чайника ?:)
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Вывод аналогового входа на LCD16x2
printf — обобщённое название семейства функций, используемых для форматного вывода — вывода значений разных типов, отформатированных согласно заданному шаблону. Этот шаблон определяется составленной по специальным правилам строкой (форматной строкой). Функция printf и её производные являются частью стандартной библиотеки Си++.
Запись форматированной строки в строку без ограничения по размеру строки
int sprintf( char *s, const char *format, ... );
Параметры:
format — строка форматирования (формат описан ниже)
s — строка для помещения результата работы функции
Пример использования для Arduino:
Более подробно на википедии
Запись форматированной строки в строку без ограничения по размеру строки
int sprintf( char *s, const char *format, ... );
Параметры:
format — строка форматирования (формат описан ниже)
s — строка для помещения результата работы функции
Пример использования для Arduino:
Код: Выделить всё
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"
}