Уменьшение диапазона чисел в C
Я читаю значения с потенциометра, который я могу повернуть, чтобы получить диапазон чисел от 0 до 1023. Я хочу иметь возможность отображать эти цифры в виде горизонтальной гистограммы на ЖК-экране. ЖК-экран имеет ширину 20 блоков, поэтому значение 0-1023 должно быть уменьшено до 0-20. Символ, который я хочу использовать для создания гистограммы, является блоком, который заполняет один целый блок из 20 доступных. Битовая комбинация для этого блока 0b11110001
,
block = 0b11110001;
BarGraph = ((DELVAL2/5115)*2000);
lcd_putxy(2,0,buf);
for (delay = 0; delay < 50000; delay++); // introduce a delay
sprintf(buf, "*", BarGraph);
lcd_putxy(2,0,buf);
Я надеялся, что кто-нибудь сможет объяснить мне, как этого добиться, и лучший метод для уменьшения значений моего потенциометра.
2 ответа
Ваш расчет содержит ошибку
BarGraph = ((DELVAL2/5115)*2000);
DELVAL2 это 0-1023. Вы делите его на 5115, так что вы получаете значение от 0 до 1. Вероятно, оно приведено к 0. 0 Mutliplied к 2000 все еще равно 0.
Попробуйте сначала умножить, а затем разделить:
BarGraph = (DELVAL2*2000/5115);
Также для печати
sprintf(buf, "*", BarGraph);
не будет работать. Обратитесь к функции sprintf или простому циклу использования для размещения символа в массиве buf.
Все, что вам нужно сделать, это взять весь диапазон АЦП и разделить его на количество символов на ЖК-дисплее (1024 / 20 = 51,2). Округлите значение до 52, чтобы включить все возможные значения в диапазон АЦП. Это означает, что у вас есть 20 доступных символов ЖКД для отображения полного диапазона от 0 до 1023. Каждый символ ЖКД будет представлять от 0 до 52 отсчетов АЦП (кроме последнего из-за округления).
Псевдокод:
- Сначала очистите дисплей для нового обновления.
- Проверьте, если счетчик АЦП>= 0, а счетчик АЦП <= 51: включите ЖК-дисплей "ВКЛ" 0.
- Иначе, если счетчик АЦП>= 52 и счетчик АЦП <=103: включите "ВКЛ." ЖК-дисплей 0 и 1.
- Иначе, если счетчик АЦП>=104 и счетчик АЦП <=155: включите ЖК-дисплей "ВКЛ" 0 и 1 и 2.
Вы бы сделали этот тип шаблона для всех оставшихся 17 записей.
Ура!