Nota

¡Hola, bienvenido a la Comunidad de Entusiastas de 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 previas exclusivas: Obtén acceso anticipado a nuevos anuncios de productos y avances.

  • Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.

  • Promociones festivas y sorteos: Participa en sorteos y promociones especiales de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.

1.10 Detección de Cambio de Estado

Resumen

Cuando utilizas un botón, no solo puedes presionar el botón para encender el LED, soltarlo para apagarlo, sino también alternar el estado de funcionamiento del LED cada vez que se presiona el botón. Para lograr este efecto, necesitas saber cuándo el estado del botón cambia de apagado a encendido, es decir, la «detección de cambio de estado». En esta lección, imprimiremos los resultados de la detección de cambio de estado del botón en el monitor serie.

Componentes necesarios

../_images/list_1.10.png

Circuito Fritzing

En este ejemplo, utilizamos el pin 2 para leer la señal del botón.

../_images/image40.png

Diagrama esquemático

../_images/image412.png

Código

Nota

  • Puedes abrir el archivo 1.10_stateChangeDetection.ino en la ruta sunfounder_vincent_kit_for_arduino\code\1.10_stateChangeDetection directamente.

  • O copiar este código en el IDE de Arduino.

Después de cargar el código en la placa Mega2560, el número de salida cambiará entre 0 y 1 cada vez que presiones el botón.

Análisis del código

Declara un pin conectado al botón.

const int  buttonPin = 2;

Declara una variable llamada 「detectionState」para registrar cada estado de la detección de cambio de estado.

int detectionState = 0;

Declara dos variables para leer el estado del botón para la detección de cambio de estado.

int buttonState = 0;
int lastButtonState = 0;

En setup(), inicializa los pines y luego inicia el monitor serie.

pinMode(buttonPin, INPUT);
Serial.begin(9600);

En loop(), lee el valor de buttonPin y asígnalo a la variable buttonState.

buttonState = digitalRead(buttonPin);

Compara buttonState con lastButtonState. Si no son iguales, indica que el estado ha cambiado. Se necesita un delay(50) para realizar la eliminación de rebotes durante la detección del cambio. Después de la comparación, asigna buttonState a lastButtonState para hacer el siguiente juicio.

if (buttonState != lastButtonState) {
...
    delay(50);
}
lastButtonState = buttonState;

Una vez hecho el juicio de cambio de estado (buttonState != lastButtonState), se realiza un juicio adicional para obtener la condición「Presionar el botón」.

if (buttonState == HIGH) {
...
    }

Bajo la condición「Presionar el botón」, detectionState se alterna entre 1 y 0. Al mismo tiempo, se imprime el valor de detectionState.

detectionState=(detectionState+1)%2;
Serial.print("El estado de detección es:");
Serial.println(detectionState);

Imagen del fenómeno

../_images/image413.png