前提条件
已知最大值和最小值,通过图表来表示范围。图表的范围是不固定的
效果
1,
static int16_t test[] = {800, 800, 840, 750, 750, 800, 810, 1900, 810,1300, 878, 876, 900, 9999, -9999, 220, 200, 200, 200, 900, 878, 876, 900,980};
2,
static int16_t test[] = {800, 800, 840, 750, 800, 800, 800, 840, 810,1000, 1000, 1000, 900, 840, 840, 750, 750, 750, 750, 750, 878, 876, 900,980};
关键计算
1,这种效果不太好
// 获取动态类型的图表范围最大值和最小值
void dynamic_chart_get_range(int16_t in_min, int16_t in_max, int16_t *out_min, int16_t *out_max)
{
if (in_min == 0)
{
in_min = 1;
}
if (in_max == 0)
{
in_max = 1;
}
int avg_value = (LV_ABS(in_max) + LV_ABS(in_min))/2;
int t = LV_ABS(in_max/in_min); // 倍数
*out_max = in_max + (t*avg_value);
*out_min = in_min - (t*avg_value);
}
推荐这种
// 获取动态类型的图表范围最大值和最小值
void dynamic_chart_get_range(int16_t in_min, int16_t in_max, int16_t *out_min, int16_t *out_max)
{
if (in_min == 0)
{
in_min = 1;
}
if (in_max == 0)
{
in_max = 1;
}
int avg_value = (LV_ABS(in_max) + LV_ABS(in_min))/2;
*out_max = in_max + avg_value;
*out_min = in_min - avg_value;
}