2016-12-10 5 views
0

私はMCU ATMega16を持っており、デジタル電圧計を使っています。 LCDディスプレイに10進数を表示したい。 これは私のコードです:AtmelStudio ADCアウトプット10進数値

#include <avr/io.h> 
#include <util/delay.h> 
#include "lcd.h" 
#include <stdlib.h> 

    signed int temp = 0; 
    double voltage = 0; 
    char buffer[10]; 

int main(void) 
{ 
    DDRD = 0b11111111; 
    PORTD = 0b00000000; 
    DDRB = 0b00001111; 
    PORTB = 0b00000000; 

    ADMUX = (0<<REFS1)|(1<<REFS0); 
    ADCSRA |= (1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0); 

    lcd_init(LCD_DISP_ON_CURSOR); 
    _delay_ms(100); 
    lcd_clrscr(); 
    lcd_home(); 
    lcd_puts("Voltage= "); 

    while (1) 
    { 
     ADCSRA |= (1<<ADSC); 
     while(ADCSRA & (1<<ADSC)); 
     ADCSRA |= (1<<ADIF); 
     temp = ADCW; 

     if(temp <= 0) 
     { 
      lcd_gotoxy(8, 0); 
      lcd_puts("Null"); 
      _delay_ms(100); 
     } 
     else 
     { 
      voltage = (5.0 * temp * 5)/1023; 

      lcd_gotoxy(8, 0); 
      sprintf(buffer, "%f", voltage); 
      lcd_puts(buffer); 
      _delay_ms(100); 
     } 
} 
} 

です。それが動作します。 バッテリーを12.3ボルトで測定すると、LCD値は12.31671になります。しかし、私はプロジェクト設定を仕事関数 "sprintf"に変更したので、プログラムは10進数を表示します。 LCDディスプレイに10進数を手動で表示するにはどうすればよいですか?助けてください。私はそれを作る方法を理解できません。私がプロジェクトの設定をデフォルトに戻して "spoaf"の代わりに "itoa"を使用すると、programmは数字12を表示します。将来私は7セグメント表示の値を表示したいので、それが必要です。

+0

intをdoubleの代わりに電圧として使用するか、10進数だけを使用する場合はintにキャストしてください。 – koper89

+0

** ["Arduino sprintf float not formatting"](http://stackoverflow.com/a/27652012/6945651)**に対するその回答を見てください。有用な関数 'dtostrf()'はあなたの問題を解決するはずです。 –

答えて

0

電圧を整数として宣言すると、問題は解決します。