tdse-tf_3-02

Controlador PID para derretidor de miel con control local via botones y remoto via WiFi
Index Commits Files Refs Submodules README
firmware-nucleo/App/Src/task_temp_sensor.c (2012B)
   1 /*
   2  * Copyright (c) 2026 Martin Javier Klöckner <mklockner@fi.uba.ar>
   3  *
   4  * See file `LICENSE` for full details
   5  */
   6 
   7 #include <stdio.h>
   8 #include <stdint.h>
   9 #include <stdbool.h>
  10 #include <string.h>
  11 
  12 #include "main.h"
  13 #include "app.h"
  14 
  15 #include "task_temp_sensor.h"
  16 #include "logger.h"
  17 
  18 #include "ds18b20.h"
  19 
  20 #define G_TASK_TEMP_SEN_TICK_INI            0ul
  21 #define G_TASK_TEMP_SEN_TEMP_UPDATE_RATE_MS 1000ul
  22 #define G_TASK_TEMP_SEN_OFFSET              0      // correction factor
  23 
  24 uint32_t g_task_temp_sensor_tick;
  25 
  26 // this variable is incremented by 1 on every ms by HAL_SysTick
  27 volatile uint32_t g_task_temp_sensor_tick_cnt;
  28 
  29 void task_temp_sensor_init(void *parameters)
  30 {
  31     LOGGER_INFO("Initializing `task_temp_sensor`...");
  32 
  33     g_task_temp_sensor_tick = G_TASK_TEMP_SEN_TICK_INI;
  34     ds18b20_init();
  35 
  36     LOGGER_INFO("Done initializing `task_temp_sensor`");
  37 }
  38 
  39 void task_temp_sensor_update(void *parameters)
  40 {
  41     bool b_time_update_required = false;
  42     shared_data_type *p_shared_data = (shared_data_type *)parameters;
  43 
  44     __asm("CPSID i");
  45     if (G_TASK_TEMP_SEN_TICK_INI < g_task_temp_sensor_tick_cnt)
  46     {
  47         g_task_temp_sensor_tick_cnt--;
  48         b_time_update_required = true;
  49     }
  50     __asm("CPSIE i");
  51 
  52     while (b_time_update_required)
  53     {
  54         __asm("CPSID i");
  55         if (G_TASK_TEMP_SEN_TICK_INI < g_task_temp_sensor_tick_cnt)
  56         {
  57             g_task_temp_sensor_tick_cnt--;
  58             b_time_update_required = true;
  59         }
  60         else
  61         {
  62             b_time_update_required = false;
  63         }
  64         __asm("CPSIE i");
  65 
  66         ds18b20_async_tick();
  67 
  68         if (0 == g_task_temp_sensor_tick)
  69         {
  70             g_task_temp_sensor_tick = G_TASK_TEMP_SEN_TEMP_UPDATE_RATE_MS;
  71             ds18b20_async_read_temp();
  72         }
  73         else
  74         {
  75             g_task_temp_sensor_tick--;
  76         }
  77 
  78         if (ds18b20_async_temp_ready())
  79         {
  80             p_shared_data->temp_sensor = ds18b20_async_get_temp() + G_TASK_TEMP_SEN_OFFSET;
  81         }
  82     }
  83 }