practicas/practica_02_01y02/src/freeRTOS_Sincro.c
void Button( void* taskParmPtr )
{
   // ---------- CONFIGURACIONES ------------------------------
	static ButtonState Estado = UP;
	static TickType_t TiempoPulsado;
   // ---------- REPETIR POR SIEMPRE --------------------------
   while(TRUE) {
	   //Fijo un período de chequeo de 10ms
	   vTaskDelay( 10 / portTICK_RATE_MS );
	   //xSemaphoreTake ( Mutex_But_Led, portMAX_DELAY);
	   // Detecta Botón presionado
	   if(!gpioRead( TEC1 ) && Estado == UP){
		   //Espero 20ms para confirmar que está presionado
		   vTaskDelay( 20 / portTICK_RATE_MS );
		   //Confirmo que estaba presionado
		   if (!gpioRead( TEC1 )){
			   //gpioWrite( LED3, ON );
			   Estado = DOWN;
			   TiempoPulsado = xTaskGetTickCount();
		   }
		   //o no...
	   }

	   //Detecta Botón Liberado
	   if(gpioRead( TEC1 ) && Estado == DOWN){
		   vTaskDelay( 20 / portTICK_RATE_MS );
		   if(gpioRead( TEC1 )){
			   // Led para dar se�al de vida
			   //gpioWrite( LED3, OFF );
			   Estado = UP;
			   //Acá suponemos que el tiempo de uso será menor a 1000hs
			   TiempoPulsado = xTaskGetTickCount() - TiempoPulsado;
			   //Acá damos por entendido que sólo hay dos tareas sincronizadas
			   TiempoEncendido = TiempoPulsado;
			   //gpioWrite( LED3, OFF );
			   xSemaphoreGive( Launch_Led );
			   xSemaphoreGive( Launch_Led );
			   xSemaphoreGive( Launch_Led );
		   }
	   }
	   //xSemaphoreGive( Mutex_But_Led );
   }
}
// Implementacion de funcion de la tarea
Implementacion de funcion de la tarea
Implementacion de funcion de la tarea
void Button( void* taskParmPtr )
{
	static ButtonState Estado = UP;
	static TickType_t TiempoPulsado;
   while(TRUE) {
	   vTaskDelay( 10 / portTICK_RATE_MS );
	   if(!gpioRead( TEC1 ) && Estado == UP){
		   vTaskDelay( 20 / portTICK_RATE_MS );
		   if (!gpioRead( TEC1 )){
			   Estado = DOWN;
			   TiempoPulsado = xTaskGetTickCount();
		   }
	   }
	   if(gpioRead( TEC1 ) && Estado == DOWN){
		   vTaskDelay( 20 / portTICK_RATE_MS );
		   if(gpioRead( TEC1 )){
			   Estado = UP;
			   TiempoPulsado = xTaskGetTickCount() - TiempoPulsado;
			   TiempoEncendido = TiempoPulsado;
			   xSemaphoreGive( Launch_Led );
			   xSemaphoreGive( Launch_Led );
			   xSemaphoreGive( Launch_Led );
		   }
	   }
   }
}
void Button ( void * taskParmPtr ) { static ButtonState Estado = UP ; static TickType_t TiempoPulsado ; while ( TRUE ) { vTaskDelay ( 10 / portTICK_RATE_MS ) ; if ( ! gpioRead ( TEC1 ) && Estado == UP ) { vTaskDelay ( 20 / portTICK_RATE_MS ) ; if ( ! gpioRead ( TEC1 ) ) { Estado = DOWN ; TiempoPulsado = xTaskGetTickCount ( ) ; } } if ( gpioRead ( TEC1 ) && Estado == DOWN ) { vTaskDelay ( 20 / portTICK_RATE_MS ) ; if ( gpioRead ( TEC1 ) ) { Estado = UP ; TiempoPulsado = xTaskGetTickCount ( ) - TiempoPulsado ; TiempoEncendido = TiempoPulsado ; xSemaphoreGive ( Launch_Led ) ; xSemaphoreGive ( Launch_Led ) ; xSemaphoreGive ( Launch_Led ) ; } } } }
Implementacion de funcion de la tarea
Implementacion de funcion de la tarea
// ---------- CONFIGURACIONES ------------------------------ // ---------- REPETIR POR SIEMPRE -------------------------- //Fijo un período de chequeo de 10ms //xSemaphoreTake ( Mutex_But_Led, portMAX_DELAY); // Detecta Botón presionado //Espero 20ms para confirmar que está presionado //Confirmo que estaba presionado //gpioWrite( LED3, ON ); //o no... //Detecta Botón Liberado // Led para dar se�al de vida //gpioWrite( LED3, OFF ); //Acá suponemos que el tiempo de uso será menor a 1000hs //Acá damos por entendido que sólo hay dos tareas sincronizadas //gpioWrite( LED3, OFF ); //xSemaphoreGive( Mutex_But_Led );