Non so come fare..

Salve a tutti, volevo chiedervi se potete per piacere aiutarmi a risolvere un piccolo problemino con delle funzioni di Arduino; premetto che essendo autodidatta non sono molto esperto, e se qualcuno potesse aiutarmi mi farebbe un grosso piacere.
Espongo il mio problema.
Ho un relè che viene comandato da un impulso; mi spiego meglio.
Quando Arduino riceve un impulso aspetta un intervallo di tempo Variabile tramite potenziometro e poi attiva il relè anch'esso per un tempo variabile dato da un secondo potenziometro e poi lo spegne; ora dovrei avere la possibilità di contare il tempo che passa da quando ho spento il relè a quando arriva il secondo impulso. Se arriva entro un terzo del tempo totale tra pausa e lavoro, aspetto un periodo di tempo derivante da una formula (che poi cercherò di esprimere) e poi attivo il relè per il tempo restante (ricavato sempre da una formula) per poi trascorso l'ultimo tempo si spegne. Se invece l'impulso arriva dopo un terzo del tempo totale tra pausa e lavoro, il deve funzionare con i primi tempi impostati
Esempio

primo ciclo al primo impulso ricevuto

timer pausa =3 minuti
timer lavoro =7 minuti
il relè dopo 3 minuti dall'impulso si accende per 7 minuti e poi si spegne

secondo ciclo con impulso ad un terzo del tempo

timer totale = timer pausa +timer lavoro = 3+7=10 minuti
intervallo di tempo per secondo impulso =timer totale/3 =10/3=3.3 minuti
se il secondo impulso arriva entro i 3.3 minuti la pompa deve rimanere spenta per timer totale /1.5= 10/1.5=6.66 minuti per poi accendersi per il tempo restante timer totale-6.66 = 10-6.66=3.34 minuti per poi spegnersi

Se invece il secondo o terzo impulso arriva dopo un terzo del tempo (cioè dopo 3.3 minuti), il relè torna a funzionare con i tempi standard cioè timer pausa 3 minuti e timer lavoro 7 minuti

tutto questo deve funzionare in loop in base agli impulsi ricevuti, fino a quando non si toglie alimentazione ad arduino

Spero di essere stato chiaro e ringrazio in anticipo chi può aiutarmi, qui sotto copio lo sketch della prima parte del funzionamento

const byte tmrLavoro = A0;
const byte tmrPausa = A1;
const byte Rele = 10;
const byte Start = 12;
int ReleStato = 0;
int PulsanteStato = 0;
long pausaValue = 0;
long tempoPausa = 0;
long lavoroValue = 0;
long tempoLavoro = 0;

void setup() {
pinMode(Rele, OUTPUT);
pinMode(Start, INPUT);
}
void loop() {
PulsanteStato = digitalRead(Start);
lavoroValue = analogRead(tmrLavoro);
pausaValue = analogRead(tmrPausa);
delay(150);
if (PulsanteStato==1 and ReleStato==0)
{
ReleStato=1;
}

if (ReleStato==1)
{
tempoPausa=(pausaValue880);
digitalWrite(Rele,LOW);
delay(tempoPausa);
tempoLavoro=(lavoroValue
880);
digitalWrite(Rele,HIGH);
delay(tempoLavoro);
delay(500);
digitalWrite(Rele,LOW);
ReleStato=0;
}
}

Ciao in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag:

[code] _il _tuo_ codice_ [/code]

così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo.

Comunque devi usare la funzione millis(), per capire le basi con cui si usa millis() consiglio prima la lettura di QUESTO post esplicativo, dopo di che lo studio di come si usa la funzione millis(), prima QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ... alla fine il tutto dovrebbe essere più chiaro :slight_smile: