Edgent data consumption

In that case, just call the function. No timer required.

Pete.

Did you actually read the “Staggering Times” section of my tutorial?

As far as your interrupt is concerned, you’re doing everything wrong.

First of all, there is no debounce routine, so a physical switch will trigger the ISR multiple times because of the electrical noise created when the contacts make or break.
Secondly, you aren’t following the rules about the use of volatile variables in IRSs, or keeping the ISR as clean and simple.
Thirdly, you’re calling the ledblynk1() function from within your ISR.

Pete.

Of course I have read your article, but in the end you have to consult a post by gummer to see the solution and please stop suspecting that I have not read your article. The problem is that I read it from a translator and the translations are not always clean, as you will understand. So please guide me from knowledge. In the end I have put prime numbers in the timer in this way it will never coincide with the others I think that this way is fine, greetings and thanks.
I’m doing what I can from my humble position.

//21 luz boton
//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
//pantalla lcd 128x64 st 7920---------------
//BLK-GND
//BLA-3,3v
//RST-22
//PBS-GND
//E  -18
//R/W-23
//RS -5
//VCC-5v
//GND-GND
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_DEVICE_NAME ""
#define BLYNK_FIRMWARE_VERSION        "0.1.0"
#define BLYNK_PRINT Serial
#include <Preferences.h>
//#define BLYNK_DEBUG
#define APP_DEBUG
#define USE_WROVER_BOARD
#include "BlynkEdgent.h"
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
unsigned long h;
int i = 0;
int j = 0;
int l = 0;
int n = 0;
int r = 0;
int k = 0;
int o = 0;
int q = 0;
int w ;
int x = 0;
int z ;
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18, /* data=*/ 23, /* CS=*/ 5, /* reset=*/ 22); // ESP32 ACTUAL
int luzboton = 21;
int aceitedepo = 14;
int capacitiveValue = 100;
int threshold = 20;
unsigned long tiempo_guardado  ;
unsigned long tiempo_guardado1  ;
int llamadaoperario;
int finalaveria;
int bl ;//   BALIZA ROJA 
int ma = 0;
float temp = 35; //etiqueta para lectura anal�gica PARA SENSOR DE TEMPERAURA
int y = 0;
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");
  }
}
void logoser()
{
  //-----------------------------------------LOGO DE JOHN DEERE Y SERVEO
  u8g2.setFont(u8g2_font_lucasarts_scumm_subtitle_r_tf);
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 46, 128, 64, 7);
  u8g2.drawStr(4, 60, "SERVEO    ");
  u8g2.drawStr(0, 80, "in association ");
  u8g2.drawStr(0, 100, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 44, 128, 64, 7);
  u8g2.drawStr(4, 58, "SERVEO     ");
  u8g2.drawStr(0, 78, "in association ");
  u8g2.drawStr(0, 98, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 42, 128, 64, 7);
  u8g2.drawStr(4, 56, "SERVEO    ");
  u8g2.drawStr(0, 76, "in association ");
  u8g2.drawStr(0, 96, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();


  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 40, 128, 64, 7);
  u8g2.drawStr(4, 54, "SERVEO    ");
  u8g2.drawStr(0, 74, "in association ");
  u8g2.drawStr(0, 94, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 38, 128, 64, 7);
  u8g2.drawStr(4, 52, "SERVEO    ");
  u8g2.drawStr(0, 72, "in association ");
  u8g2.drawStr(0, 92, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 36, 128, 64, 7);
  u8g2.drawStr(4, 50, "SERVEO    ");
  u8g2.drawStr(0, 70, "in association ");
  u8g2.drawStr(0, 90, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 34, 128, 64, 7);
  u8g2.drawStr(4, 48, "SERVEO     ");
  u8g2.drawStr(0, 68, "in association ");
  u8g2.drawStr(0, 88, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 32, 128, 64, 7);
  u8g2.drawStr(4, 46, "SERVEO   ");
  u8g2.drawStr(0, 66, "in association ");
  u8g2.drawStr(0, 86, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 30, 128, 64, 7);
  u8g2.drawStr(4, 44, "SERVEO    ");
  u8g2.drawStr(0, 64, "in association ");
  u8g2.drawStr(0, 84, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 28, 128, 64, 7);
  u8g2.drawStr(4, 42, "SERVEO    ");
  u8g2.drawStr(0, 62, "in association ");
  u8g2.drawStr(0, 82, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 26, 128, 64, 7);
  u8g2.drawStr(4, 40, "SERVEO   ");
  u8g2.drawStr(0, 60, "in association ");
  u8g2.drawStr(0, 80, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 24, 128, 64, 7);
  u8g2.drawStr(4, 38, "SERVEO   ");
  u8g2.drawStr(0, 58, "in association ");
  u8g2.drawStr(0, 78, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 22, 128, 64, 7);
  u8g2.drawStr(4, 36, "SERVEO    ");
  u8g2.drawStr(0, 56, "in association ");
  u8g2.drawStr(0, 76, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();


  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 20, 128, 64, 7);
  u8g2.drawStr(4, 34, "SERVEO    ");
  u8g2.drawStr(0, 54, "in association ");
  u8g2.drawStr(0, 74, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 18, 128, 64, 7);
  u8g2.drawStr(4, 32, "SERVEO    ");
  u8g2.drawStr(0, 52, "in association ");
  u8g2.drawStr(0, 72, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 16, 128, 64, 7);
  u8g2.drawStr(4, 30, "SERVEO    ");
  u8g2.drawStr(0, 50, "in association ");
  u8g2.drawStr(0, 70, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 14, 128, 64, 7);
  u8g2.drawStr(4, 28, "SERVEO    ");
  u8g2.drawStr(0, 48, "in association ");
  u8g2.drawStr(0, 68, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();


  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 12, 128, 64, 7);
  u8g2.drawStr(4, 26, "SERVEO     ");
  u8g2.drawStr(0, 46, "in association ");
  u8g2.drawStr(0, 66, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 10, 128, 64, 7);
  u8g2.drawStr(4, 24, "SERVEO    ");
  u8g2.drawStr(0, 44, "in association ");
  u8g2.drawStr(0, 64, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 8, 128, 64, 7);
  u8g2.drawStr(4, 22, "SERVEO     ");
  u8g2.drawStr(0, 42, "in association ");
  u8g2.drawStr(0, 62, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 6, 128, 64, 7);
  u8g2.drawStr(4, 20, "SERVEO    ");
  u8g2.drawStr(0, 40, "in association ");
  u8g2.drawStr(0, 60, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();

  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 4, 128, 64, 7);
  u8g2.drawStr(4, 18, "SERVEO    ");
  u8g2.drawStr(0, 38, "in association ");
  u8g2.drawStr(0, 58, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 2, 128, 64, 7);
  u8g2.drawStr(4, 16, "SERVEO     ");
  u8g2.drawStr(0, 36, "in association ");
  u8g2.drawStr(0, 56, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(10);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 0, 128, 64, 7);
  u8g2.drawStr(4, 14, "SERVEO    ");
  u8g2.drawStr(0, 34, "in association ");
  u8g2.drawStr(0, 54, "  JOHN DEERE  ");
  u8g2.sendBuffer();
  delay(1000);

  u8g2.setFont(u8g2_font_squeezed_b6_tr );
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 0, 128, 64, 7);
  u8g2.drawStr(0, 14, " ANGEL PALACIOS");
  u8g2.drawStr(0, 34, " PATRICK KOLBUSZOWSKI ");
  u8g2.sendBuffer();

}
void operario()
{

  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;
  }
}

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();
  }
}

//-----------------------señales de pantalla
void pantalla()
{
  h = digitalRead(14); // SENSOR DE ACEITE ES POSITIVO LA SEÑAL DE ENTRADA
  i = digitalRead(26); //  CONTEO DE PRUEBAS REALIZADAS
  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
  u8g2.clearBuffer();
  u8g2.drawRFrame(0, 0, 128, 10, 0);
  u8g2.setFont(u8g2_font_u8glib_4_hr);
  u8g2.drawStr(4, 7, "ENTRADAS Y SALIDAS ");
  u8g2.drawStr(92, 7, "ESTADO");
  u8g2.drawStr(4, 17, "SENSOR DE ACEITE.......");
  u8g2.drawStr(4, 25, "NUMERO DE RODAJES....");
  u8g2.drawStr(4, 33, "LLAMADA OPERARIO.....");
  u8g2.drawStr(4, 41, "BALIZA ROJA........");
  u8g2.drawStr(4, 49, "FINAL AVERIA.............");
  u8g2.drawStr(4, 59, "TEMPERATURA ACEITE");
  u8g2.drawRFrame(0, 9, 90, 55, 0);
  u8g2.drawRFrame(89, 0, 39, 64, 0);
  if (h == 0) {
    u8g2.setCursor(93, 17);
    u8g2.print("LLENO");
  }
  if (h != 0) {
    u8g2.setCursor(93, 17);
    u8g2.print("FALTA");
  }

  u8g2.setCursor(93, 25);
  u8g2.print(w);

  if (j == 0) {
    u8g2.setCursor(93, 33);
    u8g2.print("NO PULS");
  }
  if (j != 0) {
    u8g2.setCursor(93, 33);
    u8g2.print("PULSADO");
  }
  if (l != 0) {
    u8g2.setCursor(93, 41);
    u8g2.print("ACTIVA");
  }
  if (l == 0) {
    u8g2.setCursor(93, 41);
    u8g2.print("NO ACTV");
  }
  if (n != 0) {
    u8g2.setCursor(93, 49);
    u8g2.print("PULSADO");
  }
  if (n == 0) {
    u8g2.setCursor(93, 49);
    u8g2.print("NO PULS");
  }

  u8g2.setFont(u8g2_font_courB10_tf);
  u8g2.setCursor(100, 61);
  u8g2.print(y);
  u8g2.sendBuffer();
}
void contadorcero()
{
  //++++++++++++++++++++++++++++++++++resear contador dos botones pulsados a la vez pulsado 10 segundos
  capacitiveValue = touchRead(13);
  if (capacitiveValue < threshold ) {
    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 ");

  }
}

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 setup()
{
  Serial.begin(115200);
  preference.begin("my-app", false);
  w = preference.getUInt("parcial", 0);
  z = preference.getUInt("fijo", 0);
  u8g2.begin();
  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 600ms
  logoser();

  BlynkEdgent.begin();
  pinMode(luzboton, OUTPUT);
  pinMode(14, INPUT_PULLDOWN);
  pinMode(12, INPUT_PULLDOWN);
  pinMode(32, INPUT_PULLDOWN);
  pinMode(33, INPUT_PULLDOWN);
  pinMode(4, INPUT_PULLDOWN);
}
void loop() {
  BlynkEdgent.run();
  timer.run();
}