Nota

¡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 [Aquí] y únete hoy.

2.1.1 Botón

Introducción

En esta lección, aprenderemos a encender o apagar el LED utilizando un botón.

Componentes

../_images/list_2.1.1_Button1.png

Principio

Botón

El botón es un componente común utilizado para controlar dispositivos electrónicos. Se utiliza generalmente como un interruptor para conectar o desconectar circuitos. Aunque los botones vienen en una variedad de tamaños y formas, el que se utiliza aquí es un mini botón de 6 mm, como se muestra en las siguientes imágenes.

Los dos pines a la izquierda están conectados, y el de la derecha es similar al de la izquierda, como se muestra a continuación:

../_images/image1481.png

El símbolo que se muestra a continuación se utiliza comúnmente para representar un botón en circuitos.

../_images/image3011.png

Cuando se presiona el botón, los 4 pines se conectan, cerrando así el circuito.

Diagrama Esquemático

Utiliza un botón normalmente abierto como entrada para Raspberry Pi; la conexión se muestra en el diagrama esquemático a continuación. Cuando se presiona el botón, el GPIO18 se convierte en nivel bajo (0V). Podemos detectar el estado del GPIO18 a través de programación. Es decir, si el GPIO18 se convierte en nivel bajo, significa que el botón está presionado. Puedes ejecutar el código correspondiente cuando se presiona el botón, y luego el LED se encenderá.

Nota

El pin más largo del LED es el ánodo y el más corto es el cátodo.

../_images/image3021.png ../_images/image3031.png

Procedimientos Experimentales

Paso 1: Construir el circuito.

../_images/image1521.png

Paso 2: Abre el archivo de código.

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

Nota

Cambia el directorio a la ruta del código en este experimento mediante cd.

Paso 3: Compila el código.

gcc 2.1.1_Button.c -lwiringPi

Paso 4: Ejecuta el archivo ejecutable.

sudo ./a.out

Después de ejecutar el código, presiona el botón; el LED se encenderá; de lo contrario, se apagará.

Nota

Si no funciona después de ejecutarlo, o si aparece un mensaje de error: «wiringPi.h: No such file or directory», consulta ¿El código en C no funciona?.

Código

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

#define LedPin      0
#define ButtonPin   1

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

    pinMode(LedPin, OUTPUT);
    pinMode(ButtonPin, INPUT);
    digitalWrite(LedPin, HIGH);

    while(1){
        // Indica que el botón ha sido presionado
        if(digitalRead(ButtonPin) == 0){
            // LED encendido
            digitalWrite(LedPin, LOW);
        //  printf("...LED encendido\n");
        }
        else{
            // LED apagado
            digitalWrite(LedPin, HIGH);
        //  printf("LED apagado...\n");
        }
    }
    return 0;
}

Explicación del Código

#define LedPin      0

El pin GPIO17 en la placa de expansión T es igual al GPIO0 en wiringPi.

#define ButtonPin   1

ButtonPin está conectado al GPIO1.

pinMode(LedPin, OUTPUT);

Establece LedPin como salida para asignarle un valor.

pinMode(ButtonPin, INPUT);

Establece ButtonPin como entrada para leer el valor de ButtonPin.

while(1){
        // Indica que el botón ha sido presionado
        if(digitalRead(ButtonPin) == 0){
            // LED encendido
            digitalWrite(LedPin, LOW);
        //  printf("...LED encendido\n");
        }
        else{
            // LED apagado
            digitalWrite(LedPin, HIGH);
        //  printf("LED apagado...\n");
        }
    }

if (digitalRead(ButtonPin) == 0): verifica si el botón ha sido presionado. Ejecuta digitalWrite(LedPin, LOW) cuando se presiona el botón para encender el LED.