.. 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é unirte?**

    - **Soporte experto**: Resuelve problemas post-venta 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**: Accede anticipadamente a anuncios de nuevos productos y vistas previas.
    - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
    - **Promociones festivas y sorteos**: Participa en sorteos y promociones navideñas.

    👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy.

2.1.3 Interruptor de inclinación
==================================

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

Este es un interruptor de inclinación con una bola metálica en su interior. Se utiliza para detectar inclinaciones de un pequeño ángulo.

Componentes
-------------

.. image:: img/list_2.1.3_tilt_switch.png


Principio
------------

**Interruptor de inclinación**

El principio es muy simple. Cuando el interruptor se inclina a un cierto ángulo, 
la bola en su interior rueda y toca los dos contactos conectados a los pines 
externos, activando así los circuitos. De lo contrario, la bola se mantendrá 
alejada de los contactos, interrumpiendo así los circuitos.

.. image:: img/image167.png

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

.. image:: img/image307.png


.. image:: img/image308.png


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

**Paso 1:** Construir el circuito.

.. image:: img/image169.png
    :width: 800

**Paso 2:** Cambiar de directorio.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/davinci-kit-for-raspberry-pi/c/2.1.3/

**Paso 3:** Compilar.

.. raw:: html

   <run></run>

.. code-block::

    gcc 2.1.3_Tilt.c -lwiringPi

**Paso 4:** Ejecutar.

.. raw:: html

   <run></run>

.. code-block::

    sudo ./a.out

Coloca el interruptor en posición horizontal, y el LED verde se encenderá. 
Si lo inclinas, se imprimirá "¡Inclinación!" en la pantalla y se encenderá 
el LED rojo. Colócalo nuevamente en posición horizontal, y el LED verde se 
encenderá de nuevo.

.. note::

    Si no funciona después de ejecutarlo, o si aparece un mensaje de error: \"wiringPi.h: No such file or directory", consulta :ref:`C code is not working?`.

**Código**

.. code-block:: c

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

    #define TiltPin     0
    #define Gpin        2
    #define Rpin        3

    void LED(char* color)
    {
        pinMode(Gpin, OUTPUT);
        pinMode(Rpin, OUTPUT);
        if (color == "RED")
        {
            digitalWrite(Rpin, HIGH);
            digitalWrite(Gpin, LOW);
        }
        else if (color == "GREEN")
        {
            digitalWrite(Rpin, LOW);
            digitalWrite(Gpin, HIGH);
        }
        else
            printf("LED Error");
    }

    int main(void)
    {
        // Cuando la inicialización falla, imprime un mensaje en pantalla
        if(wiringPiSetup() == -1){
            printf("setup wiringPi failed !");
            return 1;
        }

        pinMode(TiltPin, INPUT);
        LED("GREEN");
        
        while(1){
            // Indica que el botón ha sido presionado
            if(0 == digitalRead(TiltPin)){
                delay(10);
                if(0 == digitalRead(TiltPin)){
                    LED("RED");
                    printf("Tilt!\n");
                    delay(100);
                }
            }
            else if(1 == digitalRead(TiltPin)){
                delay(10);
                if(1 == digitalRead(TiltPin)){
                    LED("GREEN");
                }
            }
        }
        return 0;
    }

**Explicación del Código**

.. code-block:: c

    void LED(char* color)
    {
        pinMode(Gpin, OUTPUT);
        pinMode(Rpin, OUTPUT);
        if (color == "RED")
        {
            digitalWrite(Rpin, HIGH);
            digitalWrite(Gpin, LOW);
        }
        else if (color == "GREEN")
        {
            digitalWrite(Rpin, LOW);
                digitalWrite(Gpin, HIGH);
        }
        else
            printf("LED Error");
        }

Cuando el interruptor de inclinación está inclinado hacia la derecha, el pin 
del medio y el de la derecha están conectados; la Raspberry Pi lee un nivel 
alto en el pin del medio, por lo que el LED1 se enciende y el LED2 se apaga.

.. code-block:: c

    while(1){
            if(0 == digitalRead(TiltPin)){
                delay(10);
                if(0 == digitalRead(TiltPin)){
                    LED("RED");
                    printf("Tilt!\n");
                }
            }
            else if(1 == digitalRead(TiltPin)){
                delay(10);
                if(1 == digitalRead(TiltPin)){
                    LED("GREEN");
                }
            }
        }

Cuando el interruptor de inclinación está inclinado hacia la izquierda, 
el pin del medio y el de la izquierda están conectados; la Raspberry Pi 
lee un nivel bajo, por lo que el LED2 se enciende y el LED1 se apaga.
