added LightState Switch
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
#include "LightState.h"
|
||||
#include "BSP_GPIO.h"
|
||||
#include "BSP_INA.h"
|
||||
|
||||
#include "LightTask.h"
|
||||
#include "ulog.h"
|
||||
|
||||
// Create the task with a specific priority and stack size
|
||||
osThreadAttr_t task_attr = {
|
||||
@@ -20,21 +21,69 @@ void LightStateTask_start(void)
|
||||
osThreadNew(LightStateTask, NULL, &task_attr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Check if K15 is on for switching the light state
|
||||
static bool isK15On()
|
||||
{
|
||||
return BSP_GPIO_K15isSet();
|
||||
}
|
||||
|
||||
|
||||
// Define the threshold voltage for engine running
|
||||
#define ENGINE_RUNNING_THRESHOLD 13500 // 13.5V = 13500mV
|
||||
|
||||
// Check if the engine is running by checking the voltage of the battery, if above the threshold, the engine is running
|
||||
static bool isEngineRunning()
|
||||
{
|
||||
return BSP_INA_Voltage() > ENGINE_RUNNING_THRESHOLD;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// check if the headlight is on and the engine is running to switch the light state
|
||||
// we can check the headlight using the GPIO functions
|
||||
static bool isHeadlightOn()
|
||||
{
|
||||
return BSP_GPIO_HeadLightIsSet();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Function to determine the next state of the light
|
||||
// return 1 as default state
|
||||
// return 2 if the engine is running
|
||||
// return 3 if the headlight and engine is running
|
||||
static int determineNextState()
|
||||
{
|
||||
if (isHeadlightOn() && isEngineRunning()) {
|
||||
return 2;
|
||||
} else if (isEngineRunning()) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Task function
|
||||
void LightStateTask(void *argument)
|
||||
{
|
||||
|
||||
// default state
|
||||
int current_state = 0;
|
||||
// Infinite loop to keep the task running
|
||||
while (1)
|
||||
{
|
||||
// default state
|
||||
int next_state = 0;
|
||||
|
||||
// check if k15 is on
|
||||
|
||||
|
||||
|
||||
// only change the state if the current state is different from the next state
|
||||
int next_state = determineNextState();
|
||||
if (current_state != next_state) {
|
||||
LightTask_setTheme(next_state);
|
||||
ULOG_INFO("Light state changed to %d", next_state);
|
||||
current_state = next_state;
|
||||
}
|
||||
|
||||
// Delay the task for a certain amount of time (in milliseconds)
|
||||
osDelay(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user