.. note:: ¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas. **¿Por qué unirse?** - **Soporte Experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprender y Compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Vistas Exclusivas**: Obtén acceso anticipado a anuncios de nuevos productos y avances. - **Descuentos Especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes. - **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. .. _2.1.5_keypad_c_pi5: 2.1.5 Teclado ================= Introducción ---------------- Un teclado es una matriz rectangular de botones. En este proyecto, lo utilizaremos para ingresar caracteres. Componentes ----------------- .. image:: img/list_2.1.5_keypad.png Principio -------------- **Teclado** Un teclado es una matriz rectangular de 12 o 16 botones ON-OFF. Sus contactos se acceden a través de un conector adecuado para su conexión a un cable plano o para su inserción en una placa de circuito impreso. En algunos teclados, cada botón conecta con un contacto separado en el conector, mientras que todos los botones comparten un terreno común. .. image:: img/image314.png Más comúnmente, los botones están codificados en matriz, lo que significa que cada uno de ellos conecta un par único de conductores en una matriz. Esta configuración es adecuada para el sondeo por parte de un microcontrolador, que puede ser programado para enviar un pulso de salida a cada uno de los cuatro cables horizontales a su vez. Durante cada pulso, se verifica secuencialmente los cuatro cables verticales restantes para determinar cuál de ellos, si acaso, está transportando una señal. Se deben agregar resistencias pull-up o pull-down a los cables de entrada para evitar que las entradas del microcontrolador se comporten de manera impredecible cuando no hay señal presente. Diagrama Esquemático ------------------------- .. image:: img/image315.png .. image:: img/image316.png Procedimientos Experimentales --------------------------------- **Paso 1:** Construir el circuito. .. image:: img/image186.png :width: 800 **Paso 2:** Abre el archivo de código. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/c/2.1.5/ **Paso 3:** Compilar el código. .. raw:: html .. code-block:: gcc 2.1.5_Keypad.cpp -lwiringPi **Paso 4:** Ejecutar. .. raw:: html .. code-block:: sudo ./a.out Después de ejecutar el código, se imprimirán en pantalla los valores de los botones presionados en el teclado (valor del botón). .. note:: Si no funciona después de ejecutarse, o si aparece un mensaje de error: \"wiringPi.h: No such file or directory\", consulta :ref:`faq_c_nowork`. **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){ // si la inicialización de wiring falla, imprime un mensaje en pantalla 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