Accendere e spegnere arduino con un pulsante

E vero non mi ero accorto dell'errore e adesso funziona, ho tentato anche con altri di farmi aiutare a creare lo sketch con la logica secondo il diagramma di flusso che mi hai disegnato ma non ci riusciamo, siamo veramente delle frane, se puoi farmi vedere ti ringrazio

E il codice che ne è risultato qual è :question:

Sembra ci sia riuscito correggimi se sbaglio ho fatto così

#define PIN_RITENUTA 2
#define PIN_PULS1    4
#define PIN_PULS2    3

byte rilasciato = 0;
unsigned long t = 0;
byte prem1Prec = 0;
byte prem2Prec = 0;
int S = 0;

void setup() 
{
    pinMode(PIN_PULS1, INPUT_PULLUP);
    pinMode(PIN_PULS2, INPUT_PULLUP);
    pinMode(PIN_RITENUTA, OUTPUT);
    digitalWrite(PIN_RITENUTA, 1);
}


void loop() 
{
    delay(40); // debounce barbaro minimo

    // letture ingressi con riconoscimento
    // click su rilascio

    byte prem1 = (digitalRead(PIN_PULS1) == 0);
    byte click1 = !prem1 && prem1Prec;
    prem1Prec = prem1;

    byte prem2 = (digitalRead(PIN_PULS2) == 0);
    byte click2 = !prem2 && prem2Prec;
    prem2Prec = prem2;


    // Gestione autoritenuta

    if(S==0 && prem1 && prem2)
    {
      if(millis() - t > 2000)
      {
        digitalWrite(PIN_RITENUTA, 0);
        S = 1;
      }
    }else
    {
      if(S==1 && !prem1 && !prem2)
      {
        S = 2;
      }else
      {
        if(S==2)
        {
          if(millis()-t>2000)
          {
            digitalWrite(PIN_RITENUTA, 1);
          }
        }else
        {
          t=millis();
        }
      }
    }

    // Resto della logica circa 25 cicli al secondo

    // ......................

}

però non ho ritardo in accensione, per evitare accensioni accidentali avrei bisogno di un ritardo in accensione

Quasi giusto. La struttura di if è ok, ma i comandi dell'autoritenuta sono invertiti e manca un && prem1 && prem2 all'ultima condizione:

if (S==0 && prem1 && prem2)
{
    if (millis()-t > 2000)
    {
        digitalWrite(PIN_RITENUTA, 1);
        S = 1;
    }
}
else if (S==1 && !prem1 && !prem2)
{
    S = 2;
}
else if (S==2 && prem1 && prem2)
{
    if (millis()-t > 2000)
    {
        digitalWrite(PIN_RITENUTA, 0);
    }
}
else
{
    t = millis();
}

Forse potrebbe servire un t=millis(); nel setup.

provato funziona senza aggiungere t=millis(); nel setup, ma power on è istantaneo come tocco i pulsanti

Non lo avevo vsito, hai lasciato l'attivazione istantanea dall'autoritenuta nel setup...

avevo provato a toglierla o a mettere 0 ma si accende in ritardo come vorrei ma dopo poco si spegne da solo

qualcuno ha qualche idea, non so cosa fare