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=(lavoroValue880);
digitalWrite(Rele,HIGH);
delay(tempoLavoro);
delay(500);
digitalWrite(Rele,LOW);
ReleStato=0;
}
}