In this lab, participants will integrate the Infineon PSoC 6 microcontroller's CAPSENSE functionalities with FreeRTOS, a real-time operating system. Participants will develop touch-responsive interfaces, including buttons and sliders, utilizing the CAPSENSE capabilities. By incorporating FreeRTOS, they will learn to manage concurrent tasks efficiently, ensuring smooth and responsive touch interactions. This lab aims to showcase the synergy between capacitive touch technologies and real-time operating systems, emphasizing the benefits of multitasking in enhancing user interface performance and overall system efficiency.
This code example features a 5-segment linear slider and two CAPSENSE™ buttons. Button 0 turns the LED ON, Button 1 turns the LED OFF, and the slider controls the brightness of the LED. The code example also demonstrates interfacing with the CAPSENSE™ Tuner using the I2C interface.
main.c
#include "cybsp.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "capsense_task.h"
#include "led_task.h"
/*******************************************************************************
* Global constants
******************************************************************************/
/* Priorities of user tasks in this project. configMAX_PRIORITIES is defined in
* the FreeRTOSConfig.h and higher priority numbers denote high priority tasks.
*/
#define TASK_CAPSENSE_PRIORITY (configMAX_PRIORITIES - 1)
#define TASK_LED_PRIORITY (configMAX_PRIORITIES - 2)
/* Stack sizes of user tasks in this project */
#define TASK_CAPSENSE_STACK_SIZE (256u)
#define TASK_LED_STACK_SIZE (configMINIMAL_STACK_SIZE)
/* Queue lengths of message queues used in this project */
#define SINGLE_ELEMENT_QUEUE (1u)
/*******************************************************************************
* Function Name: main()
********************************************************************************
* Summary:
* System entrance point. This function sets up user tasks and then starts
* the RTOS scheduler.
*
* Return:
* int
*
*******************************************************************************/
int main(void)
{
cy_rslt_t result;
/* Initialize the device and board peripherals */
result = cybsp_init();
/* Board init failed. Stop program execution */
if (result != CY_RSLT_SUCCESS)
{
CY_ASSERT(0);
}
/* Enable global interrupts */
__enable_irq();
/* Create the queues. See the respective data-types for details of queue
* contents
*/
led_command_data_q = xQueueCreate(SINGLE_ELEMENT_QUEUE,
sizeof(led_command_data_t));
capsense_command_q = xQueueCreate(SINGLE_ELEMENT_QUEUE,
sizeof(capsense_command_t));
/* Create the user tasks. See the respective task definition for more
* details of these tasks.
*/
xTaskCreate(task_capsense, "CapSense Task", TASK_CAPSENSE_STACK_SIZE,
NULL, TASK_CAPSENSE_PRIORITY, NULL);
xTaskCreate(task_led, "Led Task", TASK_LED_STACK_SIZE,
NULL, TASK_LED_PRIORITY, NULL);
/* Start the RTOS scheduler. This function should never return */
vTaskStartScheduler();
/********************** Should never get here ***************************/
/* RTOS scheduler exited */
/* Halt the CPU if scheduler exits */
CY_ASSERT(0);
for (;;)
{
}
}
FreeRTOS
FreeRTOS is a real-time operating system for embedded devices, which provides a framework for building applications with multiple threads (tasks), and offers features like task scheduling, priority management, and inter-task communication mechanisms.
Build Application
Launches Application
Result
Open CAPSENSE Tuner
🎉 Congratulations! You can now complete this lab
Supported toolchains (make variable 'TOOLCHAIN')
GNU Arm® embedded compiler v10.3.1 (GCC_ARM) - Default value of TOOLCHAIN