Уменьшение диапазона чисел в 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 записей.

Ура!

Другие вопросы по тегам