1
0

Ej4 y Ej5

This commit is contained in:
2025-10-09 21:11:27 +02:00
parent baea0e28d1
commit 62d3035291
61 changed files with 14420 additions and 14284 deletions

View File

@@ -10,8 +10,15 @@
#include "stm32l4xx_hal.h"
#ifdef INC_FREERTOS_H
#include "task.h"
#endif
void LED_On(uint8_t led);
void LED_Off(uint8_t led);
void LED_Toggle(uint8_t led);
void animation1(void);
void animation2(void);
void animation3(void);
#endif /* INC_LED_DRIVER_H_ */

View File

@@ -23,4 +23,9 @@ typedef struct
void CreateLedTask();
void LedToggleTask(void* pArgs);
void LedAnimationTask(void* pArgs);
void LedAnimationTask1(void* pArgs);
void LedAnimationTask2(void* pArgs);
void LedAnimationTask3(void* pArgs);
#endif /* INC_LED_TASK_H_ */

View File

@@ -54,3 +54,76 @@ void LED_Toggle(uint8_t led)
break;
}
}
void animation1(void)
{
int i;
for(i = 0; i < 3; i++)
{
LED_On(i);
#ifdef INC_FREERTOS_H
vTaskDelay(150);
#else
HAL_Delay(150);
#endif
LED_Off(i);
}
for(i = 1; i > 0; i--)
{
LED_On(i);
#ifdef INC_FREERTOS_H
vTaskDelay(150);
#else
HAL_Delay(150);
#endif
LED_Off(i);
}
}
void animation2(void)
{
int i, j;
for(j = 0; j < 5; j++)
{
for(i = 0; i < 3; i++)
LED_On(i);
#ifdef INC_FREERTOS_H
vTaskDelay(100);
#else
HAL_Delay(100);
#endif
for(i = 0; i < 3; i++)
LED_Off(i);
#ifdef INC_FREERTOS_H
vTaskDelay(100);
#else
HAL_Delay(100);
#endif
}
}
void animation3(void)
{
int i;
for(i = 0; i < 3; i++)
{
LED_On(i);
#ifdef INC_FREERTOS_H
vTaskDelay(150);
#else
HAL_Delay(150);
#endif
}
for(i = 2; i >= 0; i--)
{
LED_Off(i);
#ifdef INC_FREERTOS_H
vTaskDelay(150);
#else
HAL_Delay(150);
#endif
}
}

View File

@@ -9,6 +9,7 @@
void CreateLedTask()
{
/* EJERCICIOS 1/2/3
LED_Config* cfg = pvPortMalloc(sizeof(LED_Config));
if (cfg != NULL)
@@ -25,6 +26,42 @@ void CreateLedTask()
1,
NULL
);
*/
/* EJERCICIO 4
xTaskCreate(
LedAnimationTask,
"LedAnimationTask",
128,
NULL,
1,
NULL
);
*/
/* EJERCICIO 5
* - con la misma prioridad alternan continuamente entre ellas y son animaciones
* sin sentido
* - con prioridades distintas, visualmente y con un delay un poco más alto
* podría parecer que se hacen una detrás de otra (en orden de prioridad)
*/
xTaskCreate(
LedAnimationTask1,
"LedAnimationTask1",
128,
NULL,
1,
NULL
);
xTaskCreate(
LedAnimationTask2,
"LedAnimationTask2",
128,
NULL,
2,
NULL
);
}
void LedToggleTask(void* pArgs)
@@ -59,3 +96,87 @@ void LedToggleTask(void* pArgs)
vTaskDelete(NULL);
}
}
void LedAnimationTask(void* pArgs)
{
for(;;)
{
switch(ReadJoy())
{
case 0:
// stand-by
LED_Off(0);
LED_Off(1);
LED_Off(2);
break;
case 1:
animation1();
break;
case 2:
animation2();
break;
case 3:
animation3();
break;
}
vTaskDelay(50);
}
}
void LedAnimationTask1(void* pArgs)
{
for(;;)
{
int i;
for(i = 0; i < 3; i++)
{
LED_On(i);
vTaskDelay(150);
LED_Off(i);
}
for(i = 1; i > 0; i--)
{
LED_On(i);
vTaskDelay(150);
LED_Off(i);
}
}
}
void LedAnimationTask2(void* pArgs)
{
for(;;)
{
int i, j;
for(j = 0; j < 5; j++)
{
for(i = 0; i < 3; i++)
LED_On(i);
vTaskDelay(100);
for(i = 0; i < 3; i++)
LED_Off(i);
vTaskDelay(100);
}
}
}
void LedAnimationTask3(void* pArgs)
{
for(;;)
{
int i;
for(i = 0; i < 3; i++)
{
LED_On(i);
vTaskDelay(150);
}
for(i = 2; i >= 0; i--)
{
LED_Off(i);
vTaskDelay(150);
}
}
}