Skip to content

Commit

Permalink
feat: updated leaf module with elaborations and init with push button
Browse files Browse the repository at this point in the history
  • Loading branch information
csouzapaz committed Feb 24, 2025
1 parent 9a32e62 commit c7a5056
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 112 deletions.
199 changes: 101 additions & 98 deletions platformio/stima_v4/slave-leaf/include/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "stima_config.h"

/*********************************************************************
* MODULE
*********************************************************************/
* MODULE
*********************************************************************/
/// @brief Module main version.
#define MODULE_MAIN_VERSION (4)
#define MODULE_MAIN_VERSION (4)

/// @brief Module minor version.
#define MODULE_MINOR_VERSION (0)
#define MODULE_MINOR_VERSION (0)

/// @brief rmap protocol version
#define RMAP_PROCOTOL_VERSION (1)
Expand All @@ -50,89 +50,89 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
\brief Type of module. It is defined in registers.h.
*/
#if (USE_MODULE_THR)
#define MODULE_TYPE (STIMA_MODULE_TYPE_THR)
#define MODULE_TYPE (STIMA_MODULE_TYPE_THR)
#elif (USE_MODULE_TH)
#define MODULE_TYPE (STIMA_MODULE_TYPE_TH)
#define MODULE_TYPE (STIMA_MODULE_TYPE_TH)
#elif (USE_MODULE_RAIN)
#define MODULE_TYPE (STIMA_MODULE_TYPE_RAIN)
#define MODULE_TYPE (STIMA_MODULE_TYPE_RAIN)
#elif (USE_MODULE_LEAF)
#define MODULE_TYPE (STIMA_MODULE_TYPE_LEAF)
#define MODULE_TYPE (STIMA_MODULE_TYPE_LEAF)
#endif

/// @brief Enable control Error for Debug
#define DEBUG_MODE (false)
#define ERROR_HANDLER_CB (false)
#define DEBUG_MODE (false)
#define ERROR_HANDLER_CB (false)

/*********************************************************************
* HW DEVICES
*********************************************************************/
* HW DEVICES
*********************************************************************/

/// @brief Enable I2C1 interface
#define ENABLE_I2C1 (true)
#define ENABLE_I2C1 (true)
/// @brief Enable I2C2 interface
#define ENABLE_I2C2 (true)
#define ENABLE_I2C2 (true)
/// @brief Enable QSPI interface
#define ENABLE_QSPI (true)
#define ENABLE_QSPI (true)
/// @brief Enable CAN BUS interface
#define ENABLE_CAN (true)
#define ENABLE_CAN (true)
/// @brief Enable I2C Accelerometer
#define ENABLE_ACCELEROMETER (false)
#define ENABLE_ACCELEROMETER (false)

/// @brief Enable HW Diag PIN redefine
#define ENABLE_DIAG_PIN (false)
#define ENABLE_DIAG_PIN (false)

// Enable (Wdt Task and Module) and relative Function (Stack, Info ecc...)
/// @brief Enable WatchDog Task and Module
#define ENABLE_WDT (true)
#define ENABLE_WDT (true)
/// @brief WatchDog Hardware microseconds timeout
#define WDT_TIMEOUT_BASE_US (8000000)
#define WDT_TIMEOUT_BASE_US (8000000)
/// @brief Init WatchDog Task local milliseconds
#define WDT_STARTING_TASK_MS (60000)
#define WDT_STARTING_TASK_MS (60000)
/// @brief Task milliseconds minimal check
#define WDT_CONTROLLER_MS (2000)
#define WDT_CONTROLLER_MS (2000)
/// @brief Enable stack usage
#define ENABLE_STACK_USAGE (true)
#define ENABLE_STACK_USAGE (true)
/// @brief Monitor Sub Position not used flag
#define UNUSED_SUB_POSITION (0)
#define UNUSED_SUB_POSITION (0)
/// @brief Monitor No Sleep / No Suspend
#define NORMAL_STATE (0)
/// @brief Sleep Task For Wdt or LowPower Check
#define SLEEP_STATE (1)
/// @brief Suspend Task from Wdt
#define SUSPEND_STATE (2)
#define NORMAL_STATE (0)
/// @brief Sleep Task For Wdt or LowPower Check
#define SLEEP_STATE (1)
/// @brief Suspend Task from Wdt
#define SUSPEND_STATE (2)

/*********************************************************************
* Generic Semaphore Time acquire RTC
*********************************************************************/
* Generic Semaphore Time acquire RTC
*********************************************************************/
/// @brief Enable RTC Interface
#define ENABLE_RTC (true)
#define ENABLE_RTC (true)
/// @brief Delay for RTC in milliseconds
#define RTC_WAIT_DELAY_MS (100)
#define RTC_WAIT_DELAY_MS (100)

/*********************************************************************
* Address EEProm for reserved bootloader flag param (and future used 2000 Bytes)
*********************************************************************/
* Address EEProm for reserved bootloader flag param (and future used 2000 Bytes)
*********************************************************************/
/// @brief Starting EEPROM address
#define START_EEPROM_ADDRESS (0)
#define START_EEPROM_ADDRESS (0)
/// @brief Size EEPROM reserved address. Must be > CONFIGURATION_EEPROM_END
#define SIZE_EEPROM_RESERVED (450)
/// @brief Bootloader start address
#define BOOT_LOADER_STRUCT_ADDR (START_EEPROM_ADDRESS)
#define SIZE_EEPROM_RESERVED (450)
/// @brief Bootloader start address
#define BOOT_LOADER_STRUCT_ADDR (START_EEPROM_ADDRESS)
/// @brief Bootloader struct size
#define BOOT_LOADER_STRUCT_SIZE (sizeof(bootloader_t))
/// @brief Bootloader struct end address
#define BOOT_LOADER_STRUCT_END (START_EEPROM_ADDRESS + BOOT_LOADER_STRUCT_SIZE)
#define BOOT_LOADER_STRUCT_SIZE (sizeof(bootloader_t))
/// @brief Bootloader struct end address
#define BOOT_LOADER_STRUCT_END (START_EEPROM_ADDRESS + BOOT_LOADER_STRUCT_SIZE)

/*********************************************************************
* Private configuration board direct
*********************************************************************/
* Private configuration board direct
*********************************************************************/
/// @brief Start Address EEPROM configuration
#define CONFIGURATION_EEPROM_ADDRESS (20)
#define CONFIGURATION_EEPROM_ADDRESS (20)
/// @brief Start Standard UAVCAN Register
#define REGISTER_EEPROM_ADDRESS (START_EEPROM_ADDRESS + SIZE_EEPROM_RESERVED)
#define REGISTER_EEPROM_ADDRESS (START_EEPROM_ADDRESS + SIZE_EEPROM_RESERVED)

/// @brief Monitor Debug Serial speed
#define SERIAL_DEBUG_BAUD_RATE (115200)
#define SERIAL_DEBUG_BAUD_RATE (115200)

// HW I2C Speed BUS and specific config
#if (ENABLE_I2C1 || ENABLE_I2C2)
Expand All @@ -148,106 +148,109 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#endif

/*********************************************************************
* Queue Lenght
*********************************************************************/
* Queue Lenght
*********************************************************************/
/// @brief Request system message queue length
#define SYSTEM_MESSAGE_QUEUE_LENGTH (4)
/// @brief Elaborate data message queue length
#define ELABORATE_DATA_QUEUE_LENGTH (4)
/// @brief Request data message queue length
#define REQUEST_DATA_QUEUE_LENGTH (1)
#define REQUEST_DATA_QUEUE_LENGTH (1)
/// @brief Report data message queue length
#define REPORT_DATA_QUEUE_LENGTH (1)
#define REPORT_DATA_QUEUE_LENGTH (1)

/*********************************************************************
* Task system_status and queue ID message
*********************************************************************/
* Task system_status and queue ID message
*********************************************************************/
/// @brief All task ID. Send message to ALL Task
#define ALL_TASK_ID (99)
#define ALL_TASK_ID (99)
/// @brief Supervisor task ID
#define SUPERVISOR_TASK_ID (0)
#define SUPERVISOR_TASK_ID (0)
/// @brief CAN task ID
#define CAN_TASK_ID (1)
#define CAN_TASK_ID (1)
/// @brief Elaborate data task ID
#define ELABORATE_TASK_ID (2)
#define ELABORATE_TASK_ID (2)
/// @brief Sensor acquire task ID
#define SENSOR_TASK_ID (3)
#define SENSOR_TASK_ID (3)
/// @brief Accelerometer task ID
#define ACCELEROMETER_TASK_ID (4)
#define ACCELEROMETER_TASK_ID (4)
/// @brief Watch Dog task ID
#define WDT_TASK_ID (5)
#define WDT_TASK_ID (5)
/// @brief Total Max Task for WDT Task Control
#define TOTAL_INFO_TASK (WDT_TASK_ID + 1)
#define TOTAL_INFO_TASK (WDT_TASK_ID + 1)

/*********************************************************************
* Global queue wait and other timeout
*********************************************************************/
* Global queue wait and other timeout
*********************************************************************/
/// @brief Time to wait pushing data queue
#define WAIT_QUEUE_REQUEST_PUSHDATA_MS (500)
#define WAIT_QUEUE_REQUEST_PUSHDATA_MS (500)
/// @brief Time to wait pushing command queue
#define WAIT_QUEUE_REQUEST_COMMAND_MS (500)
#define WAIT_QUEUE_REQUEST_COMMAND_MS (500)

/*********************************************************************
* Parameter of buffer data dimension and acquire
*********************************************************************/
/// @brief Sample and default value for elaborate task
#define SAMPLES_COUNT_MAX (3600)
/// @brief Default observation (RMAP) time in second
#define OBSERVATIONS_TIME_S (60)
/// @brief Default report (RMAP) time in second
#define REPORTS_TIME_S (900)
* Parameter of buffer data dimension and acquire
*********************************************************************/
/// @brief Sample and default value for elaborate task
#define SAMPLES_COUNT_MAX (3600)
/// @brief Default observation (RMAP) time in second
#define OBSERVATIONS_TIME_S (60)
/// @brief Default report (RMAP) time in second
#define REPORTS_TIME_S (900)

/*********************************************************************
* Parameter of sensor and elaboration function
*********************************************************************/
/// @brief Default delay from two function acquire data
#define SENSORS_ACQUISITION_DELAY_MS (4000)
* Parameter of sensor and elaboration function
*********************************************************************/
/// @brief Default delay from two function acquire data
#define SENSORS_ACQUISITION_DELAY_MS (1000)

// Index Sensor
#define LEAF_INDEX (0)
#define LEAF_INDEX (0)

// Caratteristic of input type selected chanel
#define ADC_VOLTAGE_MAX_V (14.4)
#define ADC_VOLTAGE_MIN_V (0.0)
#define ADC_VOLTAGE_MAX_MV (3300.0)
#define ADC_VOLTAGE_MIN_MV (0.0)
#define ADC_CURRENT_MAX_MA (20.0)
#define ADC_CURRENT_MIN_MA (0.0)
#define ADC_VOLTAGE_MAX_V (14.4)
#define ADC_VOLTAGE_MIN_V (0.0)
#define ADC_VOLTAGE_MAX_MV (3300.0)
#define ADC_VOLTAGE_MIN_MV (0.0)
#define ADC_CURRENT_MAX_MA (66.6)
#define ADC_CURRENT_MIN_MA (0.0)

/// @brief Limit MAX resolution adc value for module sensor
#define ADC_MAX (4096)
#define ADC_MAX (4096)
/// @brief Limit MIN resolution adc value for module sensor
#define ADC_MIN (0)
#define ADC_MIN (0)

/// @brief Limit MAX voltage adc range for module sensor
#define LEAF_VOLTAGE_MAX (5000.0)
#define LEAF_VOLTAGE_MAX (5.0)
/// @brief Limit MIN voltage adc range for module sensor
#define LEAF_VOLTAGE_MIN (0.0)
#define LEAF_VOLTAGE_MIN (0.0)

/// @brief Threshold voltage for module sensor
#define LEAF_VOLTAGE_THRESHOLD (2.5)

/// @brief Limit Error voltage MAX valid range for module sensor
#define LEAF_ERROR_VOLTAGE_MAX (LEAF_VOLTAGE_MAX + 30.0)
#define LEAF_ERROR_VOLTAGE_MAX (LEAF_VOLTAGE_MAX + 0.03)
/// @brief Limit Error voltage MIN valid range for module sensor
#define LEAF_ERROR_VOLTAGE_MIN (LEAF_VOLTAGE_MIN - 30.0)
#define LEAF_ERROR_VOLTAGE_MIN (LEAF_VOLTAGE_MIN - 0.03)

/// @brief Limit MAX valid range for module sensor (3600 seconds = 1 hour)
#define LEAF_MAX (3600.0)
#define LEAF_MAX (5.0)
/// @brief Limit MIN valid range for module sensor
#define LEAF_MIN (0.0)
#define LEAF_MIN (0.0)

/// @brief Sensibility MIN sensor start range valid data
#define LEAF_SENSIBILITY (5.0)
#define LEAF_SENSIBILITY (0.05)
/// @brief Limit MAX error valid range for module sensor
#define LEAF_ERROR_MAX (3600.0)
#define LEAF_ERROR_MAX (5.0)
/// @brief Limit MIN error valid range for module sensor
#define LEAF_ERROR_MIN (0.0)
#define LEAF_ERROR_MIN (0.0)

/// @brief ADC MIN error on retrieve data for get a valid data
#define ADC_ERROR_PERCENTAGE_MIN (70)
#define ADC_ERROR_PERCENTAGE_MIN (70)

/// @brief Samples min percent valid on elaboration data
#define SAMPLE_ERROR_PERCENTAGE_MIN (90.0)
#define SAMPLE_ERROR_PERCENTAGE_MIN (90.0)
/// @brief Observation min percent valid on elaboration data
#define OBSERVATION_ERROR_PERCENTAGE_MIN (90.0)
#define OBSERVATION_ERROR_PERCENTAGE_MIN (90.0)

/// @brief Amount of cycles for reset sensor
#define ACQUISITION_COUNT_FOR_POWER_RESET (100)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,14 @@ class LeafSensorTask : public cpp_freertos::Thread {
float getAdcCalibratedValue(float adc_value, float offset, float gain);
float getAdcAnalogValue(float adc_value, Adc_Mode adc_type);
float getLeaf(float adc_value, float adc_voltage_min, float adc_voltage_max, bool *adc_overflow);
void resetLeafCounter();

// Global flag powered
bool is_power_on;

// Value of register count Leaf for Leaf calculation
inline static uint16_t leaf_count;

// Value of chanel ADC
uint8_t adc_in_count[MAX_ADC_CHANELS];
uint8_t adc_err_count[MAX_ADC_CHANELS];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ class SupervisorTask : public cpp_freertos::Thread {
void loadConfiguration();
void saveConfiguration(bool is_default);

int current_init_pin = HIGH;
int previous_init_pin = HIGH;

STM32RTC& rtc = STM32RTC::getInstance();

SupervisorState_t state;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ void ElaborateDataTask::Run() {
#if defined(USE_SIMULATOR) && defined(INIT_SIMULATOR)
for(uint16_t iInit=0; iInit<900; iInit++) {
edata.value = 500 + random(200);
TRACE_VERBOSE_F(F("Leaf: %d\r\n"), edata.value);
TRACE_VERBOSE_F(F("Leaf count: %d (s)\r\n"), edata.value);
addValue<maintenance_t, uint16_t, bool>(&maintenance_samples, SAMPLES_COUNT_MAX, false);
addValue<sample_t, uint16_t, rmapdata_t>(&leaf_samples, SAMPLES_COUNT_MAX, edata.value);
}
Expand Down Expand Up @@ -166,7 +166,7 @@ void ElaborateDataTask::Run() {
#ifdef USE_SIMULATOR
edata.value = 500 + random(200);
#endif
TRACE_VERBOSE_F(F("Leaf: %d\r\n"), edata.value);
TRACE_VERBOSE_F(F("Leaf count: %d (s)\r\n"), edata.value);
addValue<maintenance_t, uint16_t, bool>(&maintenance_samples, SAMPLES_COUNT_MAX, param.system_status->flags.is_maintenance);
addValue<sample_t, uint16_t, rmapdata_t>(&leaf_samples, SAMPLES_COUNT_MAX, edata.value);
break;
Expand Down
Loading

0 comments on commit c7a5056

Please sign in to comment.