timer bromografo logica di funzionamento

allora ho fatto la modifica e ho tolto un pulsante

quindi ha solo un pulsante che se se preme accende
e se si preme di nuovo si spegne (a condizione che il timer sia acceso da almeno un secondo)

quindi
si preme il pulsante e si accende,
si regola il tempo col potenziomentro i 2 display a 3 cifre segnano tutti e due lo stesso tempo,

si accende la lampada/led e un display inizia il conto alla rovescia

appena arriva a zero la lampada /led si spegne e dopo 20 secondi si spegne del tutto

e se necessario si preme il pulsantino e si spegne tutto

che dite potrebbe bastare??

float spegnimento;
float  ritardominuti;
//float xminuti;  
float ritardo;
float ritardo2;
float ritardoautospegnimento;
int C1;
int C2;
int C3;

int ktempo;
int tempo;
int sfarfallio;

int CFR1;
int CFR2;
int CFR3;
float secondi;
int K;


int a; 
int b;   
int c; 
int d;

int E; 
int F;                
int G;                              
int H;                                 

 void setup () {  
   

     
  //Serial.begin(9600); 
pinMode (0, OUTPUT);   
pinMode (1, INPUT);   
pinMode (2, OUTPUT); 
pinMode (3, OUTPUT); 
pinMode (4, OUTPUT);  
pinMode (5, OUTPUT);  
pinMode (6, OUTPUT);  
pinMode (7, OUTPUT); 
pinMode (8, OUTPUT);
pinMode (9, OUTPUT); 
pinMode (10, OUTPUT);  
pinMode (11, OUTPUT); 
pinMode (12, OUTPUT);  
pinMode (13, OUTPUT);
pinMode (17, OUTPUT);
pinMode (18, OUTPUT);
pinMode (19, OUTPUT);

digitalWrite (0, HIGH); //pin rele autoaccensione/autospegnimento

digitalWrite (3, HIGH);  //seconda cifra
digitalWrite (4, HIGH);  //prima cifra
digitalWrite (2, HIGH);  //segmento  f  sinistra,alto
digitalWrite (5, HIGH);  //segmento  e  sinistra,basso
digitalWrite (6, HIGH);  //segmento  d  basso
digitalWrite (7, HIGH);  //segmento  c  destra,basso
digitalWrite (8, HIGH);  //segmento  b  destra,alto
digitalWrite (9, HIGH);  //segmento  a  alto
digitalWrite (10, HIGH); //segmento  g centrale
digitalWrite (11, HIGH); //terza cifra
digitalWrite (12, HIGH); //quarta cifra
digitalWrite (18, HIGH); // quinta cifra 
digitalWrite (19, HIGH); // quinta cifra 

digitalWrite (17, LOW); //USCITA RELE'
digitalWrite (13, HIGH); //USCITA RELE'



}

void loop () 
 {


////////////////////////////////////////////////
////////////////////////////////////////////////
                         ritardo = 9 ;    //////   tempo attesa in secondi primma del count down  12
////////////////////////////////////////////////
////////////////////////////////////////////////
                                          //////        valori          
                          d = 199;        //////        iniziali            d = 199 ;   
////////////////////////////////////////////////
////////////////////////////////////////////////
                                          //////   ritardo in secondi prima di spegnbere i spegnere del tutto il timer 
       ritardoautospegnimento = 20;       //////   dopo che il count down e finito
////////////////////////////////////////////////
////////////////////////////////////////////////

////////////////////////////////////////////////
////////////////////////////////////////////////
                                          //////   da modificare leggermenre se i display presentano sfarfallio
sfarfallio = 3900;                        //////   provare ad abbassare/alzare di 100 per volta
////////////////////////////////////////////////
////////////////////////////////////////////////

  if (d > 999)  d=999 ;
 a = 0 ;         //fanno farte del map
 b = 1023 ;      //fanno farte del map
 c = 1;  
 
  E = a ;  
  F = b;    
  G = c;
  H = d;


ritardo2=ritardo*1000;


C1 = map(analogRead(A0), a, b, c, d); 
C2 = map(analogRead(A0), a, b, c, d);
C3 = map(analogRead(A0), a, b, c, d);


secondi = millis()/1000; 

  if (analogRead  (A1) > 15) secondi = millis()/1000; ;  //per avere i tempo in minuti mettere al + il pin A4
   if (analogRead  (A1) <= 15)secondi = millis()/60000 + ritardo;  
 
 if (millis() > ritardo2)(K = secondi - ritardo);  


if (digitalRead  (13) ==HIGH) C1 = C1 - K;
if (digitalRead  (13) ==HIGH) C2 = C2-  K;
if (digitalRead  (13) ==HIGH) C3 = C3 - K;

  if (millis() > ritardo2 &&  digitalRead  (13) ==HIGH) digitalWrite (17, HIGH); /
  if (C1 <= 0) digitalWrite (17, LOW); // spegne il rele  quando C1=0

   if (C1 <= 0) digitalWrite (13, LOW); // spegne il led 13 quando C1=0

if (millis() > 1000 &&  digitalRead  (1) ==LOW){ digitalWrite (0, LOW); delay(1000);}  // spegne il rele accensione se 1 va  alto tramite 
                                                                        //il pulsante ed e passato almeno un secondo dall'accensione
                                                                        
spegnimento=map(analogRead(A0), a, b, c, d)*1000;  // trasforma la lettura del display in millisecondi moltiplicandola per 1000
ritardoautospegnimento = ritardoautospegnimento*1000 + ritardo*1000  ;//                                                               
  if (analogRead  (A3) < 15 &&  millis() > (spegnimento +ritardoautospegnimento))  
{digitalWrite (0, LOW); //pin rele autospegnimento
digitalWrite (1, HIGH);  //ingresso segnale spegnimento
digitalWrite (3, HIGH);  //seconda cifra
digitalWrite (4, HIGH);  //prima cifra
digitalWrite (2, HIGH);  //segmento  f  sinistra,alto
digitalWrite (5, HIGH);  //segmento  e  sinistra,basso
digitalWrite (6, HIGH);  //segmento  d  basso
digitalWrite (7, HIGH);  //segmento  c  destra,basso
digitalWrite (8, HIGH);  //segmento  b  destra,alto
digitalWrite (9, HIGH);  //segmento  a  alto
digitalWrite (10, HIGH); //segmento  g centrale
digitalWrite (11, HIGH); //terza cifra
digitalWrite (12, HIGH); //quarta cifra
digitalWrite (18, HIGH); // quinta cifra 
digitalWrite (19, HIGH); // sesta cifra 
digitalWrite (17, LOW); // red rele