在使用TI MSPM0G3507测试OLED的时候,因为要让OLED显示小车编码器计数,所以将long long型的计数通过snprintf进行转型,但在snprintf中添加 %f 之类的却无法进行烧录;
最后选择了这种办法强行转整数显示,虽然无法显示小数了,但可以正常烧录运行;
snprintf(oled_buffer,sizeof(oled_buffer),"Flag=%d",flag);
OLED_ShowString(64,0,(uint8_t*)oled_buffer,16);
snprintf(oled_buffer, sizeof(oled_buffer), "EN=%-6lldcm", (long long)((float)countA_ * 0.02608f));
OLED_ShowString(10,2,(uint8_t*)oled_buffer,16);
snprintf(oled_buffer, sizeof(oled_buffer), "EN=%-6lldcm", (long long)((float)countB_ * 0.02608f));
OLED_ShowString(10,4,(uint8_t*)oled_buffer,16);
snprintf(oled_buffer, sizeof(oled_buffer), "Angle=%-4lld", (long long)yaw);
OLED_ShowString(10,6,(uint8_t*)oled_buffer,16);
先将运算的数据转float再强转long long只保留整数部分。
- 距离计算使用了转换因子 0.02608f,将计数转换为厘米,轮距为44mm
也可以将整数部分和小数部分拆开分别显示:
// 方法1:手动拆分整数和小数部分
float value = 3.14159;
int integer_part = (int)value; // 整数部分
int decimal_part = (int)((value - integer_part) * 100); // 保留2位小数
snprintf(oled_buffer, sizeof(oled_buffer), "Val=%d.%02d", integer_part, decimal_part);
OLED_ShowString(10, 2, (uint8_t*)oled_buffer, 16);
// 方法2:使用整数运算(适合已知缩放因子的情况)
// 例如对于之前的距离计算,可以直接显示两位小数
long long distance = (long long)(countA_ * 0.02608f * 100); // 放大100倍
snprintf(oled_buffer, sizeof(oled_buffer), "EN=%lld.%02lldcm", distance / 100, distance % 100);
OLED_ShowString(10, 2, (uint8_t*)oled_buffer, 16);