我想编写自己版本的变速计来表示爬升和下沉(以米/秒为单位)。这些值显示在 LCD 模块屏幕上。爬升和下沉值是通过电位计按比例缩小的,我可以在程序运行时旋转该电位计来更改值。显示的爬升值范围为 climb: 0 m/s
到 climb: 300 m/s
,下降值范围为 sink: 0 m/s
到下沉:-300 m/s
。这一点很好。
我现在想做的是将它们以条形图的形式显示,中间有零点。随着 climb
增加到 300,零点右侧的 block 会相应地从左到右填充。当sink
值减小到-300时,我希望零点左侧的 block 从右到左相应地填充,本质上反转了右侧的方向。
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
是从电位计读取的数据。我可以使条形图的右侧工作,但无法使左侧工作。谁能让我知道我的代码有任何问题,并解释让左侧工作的最佳方法。
在我的代码中不起作用的部分是包含 character2
的 for 循环。
最佳答案
您没有描述什么不起作用。但我猜测左侧是从左到右绘制的,而不是按照您的预期从右到左绘制的。您打算在哪里反转左侧的方向?
尝试将左侧反转。请注意,如果您使用更具描述性的变量名称、注释和更少的魔数(Magic Number),那么您的代码会更容易理解。
int left_bar_length = character2;
int max_bar_length = 300 / 35;
int left_scale_edge = 2;
int scale_center = left_scale_edge + max_bar_length;
// Move cursor to left end of left bar.
lcd_move(1, scale_center - left_bar_length);
// Draw the left bar.
for (i = 0; i < left_bar_length; i++)
{
lcd_putchar(0xD0);
}
关于c - 在C中反转条形图的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162733/