From 6fee3af79678819aa855e1833786515da83337d9 Mon Sep 17 00:00:00 2001 From: YunHorn Technology Date: Fri, 11 Aug 2023 08:57:37 +0800 Subject: [PATCH] restore back --- mlx90640/mlx90640_lcd_display.c | 95 +++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 33 deletions(-) diff --git a/mlx90640/mlx90640_lcd_display.c b/mlx90640/mlx90640_lcd_display.c index 8dcbd29..904b069 100644 --- a/mlx90640/mlx90640_lcd_display.c +++ b/mlx90640/mlx90640_lcd_display.c @@ -19,7 +19,7 @@ paramsMLX90640 mlx90640; static uint16_t eeMLX90640[832]; int status; -volatile uint8_t draw_legend_once=0, normalPeopleTemp=30, blackOutTag=0; +volatile uint8_t draw_legend_once=0, normalPeopleTemp=30, blackOutTag=0, waterTempThreshold=10, detectCycle=0; // start with some initial colors float minTemp = 1.0f; float maxTemp = 60.0f; @@ -36,9 +36,9 @@ int x, y, i, j; // array for the 32 x 24 measured tempValues static float tempValues[32*24]; -static uint8_t zoneMask[32*24]={0x0}; +volatile uint8_t zoneMask[32*24]={0x0}; -static uint8_t blackOutFilter(void); +void blackOutFilter(void); static uint16_t TempToColor(float val); static void setTempScale(void); static void setAbcd(void); @@ -149,7 +149,7 @@ static void drawLegend(void) sprintf(tempBuffer,(char *)"F10.Male#1.WashBasin",centerTemp); BSP_LCD_DisplayStringAt(8, ST7789V_LCD_PIXEL_HEIGHT-16,(uint8_t *)tempBuffer,LEFT_MODE,LCD_COLOR_WHITE); } -#if 1 +#if 0 BSP_LCD_SetFont(&Font16); DrawProp.BackColor = LCD_COLOR_BLACK; memset(tempBuffer,0,sizeof(tempBuffer)); @@ -204,34 +204,33 @@ static void drawMeasurement(void ) { } static void drawPicture(void) { +#if 0 float temp1=0.0; uint8_t blackdot=0; averageTemp = 0.0; for (i=0; i<32*24; i++) averageTemp += tempValues[i]; averageTemp /= 768; +#endif BSP_LCD_FillRect(1,1,ST7789V_LCD_PIXEL_WIDTH-2, ST7789V_LCD_PIXEL_HEIGHT-16-16, LCD_COLOR_BLACK); - for (y=1; y<23; y++) + for (y=0; y<23; y++) { - for (x=1; x<31; x++) + for (x=0; x<31; x++) { - temp1 = tempValues[(x) + (y*32)]; - if ((temp1+ 1.0) > averageTemp ) - { - //BSP_LCD_FillRect(x*8, y*11, 7, 10, LCD_COLOR_BLACK); - temp1=0.0; - } else { + + if (zoneMask[y*32+x] > 3) { + //APP_LOG(TS_OFF,VLEVEL_L,"\r\n X=%d Y=%d Count=%d\r\n",x,y,zoneMask[y*32+x]); BSP_LCD_FillRect(x*8, y*11, 4, 4, LCD_COLOR_GREEN); - //BSP_LCD_DrawCircle((x)*8, (y-2)*11, 10, LCD_COLOR_BLUE); - zoneMask[y*32+x]=0x57; } } } + + } // Read pixel data from MLX90640. -static void readTempValues(void) { - char buf[128]; +static void readTempValues(void) +{ for (uint8_t x = 0 ; x < 2 ; x++) // Read both subpages { @@ -259,32 +258,62 @@ static void readTempValues(void) { } #endif } -static uint8_t blackOutFilter(void) +void blackOutFilter(void) { - if (maxTemp < normalPeopleTemp) { - blackOutTag =0; - return 0; - } else { - blackOutTag =1; - return 1; + float averageTemp = 0.0, temp1=0.0; + for (i=0; i<32*24; i++) { + averageTemp += tempValues[i]; } + averageTemp /= 768; + + if (maxTemp < normalPeopleTemp) + { + blackOutTag =0; + for (y=1; y<22; y++) + { + for (x=1; x<30; x++) + { + temp1 = (float)tempValues[(x) + (y*32)]; + if ((temp1 + (float)(waterTempThreshold/10.0)) < averageTemp ) + { + zoneMask[y*32+x] ++; + //APP_LOG(TS_OFF, VLEVEL_L, "Detect Zone X=%d Y=%d Count=%d T=%2.2f \r\n", x, y, zoneMask[y*32+x], (int)(temp1+waterTempThreshold/10.0)); + } + } + } + + blackOutTag =0; + + } else + { + blackOutTag =1; + } + + if (detectCycle ++ > 20) + { + detectCycle = 0; + memset(zoneMask,0,sizeof(zoneMask)); + } + } void mlx90640_display_process(void) { + readTempValues(); + setTempScale(); + blackOutFilter(); - readTempValues(); - setTempScale(); + if (blackOutTag == 0) + { - if (blackOutTag == 0) - { - BSP_LCD_DisplayOn(); + // APP_LOG(TS_OFF, VLEVEL_L, "DetectCycle=%d \r\n", detectCycle); + BSP_LCD_DisplayOn(); - drawPicture(); - drawMeasurement(); - } else { - BSP_LCD_DisplayOff(); - } + drawPicture(); + drawMeasurement(); + } else { + BSP_LCD_DisplayOff(); + } } void mlx90640_display_init(void){