Interrupcion con bluetooth

Hola. soy nuevo usando arduino, estoy haciendo un programa a grandes rasgos de la activacion de un motor con un paro de emergencia, necesito interrumpir la operacion del motor en cualquier momento del programa enviando un caracter desde la app, he intentado de todo pero no consigo realizar la interrupcion correctamente, por favor

#include "BluetoothSerial.h"
#include <Arduino.h>
#include <HCSR04.h>
//inicializacion BT
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;

//settear motor a pasos
#define EN_PIN    22 //enable (CFG6)
#define DIR_PIN   23 //direction
#define STEP_PIN  21 //step

//variables a usar
int contadorbotellas = 0, estadodeposito, niveldeposito, pasosavanzados, vuelta = 0, i;
char recibido = '0';
float  distanciainicial = 0;


void setup()
{
  Serial.begin(9600);
  SerialBT.begin("esp32");
  //attachInterrupt(digitalPinToInterrupt(loop), paroemergencia, CHANGE);

  pinMode(EN_PIN, OUTPUT);
  digitalWrite(EN_PIN, HIGH); //deactivate driver (LOW active)
  pinMode(DIR_PIN, OUTPUT);

  digitalWrite(DIR_PIN, LOW); //LOW or HIGH
  pinMode(STEP_PIN, OUTPUT);
  digitalWrite(STEP_PIN, LOW);

  digitalWrite(EN_PIN, LOW); //activate driver
  //LED BUILT_IN is GPIO 33
  pinMode(33, OUTPUT); // Set the pin as output

  //distanciainicial = hc.dist() ;

}

void loop() {
  // put your main code here, to run repeatedly:
  recibir();
}

void recibir()
{
  if (SerialBT.available())
  {
    recibido = SerialBT.read();
  }
  switch (recibido)
  {
    case '1':
      avanzar();
      break;
    case '2':
      paro();
      break;
    default:
      break;
  }
}


void avanzar()
{
  Serial.println("en movimiento");
  for (i = 1; i <= 6; i++)
  {
    //encerder bomba
    for (int j = 0; j <= 100; j++)
    {
      Serial.println(j);
      motoractivado();
    }
    vuelta++;
    contadorbotellas++;
    Serial.print("vuelta: ");
    Serial.println(vuelta);
    Serial.print("Botellas llenas: ");
    Serial.println(contadorbotellas);
    if (i == 6)
    {
      recibido = '0';
      vuelta = 0;
      contadorbotellas = 0;
      Serial.println("proceso finalizado");
    }
    SerialBT.print(vuelta);
    SerialBT.print(";");
    SerialBT.print(contadorbotellas);
    SerialBT.print(";");
  }
}

void motoractivado()
{
      recibido = '1';
//  Serial.println("High");
//  digitalWrite(STEP_PIN, HIGH);
//  delay(2);
//  Serial.println("Low");
//  digitalWrite(STEP_PIN, LOW);
//  recibir();
//  delay(2);
}

void paro()
{
  recibido = '0';
  digitalWrite(STEP_PIN, LOW);
  Serial.println("detenido");
  recibir();
}

No lee bluetooth mientras el motor está funcionando, por lo que hasta que no se detenga, los comandos no funcionan.
Primero, intente insertar la lectura de bluetooth dentro del procedimiento avanzar()

El código esta mal armado, la rutina de lecturas queda AISLADA de la operación general y bloqueante del código que has escrito.
Tienes dos ciclos for, uno que aumenta supuestamente las botellas y otro que itera 100 veces no se para qué o con qué propósito.
De todos modos entiendo algo, es tu primer programa y es normal confundir las cosas.
Cómo aún no estas contaminado (por ejemplo con delay ) y he visto cosas interesantes a ver si reformulando las cosas, le damos un empujón a tu programa.

Esta parte del código o sea el loop esta perfecta.
Lo que no esta bien es algo de lo pusiste dentro para simular situaciones.
avanzar() y detener o paro() deben ser eso y nada más.
Contar botellas, vueltas o lo que gustes debe ser algo que funcione porque se da una condición o evento.
La botella atraviesa un microswitch, un sensor optico o es detectada por una camara que envía un comando via un pin y lo lee el arduino. Solo te doy ejemplo porque tal vez exageré.

Entonces tu loop funciona para avanzar o retroceder sea que envies 1 o 2 y luego que?
Define ese qué o cómo sigue?
Qué elemento dispara la cuenta de la botella?
Definido eso ya verás que todo se encamina.