Добавлен плот не по массиву и экзампл для синуса

This commit is contained in:
2025-02-21 12:30:34 +03:00
parent d58273fe41
commit 9a4e3c3dad
5 changed files with 71 additions and 47 deletions

View File

@@ -436,7 +436,7 @@ void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc)
/* Функция вывода графика */
void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot)
void GFX_FloatPlotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot, float *numb2plot)
{
if((Buffer_Frame == NULL) || (hPlot == NULL))
return;
@@ -444,6 +444,8 @@ void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlo
return;
if((hPlot->yPos + hPlot->plotHeight == NULL) || (hPlot->xPos + hPlot->plotWidth == NULL))
return;
if((numb2plot == NULL) && (hPlot->pDataPtr == NULL))
return;
if(hPlot->__initialized == 0)
{
@@ -493,7 +495,11 @@ void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlo
/* Расчет позиции пикселя */
float pix_y_float = (hPlot->pDataPtr[(int)hPlot->plotInd]);
float pix_y_float;
if(numb2plot != NULL)
pix_y_float = *numb2plot;
else
pix_y_float = (hPlot->pDataPtr[(int)hPlot->plotInd]);
// масштабирование под размеры графика
hPlot->pixY = (pix_y_float/hPlot->dataMax)*(hPlot->plotHeight);
// если график должен быть знаковым, то уменьшаем машстаб еще в два раза
@@ -533,15 +539,18 @@ void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlo
}
/* Смещение графика далее */
hPlot->pixX++;
hPlot->plotInd += hPlot->plotSpeed;
if(hPlot->plotInd >= hPlot->dataSize)
hPlot->plotInd -= hPlot->dataSize;
if(hPlot->plotInd < 0)
hPlot->plotInd += hPlot->dataSize;
hPlot->pixX++;
hPlot->prevPixY = hPlot->pixY;
// Если используется массив плота
if(numb2plot == NULL)
{
hPlot->plotInd += hPlot->plotSpeed;
if(hPlot->plotInd >= hPlot->dataSize)
hPlot->plotInd -= hPlot->dataSize;
if(hPlot->plotInd < 0)
hPlot->plotInd += hPlot->dataSize;
}
}
/* Функция инвертирования прямоугольной области */
@@ -679,11 +688,7 @@ void __GFX_Draw_Circle_Filled(uint8_t *Buffer_Frame, int8_t xPos, int8_t yPos, i
}
/* функция рисования треугольника */
void __GFX_Draw_Triangle(uint8_t *Buffer_Frame,
uint8_t xPos1, uint8_t yPos1,
uint8_t xPos2, uint8_t yPos2,
uint8_t xPos3, uint8_t yPos3,
uint8_t pxColor)
void __GFX_Draw_Triangle(uint8_t *Buffer_Frame, uint8_t xPos1, uint8_t yPos1, uint8_t xPos2, uint8_t yPos2, uint8_t xPos3, uint8_t yPos3, uint8_t pxColor)
{
__GFX_Draw_Line(Buffer_Frame, xPos1, yPos1, xPos2, yPos2, pxColor);
__GFX_Draw_Line(Buffer_Frame, xPos2, yPos2, xPos3, yPos3, pxColor);

View File

@@ -126,7 +126,7 @@ void GFX_Draw_Circle(uint8_t *Buffer_Frame, GFX_CircleHandleTypeDef *hCircle);
void GFX_Draw_Triangle(uint8_t *Buffer_Frame, GFX_TriangleHandleTypeDef *hTriangle);
void GFX_Draw_Arrow(uint8_t *Buffer_Frame, GFX_ArrowHandleTypeDef *hArrow);
void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc);
void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot);
void GFX_FloatPlotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot, float *numb2plot);