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セグメント表示の値を表示したいので、それが必要です。
intをdoubleの代わりに電圧として使用するか、10進数だけを使用する場合はintにキャストしてください。 – koper89
** ["Arduino sprintf float not formatting"](http://stackoverflow.com/a/27652012/6945651)**に対するその回答を見てください。有用な関数 'dtostrf()'はあなたの問題を解決するはずです。 –