我正在使用模数转换器来读取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]'得到了免费的隐式转换。但我认为这不是一个好主意。 –