Initialize LED_AC repository and set LED status colors per station modes.
Add project sources with a minimal gitignore for IDE/build artifacts only while keeping firmware files tracked. Made-with: Cursor
This commit is contained in:
Executable
+125
@@ -0,0 +1,125 @@
|
||||
//#include "led_task.h"
|
||||
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "cmsis_os.h"
|
||||
#include "main.h"
|
||||
#include <stdbool.h>
|
||||
//#include "led_rgb.h"
|
||||
|
||||
xTaskHandle ledTaskHandle;
|
||||
|
||||
typedef enum LED_STATE{
|
||||
LED_IDLE, ///< No car connected
|
||||
LED_CONNECTED_IDLE, ///< Car connected, waiting for permission
|
||||
LED_CHARGING, ///< Car connected, charging
|
||||
LED_ERROR, ///< Any error
|
||||
}LED_STATE;
|
||||
|
||||
LED_STATE curr_state = LED_IDLE;
|
||||
|
||||
|
||||
uint8_t charge_val = 0;
|
||||
bool charge_dir = 1;
|
||||
void led_pulse_charging(void) {
|
||||
if (charge_val >= 255) charge_dir = 0;
|
||||
if (charge_val <= 10) charge_dir = 1;
|
||||
if (charge_dir)
|
||||
charge_val += 1;
|
||||
if (!charge_dir)
|
||||
charge_val -= 1;
|
||||
led_setHSV(85, 255, charge_val); // TODO: Check it
|
||||
// led_setRGB(0, charge_val, 0);
|
||||
}
|
||||
|
||||
uint8_t idle_val = 241;
|
||||
bool idle_dir = 1;
|
||||
uint8_t idle_ctr = 0;
|
||||
|
||||
void led_pulse_idle(void) {
|
||||
idle_ctr++;
|
||||
if (idle_ctr < 40) return;
|
||||
idle_ctr = 0;
|
||||
if (idle_val >= 255) idle_dir = 0;
|
||||
if (idle_val <= 231) idle_dir = 1;
|
||||
if (idle_dir)
|
||||
idle_val += 1;
|
||||
if (!idle_dir)
|
||||
idle_val -= 1;
|
||||
led_setHSV(85, idle_val, idle_val);
|
||||
}
|
||||
|
||||
//#include "charge_inf_data.h"
|
||||
//#include "evcom_data.h"
|
||||
|
||||
|
||||
void led_main(void *pvParameters)
|
||||
{
|
||||
(void) pvParameters;
|
||||
led_init(NULL, 0, 0, 0);
|
||||
int time_blue = 0;
|
||||
int time_blue_low = 0;
|
||||
curr_state = LED_IDLE;
|
||||
while(1)
|
||||
{
|
||||
|
||||
uint8_t R_level, G_level, B_level;
|
||||
|
||||
R_level = !HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_7);
|
||||
G_level = !HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_6);
|
||||
B_level = !HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5);
|
||||
// If no connection & no contactor closed
|
||||
|
||||
if (B_level == false){
|
||||
|
||||
if(time_blue > 70 && time_blue < 130) curr_state = LED_IDLE;
|
||||
time_blue_low++;
|
||||
if(time_blue_low>7){ //hold low for 35ms, anti debounce
|
||||
time_blue = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (B_level == true){
|
||||
time_blue_low = 0;
|
||||
time_blue++;
|
||||
}
|
||||
|
||||
if(time_blue>120) curr_state = LED_CONNECTED_IDLE;
|
||||
|
||||
if (G_level == true){
|
||||
curr_state = LED_CHARGING;
|
||||
}
|
||||
if (R_level == true){
|
||||
curr_state = LED_ERROR;
|
||||
}
|
||||
if(HAL_GetTick()<10000)curr_state = LED_IDLE;
|
||||
// Set color for LED
|
||||
switch (curr_state) {
|
||||
case LED_IDLE:
|
||||
//led_pulse_idle();
|
||||
led_setRGB(255, 10, 60);
|
||||
break;
|
||||
case LED_CONNECTED_IDLE:
|
||||
// led_setRGB(0, 0, 255);
|
||||
led_setRGB(255, 10, 60);
|
||||
break;
|
||||
case LED_CHARGING:
|
||||
// led_pulse_charging();
|
||||
led_setRGB(0, 0, 255);
|
||||
break;
|
||||
default:
|
||||
// led_setRGB(255, 0, 0);
|
||||
led_setRGB(255, 130, 90);
|
||||
break;
|
||||
}
|
||||
|
||||
osDelay(5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void led_task_init(void)
|
||||
{
|
||||
xTaskCreate(led_main, "RGB Task", 128, NULL, 1, &ledTaskHandle);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user