.. note:: ¡Hola! Bienvenidos a la Comunidad de Entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas. **¿Por qué unirse?** - **Soporte experto**: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprende y comparte**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances exclusivos**: Obtén acceso anticipado a nuevos anuncios de productos y adelantos. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más nuevos. - **Promociones festivas y sorteos**: Participa en sorteos y promociones de temporada. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _2.1.8_c: 2.1.8 Teclado ==================== Introducción --------------- Un teclado es una matriz rectangular de botones. En este proyecto, lo utilizaremos para introducir caracteres. Componentes necesarios -------------------------- En este proyecto, necesitamos los siguientes componentes. .. image:: ../img/list_2.1.5_keypad.png Es definitivamente conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ELEMENTOS EN ESTE KIT - ENLACE * - Kit Raphael - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los siguientes enlaces. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DEL COMPONENTE - ENLACE DE COMPRA * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_keypad` - \- Diagrama esquemático ------------------------ .. image:: ../img/image315.png .. image:: ../img/image316.png Procedimientos Experimentales -------------------------------- **Paso 1:** Construye el circuito. .. image:: ../img/image186.png **Paso 2:** Abre el archivo de código. .. raw:: html .. code-block:: cd ~/raphael-kit/c/2.1.8/ **Paso 3:** Compila el código. .. raw:: html .. code-block:: gcc 2.1.8_Keypad.cpp -lwiringPi **Paso 4:** Ejecuta. .. raw:: html .. code-block:: sudo ./a.out Después de ejecutar el código, los valores de los botones presionados en el teclado (button Value) se imprimirán en la pantalla. .. note:: Si no funciona después de ejecutar el código, o hay un mensaje de error: \"wiringPi.h: No such file or directory\", por favor, consulta :ref:`install_wiringpi`. **Código** .. code-block:: c #include #include #define ROWS 4 #define COLS 4 #define BUTTON_NUM (ROWS * COLS) unsigned char KEYS[BUTTON_NUM] { '1','2','3','A', '4','5','6','B', '7','8','9','C', '*','0','#','D'}; unsigned char rowPins[ROWS] = {1, 4, 5, 6}; unsigned char colPins[COLS] = {12, 3, 2, 0}; void keyRead(unsigned char* result); bool keyCompare(unsigned char* a, unsigned char* b); void keyCopy(unsigned char* a, unsigned char* b); void keyPrint(unsigned char* a); void keyClear(unsigned char* a); int keyIndexOf(const char value); void init(void) { for(int i=0 ; i<4 ; i++) { pinMode(rowPins[i], OUTPUT); pinMode(colPins[i], INPUT); } } int main(void){ unsigned char pressed_keys[BUTTON_NUM]; unsigned char last_key_pressed[BUTTON_NUM]; if(wiringPiSetup() == -1){ //when initialize wiring failed,print message to screen printf("setup wiringPi failed !"); return 1; } init(); while(1){ keyRead(pressed_keys); bool comp = keyCompare(pressed_keys, last_key_pressed); if (!comp){ keyPrint(pressed_keys); keyCopy(last_key_pressed, pressed_keys); } delay(100); } return 0; } void keyRead(unsigned char* result){ int index; int count = 0; keyClear(result); for(int i=0 ; i