Elevate your touch experience with a seamlessly integrated touchpad and microcontroller duo, where smoothness meets intelligence for unparalleled user satisfaction
A
A
Hardware Overview
How does it work?
Touchpad 4 Click is based on the IQS7211A, a tiny trackpad controller designed for multitouch applications using a projected capacitance touch panel from Azoteq. The IQS7211A is part of Azoteq’s latest ProxFusion combination sensors, a multi-sensor technology that offers capacitive sensing, Hall-effect, inductive, and temperature sensing combinations on a single integrated circuit. It allows users to control a trackpad of up to 32 channels and offers high resolution and fast response, low power consumption, and long-term activation supported by environmental tracking. It is also characterized by embedded gesture engine recognition for simple gestures (tap, swipes, hold) and built-in noise detection and filtering. On the Touchpad 4 Click front side, a clearly defined field represents a touchpad area. This area is a matrix
of conductive electrodes on the PCB, electrically isolated from each other, arranged as rows and columns of X and Y. An electrode consists of multiple diamond-shaped elements, each connected to the next with a conductive neck. The controller uses the projected capacitance charge transfer principle on the touchpad area. When a conductive object such as a human finger approaches the sense plate, the detected capacitance will decrease. Observing the measured results at various sensing points on the touchpad area enables the controller to determine proximity/hover detection and contact (touch) detection on all channels and accurately determine the coordinates on the touch area. Touchpad 4 Click communicates with MCU using a standard I2C 2-Wire interface, with a clock of
up to 1MHz in the Fast Mode. An additional ready signal, routed on the INT pin of the mikroBUS™ socket, is added, which indicates when the communication window is available. Thus, it is optimal for the response rate to use the INT pin as a communication trigger. Alongside this pin, this Click board™ has a Reset feature routed to the RST pin on the mikroBUS™ socket, which with a low logic level, puts the module into a Reset state, and with a high level, operates the module normally. This Click board™ can be operated only with a 3.3V logic voltage level. The board must perform appropriate logic voltage level conversion before using MCUs with different logic levels. Also, it comes equipped with a library containing functions and an example code that can be used, as a reference, for further development.
Features overview
Development board
Flip&Click PIC32MZ is a compact development board designed as a complete solution that brings the flexibility of add-on Click boards™ to your favorite microcontroller, making it a perfect starter kit for implementing your ideas. It comes with an onboard 32-bit PIC32MZ microcontroller, the PIC32MZ2048EFH100 from Microchip, four mikroBUS™ sockets for Click board™ connectivity, two USB connectors, LED indicators, buttons, debugger/programmer connectors, and two headers compatible with Arduino-UNO pinout. Thanks to innovative manufacturing technology,
it allows you to build gadgets with unique functionalities and features quickly. Each part of the Flip&Click PIC32MZ development kit contains the components necessary for the most efficient operation of the same board. In addition, there is the possibility of choosing the Flip&Click PIC32MZ programming method, using the chipKIT bootloader (Arduino-style development environment) or our USB HID bootloader using mikroC, mikroBasic, and mikroPascal for PIC32. This kit includes a clean and regulated power supply block through the USB Type-C (USB-C) connector. All communication
methods that mikroBUS™ itself supports are on this board, including the well-established mikroBUS™ socket, user-configurable buttons, and LED indicators. Flip&Click PIC32MZ development kit allows you to create a new application in minutes. Natively supported by Mikroe software tools, it covers many aspects of prototyping thanks to a considerable number of different Click boards™ (over a thousand boards), the number of which is growing every day.
Microcontroller Overview
MCU Card / MCU

Architecture
PIC32
MCU Memory (KB)
2048
Silicon Vendor
Microchip
Pin count
100
RAM (Bytes)
524288
Used MCU Pins
mikroBUS™ mapper
Take a closer look
Click board™ Schematic

Step by step
Project assembly
Software Support
Library Description
This library contains API for Touchpad 4 Click driver.
Key functions:
touchpad4_reset- Reset functiontouchpad4_get_touch- Read touch informationstouchpad_get_channels- Read channel information
Open Source
Code example
The complete application code and a ready-to-use project are available through the NECTO Studio Package Manager for direct installation in the NECTO Studio. The application code can also be found on the MIKROE GitHub account.
/*!
* @file main.c
* @brief Touchpad4 Click example
*
* # Description
* This example showcases ability of the device to read touch coordinates,
* active/inactive channels, and gesture informations.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initialize host communication modules(UART and I2C) and additional pins,
* for device control. Then resets device and set default configuration where
* Channels and pins are mapped and configured, and set communication with device
* only on touch/event. In the end one of 3 examples is set;
*
* ## Application Task
* There are 3 examples that shocaes ability of the device:
* - Reading touch coorinates and addinal informations of touch strength,
* and touch area and logging them,
* - Reading channel statuses and show them by logging them,
* - Reading gesture events and logging them;
*
* ### Additional Functions
* - void touchpad4_touch_reading ( void );
* - void touchpad4_channel_reading ( void );
* - void touchpad4_gesture_reading ( void );
*
* @author Luka Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "touchpad4.h"
#define TOUCHPAD4_EXAMPLE_TOUCH 1
#define TOUCHPAD4_EXAMPLE_CHANNEL 2
#define TOUCHPAD4_EXAMPLE_GESTURE 3
static touchpad4_t touchpad4;
static log_t logger;
static uint8_t example_selector = 0;
/**
* @brief Touchpad 4 touch info example.
* @details This function reads touch informations and logs them.
* @return Nothing
*/
void touchpad4_touch_reading ( void );
/**
* @brief Touchpad 4 channel example.
* @details This function reads channel informations and logs them.
* @return Nothing
*/
void touchpad4_channel_reading ( void );
/**
* @brief Touchpad 4 gesture info example.
* @details This function reads gesture informations and logs them.
* @return Nothing
*/
void touchpad4_gesture_reading ( void );
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
touchpad4_cfg_t touchpad4_cfg; /**< Click config object. */
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, " Application Init " );
// Click initialization.
touchpad4_cfg_setup( &touchpad4_cfg );
TOUCHPAD4_MAP_MIKROBUS( touchpad4_cfg, MIKROBUS_1 );
err_t init_flag = touchpad4_init( &touchpad4, &touchpad4_cfg );
if ( I2C_MASTER_ERROR == init_flag )
{
log_error( &logger, " Application Init Error. " );
log_info( &logger, " Please, run program again... " );
for ( ; ; );
}
touchpad4_reset( &touchpad4 );
init_flag = touchpad4_default_cfg ( &touchpad4 );
if ( TOUCHPAD4_ERROR == init_flag )
{
log_error( &logger, " Configuration. " );
log_info( &logger, " Please, run program again... " );
for ( ; ; );
}
example_selector = TOUCHPAD4_EXAMPLE_TOUCH;
log_info( &logger, " Application Task " );
}
void application_task ( void )
{
if ( !touchpad4_get_ready( &touchpad4 ) )
{
switch ( example_selector )
{
case TOUCHPAD4_EXAMPLE_TOUCH:
{
touchpad4_touch_reading( );
break;
}
case TOUCHPAD4_EXAMPLE_CHANNEL:
{
touchpad4_channel_reading( );
break;
}
case TOUCHPAD4_EXAMPLE_GESTURE:
{
touchpad4_gesture_reading( );
break;
}
default:
{
log_error( &logger, " Select Example" );
break;
}
}
}
}
int main ( void )
{
/* Do not remove this line or clock might not be set correctly. */
#ifdef PREINIT_SUPPORTED
preinit();
#endif
application_init( );
for ( ; ; )
{
application_task( );
}
return 0;
}
void touchpad4_touch_reading ( void )
{
touchpad4_info_t ti;
touchpad4_get_touch ( &touchpad4, &ti );
if ( ( ti.number_of_touches > 0 ) && ( ti.number_of_touches <= 2 ) )
{
log_printf( &logger, "> X->%d\r\n> Y->%d\r\n> Strength->%u\r\n> Area->%u\r\n",
ti.touches[ 0 ].x, ti.touches[ 0 ].y, ti.touches[ 0 ].strength, ti.touches[ 0 ].area );
log_printf( &logger, "**************\r\n" );
}
}
void touchpad4_channel_reading ( void )
{
uint32_t ch_status = 0;
touchpad_get_channels( &touchpad4, &ch_status );
uint8_t shift = 19;
uint8_t row[ 10 ] = { 0 };
for ( uint8_t r = 0; r < 5; r++ )
{
uint8_t row_char_cnt = 6;
for ( uint8_t y = 0; y < 4; y++ )
{
if ( y )
{
row[ row_char_cnt-- ] = '|';
}
if ( ( ch_status >> shift ) & 1 )
{
row[ row_char_cnt-- ] = 'x';
}
else
{
row[ row_char_cnt-- ] = 'o';
}
shift--;
}
log_printf( &logger, "%s\r\n", row );
}
log_printf( &logger, "\r\n" );
}
void touchpad4_gesture_reading ( void )
{
uint16_t gesture_data = 0;
touchpad4_generic_read( &touchpad4, TOUCHPAD4_REG_GESTURES, &gesture_data );
gesture_data &= 0x003F;
if ( gesture_data & 0x0001 )
{
log_printf( &logger, " > Single Tap <\r\n" );
}
if ( gesture_data & 0x0002 )
{
log_printf( &logger, " > Press And Hold <\r\n" );
}
if ( gesture_data & 0x0004 )
{
log_printf( &logger, " > Swipe X - <\r\n" );
}
if ( gesture_data & 0x0008 )
{
log_printf( &logger, " > Swipe X + <\r\n" );
}
if ( gesture_data & 0x0010 )
{
log_printf( &logger, " > Swipe Y + <\r\n" );
}
if ( gesture_data & 0x0020 )
{
log_printf( &logger, " > Swipe Y - <\r\n" );
}
if ( gesture_data )
{
log_printf( &logger, "**************\r\n" );
}
}
// ------------------------------------------------------------------------ END
Additional Support
Resources
Category:Capacitive

































