mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-31 04:59:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			80 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| | Supported Targets | ESP32-S2 |
 | |
| | ----------------- | -------- |
 | |
| 
 | |
| # Matrix Keyboard Example (based on Dedicated GPIO)
 | |
| 
 | |
| (See the README.md file in the upper level 'examples' directory for more information about examples.)
 | |
| 
 | |
| ## Overview
 | |
| 
 | |
| This example mainly illustrates how to drive a common matrix keyboard using the dedicated GPIO APIs, including:
 | |
| 
 | |
| * Manipulate the level on a group of GPIOs
 | |
| * Trigger edge interrupt
 | |
| * Read level on a group of GPIOs
 | |
| 
 | |
| Dedicated GPIO is designed to speed up CPU operations on one or a group of GPIOs by writing assembly codes with Espressif customized instructions (please refer TRM to get more information about these instructions).
 | |
| 
 | |
| This matrix keyboard driver is interrupt-driven, supports a configurable debounce time. GPIOs used by row and column lines are also configurable during driver installation stage.
 | |
| 
 | |
| ## How to use example
 | |
| 
 | |
| ### Hardware Required
 | |
| 
 | |
| This example can run on any target that has the dedicated feature (e.g. ESP32-S2). It's not necessary for your matrix board to have pull-up resisters on row/column lines. The driver has enabled internal pull-up resister by default. A typical matrix board should look as follows:
 | |
| 
 | |
| ```
 | |
| row_0   +--------+-------------------+------------------------------+-----------------+
 | |
|                  |                   |                              |
 | |
|                  |       +           |       +                      |       +
 | |
|                  |     +-+-+         |     +-+-+          ......    |     +-+-+
 | |
|   .              +-----+   +-----+   +-----+   +-----+              +-----+   +-----+
 | |
|   .                              |                   |                              |
 | |
|   .                      .       |           .       |                      .       |
 | |
|                          .       |           .       |    ......            .       |
 | |
|                          .       |           .       |                      .       |
 | |
|                          .       |           .       |                      .       |
 | |
|                                  |                   |                              |
 | |
| row_n   +--------+-------------------+------------------------------+-----------------+
 | |
|                  |               |   |               |              |               |
 | |
|                  |       +       |   |       +       |              |       +       |
 | |
|                  |     +-+-+     |   |     +-+-+     |    ......    |     +-+-+     |
 | |
|                  +-----+   +-----+   +-----+   +-----+              +-----+   +-----+
 | |
|                                  |                   |                              |
 | |
|                                  |                   |                              |
 | |
|                                  |                   |                              |
 | |
|                                  +                   +                              +
 | |
|                                 col_0               col_1          ......          col_m
 | |
| ```
 | |
| 
 | |
| ### Build and Flash
 | |
| 
 | |
| Build the project and flash it to the board, then run monitor tool to view serial output:
 | |
| 
 | |
| ```
 | |
| idf.py -p PORT flash monitor
 | |
| ```
 | |
| 
 | |
| (Replace PORT with the name of the serial port to use.)
 | |
| 
 | |
| (To exit the serial monitor, type ``Ctrl-]``.)
 | |
| 
 | |
| See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
 | |
| 
 | |
| ## Example Output
 | |
| 
 | |
| ```
 | |
| I (2883) example: press event, key code = 0002
 | |
| I (3003) example: release event, key code = 0002
 | |
| I (5053) example: press event, key code = 0001
 | |
| I (5203) example: release event, key code = 0001
 | |
| I (6413) example: press event, key code = 0000
 | |
| I (6583) example: release event, key code = 0000
 | |
| I (7963) example: press event, key code = 0003
 | |
| I (8113) example: release event, key code = 0003
 | |
| I (8773) example: press event, key code = 0103
 | |
| I (8923) example: release event, key code = 0103
 | |
| I (9543) example: press event, key code = 0203
 | |
| I (9683) example: release event, key code = 0203
 | |
| ```
 | 
