0

LCD に浮動小数点数を表示するための変数 volts を取得するにはどうすればよいですか?

LCD には浮動小数点値のみが表示され、小数点以下の桁数が多く、最後に E が付きます。小数点以下 2 桁しか必要ないのですが、どのように表示すればよいですか?

int main (void){

    adcinit();

    lcd_init();//initializes LCD
    lcd_clear();//clear screen
    lcd_home();


    uint16_t value;
    float volts;
    while(1){
        ADCSRA |= (1<<ADSC);//start ADC conversion
        delay_ms(54);//delay 54 millisecond
        value = ADCW;//assign ADC conversion to value
        volts=(value*5)/1023;
        lcd_goto_xy(0,0);// coordinates of the cursor on LCD Display
        lcd_printf("ADC Value: %d ",value);//display on LCD
        lcd_goto_xy(0,1);// coordinates of the cursor on LCD Display
        lcd_printf("Volts: %f ",volts);//display on LCD
    }
}
4

3 に答える 3

0

これを試して:

編集:値がintだったので、電圧の表示を編集しました。しかし、原則は同じです。

int main (void){

    adcinit();

    lcd_init();//initializes LCD
    lcd_clear();//clear screen
    lcd_home();


    uint16_t value;
    float volts;
    while(1){
        ADCSRA |= (1<<ADSC);//start ADC conversion
        delay_ms(54);//delay 54 millisecond
        value = ADCW;//assign ADC conversion to value
        volts=(float)(value*5)/1023;
        lcd_goto_xy(0,0);// coordinates of the cursor on LCD Display
        lcd_printf("ADC Value: %d ",value);//display on LCD
        lcd_goto_xy(0,1);// coordinates of the cursor on LCD Display
        lcd_printf("Volts: %.2f ",volts);//display on LCD
    }
}
于 2016-11-21T05:09:32.443 に答える
0

関数がArduino用lcd_printf()の関数と同じライブラリに基づいている場合、として使用しても書式指定子がうまく管理されていません。sprintf()'%f''%.2f'

ステップ 1:代替ソリューションを提案する前に、A/D コンバータから読み取った数値から十分に計算された float 値を取得する必要があります。

ADC が10 ビットの場合、範囲は(1023 ではなく) 1024にする必要があります。

value = ADCW;//assign ADC conversion to value
volts=((float)value*5.0f)/(1024.0f); 

ステップ 2.1:小数点以下 2 桁の固定浮動小数点値を表示するための最初の迅速な解決策は、それを 2 つの整数に変換することです。

lcd_printf("Volts: %d.%02d ",(int)volts, (int)(volts*100)%100));//display on LCD

それ以外の

lcd_printf("Volts: %.2f ",volts);//display on LCD

ステップ 2.2:小数点以下 2 桁の固定 float 値を表示するためのより「公式な」解決策は、 「Arduino sprintf float がフォーマットdtostrf()されていない」で提案されている関数を使用することです。

char str_volts[15]; // to store the float-to-string converted value
lcd_printf("Volts: %s ",dtostrf(volts, 4, 2, str_volts));//display on LCD
// 4 = minimum number of char ('X.XX'), 2 = number of decimals

それ以外の

lcd_printf("Volts: %.2f ",volts);//display on LCD
于 2016-11-21T12:51:15.183 に答える