Ger.ar

  • Servicios
  • Contacto

Configurar interrupciones en ESP8266


Categoría:

Electrónica

Configuración de interrupciones ESP8266 en Arduino IDE

La función attachInterrupt tiene 3 argumentos:

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

digitalPinToInterrupt(pin): Esta es una función que toma el pin GPIO de la placa ESP8266 como un parámetro dentro de ella. El pin denota el GPIO asociado con el pin que provocará que ocurra una interrupción. Por ejemplo, si configura GPIO2 como un pin de interrupción, la función se especificará como digitalPinToInterrupt(2). Puede usar cualquiera de los pines de interrupción ESP8266 que se muestran en el diagrama anterior, como un parámetro dentro de esta función.

ISR: este es el segundo argumento utilizado para configurar una interrupción. Es un tipo especial de función conocida como Rutina de Servicio de Interrupción que no toma parámetros y tampoco devuelve nada. Cada vez que ocurra la interrupción, se llamará a esta función.

mode: Esto denota la acción de activación para que ocurra la interrupción. Los cuatro parámetros siguientes se utilizan para especificar el modo:

LOW (BAJO) Esto se usa para activar la interrupción cuando el pin está en un estado bajo.

CHANGE (CAMBIO): Esto se usa para disparar la interrupción cuando el pin cambia su estado (HIGH-LOW o LOW-HIGH)

RISING: Esto se usa para activar la interrupción cuando el pin pasa de BAJO a ALTO.+

const int led_pin = LED_BUILTIN;
const int sensor_pin = D1;

unsigned long current_time = millis();
unsigned long last_trigger = 0;
//boolean timer_on = false;

volatile long cuentaVuelta;

ICACHE_RAM_ATTR void movement_detection() {
  //Serial.println("Motion was detected");
  cuentaVuelta++;
  last_trigger = millis();
}

void setup() {

  Serial.begin(115200);

  pinMode(sensor_pin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(sensor_pin), movement_detection, RISING);
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, LOW);
}

long cuentaVueltaAnterior;

void loop() {
  static unsigned long lastTimer;
  if (millis() > lastTimer + 1000) { //Timer por 1 segundo
    
    lastTimer = millis();

    if (cuentaVuelta != cuentaVueltaAnterior) {
      Serial.print("Tacómetro: ");
      Serial.print(cuentaVuelta);
      Serial.println("por segundo");
      cuentaVuelta = 0;
    }
    else {
      Serial.println("No se han detectado vueltas");
    }
  }
}

Recomendado:

¿Necesitás que un especialista te ayude con tu proyecto?

  • Tutoría / Consultoria 1er sesión

    Tutoría / Consultoria 1er sesión

    Leer más
←Interrupciones en un microcontrolador
Utilizar ambos núcleos de un ESP32→

Comentarios

Una respuesta a “Configurar interrupciones en ESP8266”

  1. Eduard Avatar
    mayo 2, 2023
    Eduard

    Gracias por explicar tan bien y todo en un tutorial, ha sido realmente de mucha ayuda. Quisiera saber si se usan los mismos métodos para esp32.

    Responder

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  • Programación de funciones para robot cuadrúpedo
  • Secuenciómetro para máquina industrial programado en Arduino IDE + Código en C++
  • Cómo medir temperatura y humedad con Arduino y los sensores DHT11-DHT22
  • Arrays: Variables multiplicadas
  • Utilización de #define
  • Typedef Struct
Ger.ar

Ger.ar

Blog y Servicios

  • Programación
  • ELECTRÓNICA
  • About
  • Servicios

2026 Ger.ar

Contacto

Tu carrito (items: 0)

Productos en el carrito

Producto Detalles Total
Subtotal $0.00
Envío, impuestos y descuentos se calculan en el checkout.
Ver carrito
Finalizar compra

¡Tu carrito en este momento está vacío!

Contratar

Avisos