我正在使用模數轉換器來讀取0到3.3V的電壓值。 ADC提供從0x00
到0x0FFF
(0到4095)的輸出。我想打印兩位小數的電壓讀數。我已經閱讀了許多答案,但我沒有嘗試過任何工作。這裏是我的代碼:如何將uint32_t轉換爲double或float並打印?
uint32_t pui32ADC0Value[1]; // ADC0 data value
double D0v; // Decimal value
// Read value from ADC
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);
// Convert to decimal
D0v = (double)pui32ADC0Value[0]/4095 * 3.3;
// Print to console
UART0printf("\n\r> D0 = %.2d V", D0v);
我得到的輸出是:D0 = ERROR2d V
pui32ADC0Value
打印沒有任何問題,並給出了預期值,所以我知道這是工作。
這個錯誤是什麼意思?
注意:UART0printf
是我使用的TIVA TM4C微控制器上的預定義UART功能。
UPDATE:我錯誤地認爲UART0printf
相同printf
,正如我與%u
,%s
,和%x
之前使用它。但是對於數字,它只支持%c
,%i
和%u
。如果我沒有找到任何地方,我正在重新編寫代碼並更新。
UPDATE 2: 我可以這樣做嗎?我知道這將圓錯誤......
uint32_t pui32ADC0Value[1]; // ADC0 data value
uint32_t D0v[2]; // Decimal value
// Read value from ADC
ADCSequenceDataGet(ADC0_BASE, 3, pui32ADC0Value);
// Convert to decimal
for (int i = 0; i <= 2; i++){
D0v[i] = (pui32ADC0Value[0]/10^i)/4096 * 3.3;
}
// Display the AIN0 (PE0) digital value on the console.
UART0printf("\n\r> D0 = %d.%d%d V", D0v[0],D0v[1],D0v[2]);
什麼是'UART0printf'?你確定它支持與C的'printf'相同的格式字符串語法嗎? – Dai
爲什麼uint32_t pui32ADC0Value [1]; ?而不是uint32_t pui32ADC0Value; ?? – Nandu
@Nandu:我打算繼續前進,並假設ADCSequenceDataGet接受一個指向'uint32_t'的指針,所以'uint32_t [1]'得到了免費的隱式轉換。但我認爲這不是一個好主意。 –