上昇と沈下をメートル/秒で表す独自のバージョンのバリオメータをプログラムしたいと考えています。値は LCD モジュール画面に表示されます。上昇値と下降値は、プログラムの実行中に回転して値を変更できるポテンショメータから縮小されます。表示されるクライム値はclimb: 0 m/s
~climb: 300 m/s
で、シンク値はsink: 0 m/s
~sink: -300 m/s
です。このビットは問題ありません。
私が今やりたいことは、これらを中心にゼロ点を持つ棒グラフの形で表示することです. 300 まで増加するとclimb
、ゼロ点の右側のブロックが左から右に塗りつぶされます。値が -300 に減少するsink
と、ゼロ点の左側にあるブロックを右から左に塗りつぶし、基本的に右側の方向を逆にします。
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
。