Signal deactivation problem I am using edgent

Hello good morning, I have been developing a user call system that calls me when there is a problem with a machine.
I have developed a software that when you press a button it sends a signal to blynk iot
and it sends a notification.
I also record several temperature signals and activation of several points of the machine. I would like to know what you think of this code if you need more information I will provide it to you, the fact is that I am immersed in the project and I have several distributed devices. Sometimes the problem is that the call signal remains active and I am not able to deactivate it with the end call button until I activate and deactivate it again, then it acts.
I think one of the problems may come from the program.
I would like you to help me since I am a little overwhelmed with the failures and the thing is that I do not know where to go, I have already tried to put a restart every 4 hours but it does not work either and I think it may be counterproductive.
Another fault sometimes is that the call signal is activated alone, I have some 4k7 resistors in each of the inputs because I do not trust much the resistors of esp 32 by the way the esp is a wroom 32u I also have a capacitor in the input from 3.3v to gnd of 100uf 16v and the thing is that it does not always fail only every time and it is not cyclical,
since I do not know where it can be, what I am most urgent about is the problem that the call is not deactivated when pressing end of call and that is a software problem, let’s see what you see, thanks for your help.
greetings I hope I have not made it too thick, sorry.

//14 aceite bajo
//35 analogica entrada temperatura 10k a ,masa y potenciometro de 100k puesto a 21k
//4 baliza roja
//12 llamada operario
//32 conteo caja
//33 final de averia

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define BLYNK_TEMPLATE_ID "cgxbhgdbhg"
#define BLYNK_DEVICE_NAME "rodadura"
#define BLYNK_FIRMWARE_VERSION        "0.1.0"
#define BLYNK_PRINT Serial
#include <Preferences.h>
//#define BLYNK_DEBUG
#define APP_DEBUG
#define USE_ESP32_DEV_MODULE
#include "BlynkEdgent.h"
#include <Arduino.h>
#include <WiFi.h>
#define OLED_RESET     -1 // Reset pin
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

char ssidi[] = "gfhfsdgdfg";
char passa[] = "dghdghg";
unsigned long h;//-----------------------
int j = 0;//
int l = 0;//variables desde pantalla
int n = 0;//-----------------------------
int r = 0;//variable baliza roja para que no sea pulsado mas de uan vez
int k = 0;// asegura de que no se llame a final de averia si esta en llamada operario
int o = 0;// asegura de que no se llame a final de averia si esta en llamada operario
int q = 0;//nivel minimo de aceite variable para que no sea activado continuamente
int w ;//variable contador de cajas parcial V1
int x = 0;
int z ;//variable contador de cajas total V8
int luzboton = 23;
int aceitedepo = 14;
int cero=13;
unsigned long tiempo_guardado  ;
unsigned long tiempo_guardado1  ;
int llamadaoperario;
int finalaveria;
int bl ;//   BALIZA ROJA 
float temp = 35; //etiqueta para lectura anal�gica PARA SENSOR DE TEMPERAURA
int y = 0;
long rssi;
Preferences preference;

BLYNK_WRITE(V6) { //SENSOR MINIMO ACEITE DEL DEPOSITO esta asociada a la aplicacion atraves de V0 y V0 es correo
  int pinValue = param.asInt();//asocia pinValue a un entero en este caso es V0 que es pin 5 de wemos que D1
  digitalWrite(aceitedepo, pinValue);//V0 es correo
}
//-------------------------------------boleanos para los leds de la aplicacion.

BlynkTimer timer;
WidgetLED led3(V2);//ESTE ES EL LED DE LA BALIZA ROJA ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO

boolean btnState = false;
void ledblynk()
{

  boolean isPressed = (digitalRead(4) == HIGH);

  if (isPressed != btnState) {
    if (isPressed) {
      led3.on();
      r = 1;
    } else {
      led3.off();
      r = 0;
    }
    btnState = isPressed;
  }
}
WidgetLED led4(V3);//ESTE ES EL LED DE LLAMADA DE OPERARIO ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO

boolean btnState1 = false;
void ledblynk1()
{

  boolean isPressed = (digitalRead(12) == HIGH);

  if (isPressed != btnState1) {
    if (isPressed) {
      led4.on();
      k = 1;
    }
    btnState1 = isPressed;
  }
}
WidgetLED led5(V6);//ESTE ES EL LED DE NIVEL MINIMO DE DEPOSITO ES UN BOLEANO QUE VIGILA LA SEÑAL PARA CAMBIAR DE ESSTADO

boolean btnState2 = false;
void ledblynk2()
{

  boolean isPressed = (digitalRead(14) == HIGH);

  if (isPressed != btnState2) {
    if (isPressed) {
      led5.off();
      unsigned long tiempo = millis();
      tiempo_guardado = tiempo;
    } else {
      led5.on();
      q = 0;
    }
    btnState2 = isPressed;
  }
}

WidgetLED led6(V5);//ESTE ES EL LED de conteo de las cajas rodadas

boolean btnState3 = false;
void ledblynk3()
{
  unsigned long tiempo = millis();
  boolean isPressed = (digitalRead(32) == LOW);

  if (isPressed != btnState3) {
    if (isPressed) {
      led6.off();
    } else {
      led6.on();
      tiempo_guardado1 = tiempo;
      x = 1;
      delay(100);
    }
    btnState3 = isPressed;
  }
}
void temperatura()
{
  //++++++++++++++++++++++++++++++++++analogica de temperatura
  int pot;
  pot = analogRead(temp);
  y = map(pot, 0, 4095, 0, 100); //funci�n map para escalado
  Blynk.virtualWrite(V0, y);
  Serial.println(y);
  if ( y >= 80)
  {
    Serial.println("temperatura alta");
    Blynk.logEvent("tempalta");
  }
}
///-------------------------------llamada operario
void operario()
{
   unsigned long tiempo = millis();
  llamadaoperario = digitalRead(12);//  12 LLAMADA OPERARIO ES U positivo LA SEÑAL ES DE ENTRADA
  if ( (llamadaoperario == HIGH) && ( k == 1) && (o == 0))
  {
    digitalWrite(luzboton, HIGH);
    Serial.println("se ha pulsado boton de llamada");
    Blynk.logEvent("llamaope");
    ledblynk1();
    o = 1;
  }
}
//---------------funcion final de averia
void finalave()
{
  finalaveria = digitalRead(33);
  if  ((finalaveria == HIGH) && (o == 1))
  {

    led4.off();
    Blynk.virtualWrite(V7, 33);
    Serial.println("se ha terminado la averia");
    Blynk.logEvent("finalaveria");
    o = 0;
    digitalWrite(luzboton, LOW);
  }
}
//----------------BALIZA ROJA
void baliza()
{
  bl = digitalRead(4);
  if ( (bl == HIGH) && (r == 0))
  {
    Serial.println("baliza roja encendida");
    Blynk.logEvent("balizaroja");
    ledblynk();
  }
}

//-------------------resear contador  parcial  pin 13
void contadorcero()
{
  int ceroo= digitalRead(cero);
  if (ceroo==HIGH ) {
    w = 0;
    preference.remove("parcial");
    Blynk.virtualWrite(V1, w);
    Serial.println("parcial a cero");
  }
}
void conteo()
{
  //----------cuenta caja cada vez que se rueda 5 minutos seguidos para llevar preventivos en cuenta

  unsigned long tiempo = millis();
  int cuenta = digitalRead(32);//conteo cajas
  if ((cuenta == 1) && (tiempo - tiempo_guardado1 >= 300000) && (btnState3 == LOW) && (x == 1)) {

    preference.putUInt("parcial", w);
    w++;
    Blynk.virtualWrite(V1, w);
    preference.putUInt("fijo", z);
    z++;
    Blynk.virtualWrite(V8, z);
    x = 0;
    Serial.println("caja rodada ");

  }
}
//----------------------señal minimo de aceite
void aceite()
{
  unsigned long tiempo = millis();
  if ((tiempo - tiempo_guardado >= 10000) && (btnState2 == 1) && (q == 0)) //envia a los 10 segundos de falta de aceite
  {
    q = 1;
    Serial.println("bajo  nivel de aceite");
    Blynk.logEvent("minimoaceite");
    ledblynk2();
  }
}
void rssimi()
{
  rssi = WiFi.RSSI();
  Blynk.virtualWrite(V9, rssi); 
  Serial.println(rssi);
}  
void setup()
{
  Serial.begin(115200);
    
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); 
  }
  preference.begin("my-app", false);
  w = preference.getUInt("parcial", 0);
  z = preference.getUInt("fijo", 0);
  WiFi.begin(ssidi, passa);
  timer.setInterval(8209L, temperatura);
  timer.setInterval(8783L, ledblynk);//baliza roja
  timer.setInterval(7529L, aceite);
  timer.setInterval(5839L, ledblynk2);//nivel aceite
  timer.setInterval(6367L, contadorcero);
  timer.setInterval(3037L, conteo);
  timer.setInterval(2477L, ledblynk3);//conteo de cajas
  timer.setInterval(2111L, pantalla);
  timer.setInterval(1597L, baliza);
  timer.setInterval(919L, ledblynk1);//led lamada operario cada 900ms   
  timer.setInterval(619L, operario);
  timer.setInterval(439L, finalave);// se vigila cada 439ms
  timer.setInterval(5209L, rssimi);


  BlynkEdgent.begin();
  pinMode(luzboton, OUTPUT);
  pinMode(14, INPUT);
  pinMode(12, INPUT);
  pinMode(32, INPUT);
  pinMode(33, INPUT);
  pinMode(4, INPUT);
  pinMode(cero, INPUT);
  pinMode(2, OUTPUT);
 
}
void loop() {
  BlynkEdgent.run();
  timer.run();
  unsigned long reinicio=millis();
  if(reinicio == 3600000){
     Serial.println("restaurando");
    ESP.restart();
    
  }
}
//-----------------------señales de pantalla
void pantalla()
{
  h = digitalRead(14); // SENSOR DE ACEITE ES POSITIVO LA SEÑAL DE ENTRADA
  j = digitalRead(12); //  LLAMADA OPERARIO ES un positivo LA SEÑAL ES DE ENTRADA
  l = digitalRead(4); //   BALIZA ROJA ACTIVA  LA SEÑAL DE ENTRADA ES positivo
  n = digitalRead(33); // final averia ES positivo LA SEÑAL DE ENTRADA
  //-----------------------------------DIBIJO DE CUADROS Y SEÑALES DE ENTRADA Y SALIDA
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,6);
  display.println("LLAMADA OPERARIO");

      display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,16);
  display.println("NUMERO RODAJES");

        display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,36);
  display.println("BALIZA ROJA");

        display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,46);
  display.println("FINAL AVERIA");

   
      display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,26);
  display.println("SENSOR ACEITE");

       display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,56);
  display.println("TEMPERATURA ACIT");
  if (h == 0) {
   display.setCursor(120, 26);
  display.println("1");
  }
  if (h != 0) {
   display.setCursor(120, 26);
  display.println("0");
  }

  display.setCursor(114, 16);
  display.println(w);

  if (j == 0) {               //llamada operario
     display.setCursor(120, 6);
  display.println("0");
  }
  if (j != 0) {
     display.setCursor(120, 6);
  display.println("1");
  }
  if (l != 0) {
    display.setCursor(120, 36);
  display.println("1");
  }
  if (l == 0) {
    display.setCursor(120, 36);
  display.println("0");
  }
  if (n != 0) {
   display.setCursor(120, 46);
  display.println("1");
  }
  if (n == 0) {
  display.setCursor(120, 46);
  display.println("0");
  }
    display.setCursor(114, 56);
  display.println(y);
 display.display();

}```