0

上昇沈下をメートル/秒で表す独自のバージョンのバリオメータをプログラムしたいと考えています。値は LCD モジュール画面に表示されます。上昇値と下降値は、プログラムの実行中に回転して値を変更できるポテンショメータから縮小されます。表示されるクライム値はclimb: 0 m/sclimb: 300 m/sで、シンク値はsink: 0 m/ssink: -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

4

1 に答える 1