MiaoUI/example/STM32F103C8T6/MultMenu/menu/wave.c

51 lines
1.4 KiB
C

#include "wave.h"
#include "stdio.h"
#include "dispDirver.h"
uint8_t buffer[HOR_RES];
void Wave_Widget(xpMenu Menu)
{
uint8_t time;
char str[30];
float value = 0;
switch (Menu->now_item->element->data->Data_Type)
{
case DATA_INT:
value = (float)(*(int *)(Menu->now_item->element->data->ptr));
break;
case DATA_FLOAT:
value = *(float *)(Menu->now_item->element->data->ptr);
break;
default:
break;
}
for (time = HOR_RES - 1; time > 0; time--)
{
buffer[time] = buffer[time - 1];
}
buffer[0] = ((value) / (float)((Menu->now_item->element->data->max - Menu->now_item->element->data->min))) * (VER_RES - 20);
OLED_ClearBuffer();
OLED_SetDrawColor(&Menu->bgColor);
OLED_DrawBox(0, 0, HOR_RES, VER_RES);
uint8_t color = Menu->bgColor^0x01;
OLED_SetDrawColor(&color);
for (time = 0; time < HOR_RES - 1; time++)
{
OLED_DrawLine(time, buffer[time], time + 1, buffer[time + 1]);
}
switch (Menu->now_item->element->data->Data_Type)
{
case DATA_INT:
sprintf(str, "%s:%d ", Menu->now_item->element->data->name, *(int *)(Menu->now_item->element->data->ptr));
break;
case DATA_FLOAT:
sprintf(str, "%s:%.2f ", Menu->now_item->element->data->name, *(float *)(Menu->now_item->element->data->ptr));
break;
default:
break;
}
OLED_DrawStr(0, VER_RES - 5, str);
OLED_SendBuffer();
}