problema millis() vorrei una spiegazione

allora utiòizzo millis() per la gestione dei tasti del keypad su un ingresso analogico nello specifico per incrementare e diminuire l ora… ora se utilizzo questo codice

#define NONE      0
#define OK        1
#define DESTRA    2
#define SINISTRA  3
#define SU        4
#define GIU       5

/*
  ok        715-725
  destra    0-5
  sinistra  475-485
  su        130-135
  giu       305-310*/


int TASTO_PREMUTO() {
  int LEGGI_TASTO;
  LEGGI_TASTO = 0;
  LEGGI_TASTO = analogRead(0);

  if (LEGGI_TASTO != analogRead(0))
    return NONE;

  if (LEGGI_TASTO > 1000)
  {
    inizio4 = millis();
    return NONE;
  }

  if (LEGGI_TASTO < 310 && LEGGI_TASTO > 305)
  {
    
    if (millis() - inizio4 > tmp_attiva)
    {
      inizio4 = millis();
      
     return GIU;
    }
    
  }
  else
    inizio4 = millis();

}
    if (POS == 0)
    {
      switch (TASTO_PREMUTO())
      {
          lcd.setCursor(5, 1);
          
        case SU:      
          SoglieCiclo(ORA, 0, 23, 1);
          break;

        case GIU:         
          SoglieCiclo(ORA, 0, 23, 0);
          break;

        case DESTRA:
          SoglieCiclo(POS, 0, 1, 1);
          break;

        case SINISTRA:
          SoglieCiclo(POS, 0, 1, 0);
          break;
      }

non funziona esegue soglieciclo piu volte se invecle lo inserisco direttamente nella prima funzione, ovvero cosi

if (LEGGI_TASTO != analogRead(0))
    return NONE;

  if (LEGGI_TASTO > 1000)
  {
    inizio4 = millis();
    return NONE;
  }

  if (LEGGI_TASTO < 310 && LEGGI_TASTO > 305)
  {
    
    if (millis() - inizio4 > tmp_attiva)
    {
      SoglieCiclo(ORA, 0, 23, 0);
      inizio4 = millis();
      
     return GIU;
    }
    
  }
  else
    inizio4 = millis();

}

spiegatemi il perche?

Penso che questo topic stia meglio nella sezione "Software".
Chiedi se possono spostartelo.
Non puoi postare l'intero codice o le intere funzioni?

questa funzione ha qualche “problema”:

int TASTO_PREMUTO() {
  int LEGGI_TASTO;
  LEGGI_TASTO = 0;
  LEGGI_TASTO = analogRead(0);

  if (LEGGI_TASTO != analogRead(0))
    return NONE;

  if (LEGGI_TASTO > 1000)
  {
    inizio4 = millis();
    return NONE;
  }

  if (LEGGI_TASTO < 310 && LEGGI_TASTO > 305)
  {
   
    if (millis() - inizio4 > tmp_attiva)
    {
      inizio4 = millis();
     
     return GIU;
    }
   
  }
  else
    inizio4 = millis();

}

che senso ha sta cosa:

  LEGGI_TASTO = analogRead(0);

  if (LEGGI_TASTO != analogRead(0))
    return NONE;

poi l’ultimo else non ritorna nulla…e comunque non si sa dove hai definito e valorizato “inizio4” e “tmp_attiva”.

il programma è discretamente confuso,

come la descrizione del problema

fai così: posta l'intero programma (ben indentato, altrimenti non comincio nemmeno a leggerlo)

spiega cosa dovrebbe fare e dicci che problema ha, descrivendo anche come fare a riprodurlo

e ci guardiamo dentro, massimo e io

scusate il caos ma sono anni che non scrivo un programmino; il fatto che usavo il comando millis() per non interrompere il codice e temporizzare la pressione di un pulsante ripeto che ho risolto riscrivendo il codice da zero e funziona, il fatto che avevo copiato del vecchio codice di una centraline fatta anni fa che non ho finito ed ho rispolverato per fare l irrigazione ora lo quasi terminata

Perdonami, ma devi cercare di essere un po' più preciso e ordinato, sia nella scrittura del codice che nei tuoi messaggi... Un messaggio scritto disordinatamente, con errori sintattici si può provare a interpretarlo e a dare una risposta, seppure senza la certezza di averlo interpretato correttamente ed aver, quindi, dato una risposta corretta; un programma con errori sintattici, invece, semplicemente non funziona! :slight_smile: