Temps_Reel_Robot/software/robot/src/led.c
2018-10-10 09:53:03 +02:00

214 lines
4.5 KiB
C

/**
******************************************************************************
* @file led.c
* @author Lucien Senaneuch
* @version V1.0
* @date 16-mai-2016
* @brief Gestion des clignotements des LED
* Ce fichier fournis des fonctions afin de faciliter
* la gestions des changements de couleurs.
*
******************************************************************************
******************************************************************************
*/
#include <stm32f10x.h>
#include "system_dumby.h"
#include "led.h"
/** @addtogroup Projects
* @{
*/
/** @addtogroup Led_color
* @{
*/
/** @addtogroup Init Init GPIO
* @{
*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseLED;
TIM_OCInitTypeDef TIM_OCConfigure;
char etatLED;
char LEDON;
#define LED_GREEN 0
#define LED_RED 1
#define LED_ORANGE 2
/*void ledGreenOn(void);
void ledRedOn(void);
void ledOff(void);
void ledOrangeOn(void);*/
/**
* @brief Configure le GPIO PB0 et PB1 afin de contrôler la led.
* @param Aucun
*/
void ledConfigure(void)
{
GPIO_InitTypeDef Init_Structure;
// Configure les PIN B0 et B1 en output / alternate fonction
Init_Structure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
Init_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &Init_Structure);
etatLED = 1;
LEDON =0;
}
/**
* @}
*/
/** @addtogroup change Change color
* @{
*/
/**
* @brief Allume une LED de couleur orange.
* @param Aucun
*/
void ledOrangeOn(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
}
/**
* @brief Allume une LED de couleur rouge.
* @param Aucun
*/
void ledRedOn(void)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
}
/**
* @brief Allume une LED de couleur verte.
* @param Aucun
*/
void ledGreenOn(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}
/**
* @brief Eteint les LED.
* @param Aucun
*/
void ledOff(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}
/**
* @brief Allume une couleur de LED.
* @param Aucun
*/
void ledOn(char color)
{
switch (color)
{
case LED_GREEN:
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
break;
case LED_RED:
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
break;
case LED_ORANGE:
GPIO_SetBits(GPIOB, GPIO_Pin_1);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
break;
default:
ledOff();
}
}
/**
* @brief Gere l'etat du clignotement de la led en fonction de l'etat du système
* Appelée toutes les 10 ms
* @param state: état actuel du système
* @param batteryState: état de la batterie
*/
void ledManagement(States state, char batteryState) {
static char ledCounter=0;
char color;
if (batteryState>1) color=LED_GREEN;
else color = LED_RED;
switch (state)
{
case STATE_IDLE:
if ((ledCounter<15) || ((ledCounter>=100) && (ledCounter<115))) ledOn(color);
else ledOff();
break;
case STATE_RUN:
case STATE_LOW:
ledOn(color);
break;
case STATE_WATCHDOG_DISABLE:
if (ledCounter<100) ledOn(LED_RED);
else ledOff();
break;
case STATE_DISABLE:
default:
if (ledCounter%10 ==0) ledOn(LED_RED);
else ledOff();
}
ledCounter++;
if (ledCounter>200) ledCounter=0;
}
//void ledManagement(States state) {
// if (state == STATE_IDLE) {
// if (etatLED == 1) {
// LEDON = 1;
// } else if (etatLED == 2)
// LEDON = 0;
// }
//
// if (state == STATE_RUN || state == STATE_LOW)
// LEDON = 1;
//
// if (state == STATE_DISABLE) {
// if (etatLED % 2 == 0) ledRedOn();
// else ledOff();
// }
// else if (LEDON) {
// if (Dumber.stateBattery == 1 && Dumber.StateSystem != STATE_DISABLE)
// ledOrangeOn();
// else if (Dumber.stateBattery == 2 && Dumber.StateSystem != STATE_DISABLE)
// ledGreenOn();
// } else
// ledOff();
//}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/