.. note::

    ¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 con 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.
    - **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 y sorteos festivos**: 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.3_c:

2.1.3 Módulo de Interruptor Táctil
====================================

Introducción
-------------------

En este proyecto, aprenderás sobre el módulo de interruptor táctil. 
Puede reemplazar los tipos tradicionales de interruptores con estas 
ventajas: operación conveniente, sensación de toque fino, control 
preciso y menor desgaste mecánico.


Componentes Necesarios
------------------------------

En este proyecto, necesitamos los siguientes componentes. 

.. image:: ../img/2.1.3component.png
    :width: 700
    :align: center

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_extension_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_led`
        - |link_led_buy|
    *   - :ref:`cpn_touch_switch`
        - |link_touch_buy|

Diagrama Esquemático
-------------------------

.. image:: ../img/2.1.3circuit.png
    :width: 500
    :align: center

Procedimientos Experimentales
---------------------------------

**Paso 1:** Construir el circuito.

.. image:: ../img/2.1.3fritzing.png
    :width: 700
    :align: center

**Paso 2:** Cambiar de directorio.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/c/2.1.3/

**Paso 3:** Compilar.

.. raw:: html

   <run></run>

.. code-block::

    gcc 2.1.3_TouchSwitch.c -lwiringPi

**Paso 4:** Ejecutar.

.. raw:: html

   <run></run>

.. code-block::

    sudo ./a.out

Mientras el código se está ejecutando, el LED rojo se enciende; cuando tocas el módulo de interruptor táctil, el LED amarillo se enciende.

.. note::

    Si no funciona después de ejecutarlo, o aparece un mensaje de error: \"wiringPi.h: No such file or directory\", por favor consulta :ref:`install_wiringpi`.

**Código**

.. code-block:: c

    #include <wiringPi.h>
    #include <stdio.h>

    #define touchPin        0
    #define led1            3
    #define led2            2

    int main(void)
    {
        // When initialize wiring failed, print message to screen
        if(wiringPiSetup() == -1){
            printf(etup w"siringPi failed !");
            return 1; 
        }
        
        pinMode(touchPin, INPUT);
        pinMode(led1, OUTPUT);
        pinMode(led2, OUTPUT);
        
        while(1){
            // touch switch high, led1 on
            if(digitalRead(touchPin) == 1){
                digitalWrite(led1, LOW);
                digitalWrite(led2, HIGH);
                printf("You touch it! \r\n");
            }
            // touch switch low, led2 on
            if(digitalRead(touchPin) == 0){
                digitalWrite(led2, LOW);
                digitalWrite(led1, HIGH);
            }
        }

        return 0;
    }

**Explicación del Código**

.. code-block:: c

    #define touchPin        0
    #define led1            3
    #define led2            2
    
Los pines GPIO17, GPIO22 y GPIO27 de la T_Extension Board corresponden a los GPIO0, 
GPIO3 y GPIO2 en wiringPi. Asigna GPIO0, GPIO3 y GPIO2 a ``touchPin``, ``led1`` y ``led2``. 

.. code-block:: c

    pinMode(touchPin, INPUT);
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);

Configura ``led1`` y ``led2`` como salidas para escribir valores en ellos y configura
 ``touchPin`` como entrada para leer valores de él.

.. code-block:: c

    while(1){
        // touch switch high, led1 on
        if(digitalRead(touchPin) == 1){
            digitalWrite(led1, LOW);
            digitalWrite(led2, HIGH);
            printf("You touch it! \r\n");
        }
        // touch switch low, led2 on
        if(digitalRead(touchPin) == 0){
            digitalWrite(led2, LOW);
            digitalWrite(led1, HIGH);
        }
    }

Establece un bucle infinito, cuando tocas el módulo de interruptor táctil, ``touchPin`` está alto, ``led1`` se encenderá e imprimirá "You touch it!". Cuando ``touchPin`` está bajo, ``led2`` se encenderá.

Imagen del Fenómeno
------------------------

.. image:: ../img/2.1.3touch_switch_module.JPG
    :width: 500
    :align: center