Я хочу запрограммировать свою собственную версию вариометра для представления набора высоты и раковина в метрах в секунду. Значения отображаются на экране ЖК-модуля. Значения набора высоты и раковины уменьшаются с потенциометра, который я могу вращать, чтобы изменить значения во время работы программы. Значения набора высоты, отображаемые в диапазоне от climb: 0 m/s
, до climb: 300 m/s
, а значения раковины колеблются от sink: 0 m/s
до sink: -300 m/s
. Этот бит в порядке.изменение направления гистограммы в C
Что я хочу сделать, это отобразить их в виде гистограммы с нулевой точкой в центре. Поскольку climb
увеличивается до 300, блоки справа от нулевой точки заполняются соответственно слева направо. Когда значение sink
уменьшается до -300, я хочу, чтобы блоки с левой стороны нулевой точки заполняли соответственно справа налево, существенно изменяя направление правой стороны.
climb = (DELVAL*600ul + 1023/2)/1023;
sink = (DELVAL*600ul + 1023/2)/1023;
climb2 = ((DELVAL-511.5)*600ul + 1023/2)/1023;
sink2 = ((DELVAL+511.5)*600ul + 1023/2)/1023;
if (DELVAL > 511.5)
{
sprintf(buf, "Climb: +%d m/s ", climb-300);
lcd_putxy(2,0,buf);
for (delay = 0; delay < 50000; delay++);
}
if (DELVAL < 511.5)
{
sprintf(buf, "Sink: -%d m/s ", ~sink+300);
lcd_putxy(2,0,buf);
for (delay = 0; delay < 50000; delay++);
}
character1 = climb2/35;
character2 = sink2/35;
lcd_move(1,10);
for (i = 0; i < character1; i++)
{
lcd_putchar(0xD0);
}
lcd_putstr(" ");
for (delay = 0; delay < 50000; delay++);
lcd_move(1,2);
for (i = 0; i < character2; i++)
{
lcd_putchar(0xD0);
}
for (delay = 0; delay < 50000; delay++);
DELVAL
это данные, считанные с помощью потенциометра. Я могу заставить правую сторону гистограммы работать, но я не могу заставить левую руку работать. Может ли кто-нибудь сообщить мне какие-либо проблемы с моим кодом и объяснить лучший метод для работы левой стороны.
Часть, которая не работает в моем коде, представляет собой цикл for, содержащий character2
.
Вам нужно добавить некоторые примеры желаемого результата. Например, в состоянии покоя (нулевой подъем/приемник) вам может понадобиться '██░░░░'; при максимальном подъеме '█████' и при максимальном погружении' █████░░░░'. Или что-то подобное. Вы можете скопировать-вставить Unicode [элемент блока] (https://en.wikipedia.org/wiki/Block_Elements) или [box drawing] (https://en.wikipedia.org/wiki/Box-drawing_character) символы из Страницы Википедии. Существует также StackOverflow [помощь по уменьшению маркировки] (http://stackoverflow.com/editing-help). –
Какой ЖК-контроллер вы используете? – Uint32
@NominalAnimal, как у вас есть, есть именно то, что я хочу. Единственное отличие состоит в том, что средняя нулевая точка занимает больший блок. У меня есть правая рука, но, как только она входит в левую руку, «снижается», на ЖК-дисплее отображаются блоки по всему экрану. –