ok spiego meglio:
buttonPinPROTa è un ingresso a logica positiva usato per acquisire quando la protezione 1 è scattata
buttonPinPROTb è un ingresso a logica positiva usato per acquisire quando la protezione 2 è scattata
buttonPinRESET è un ingresso a logica negativa usato per effettuare il reset
ledPinPROTa è un led che mi segnala quando la protezione 1 è intervenuta
ledPinPROTb è un led che mi segnala quando la protezione 2 è intervenuta
ledPinON è un led azionato da un'altro pulsante (non presente nel listato che ho postato) che si occupa di abilitare l'uscita del mio alimentatore
ledPinOFF è un led azionato da un'altro pulsante (non presente nel listato che ho postato) che si occupa di disabilitare l'uscita del mio alimentatore
ho creato le tre variabili per non ripetere i digitalRead ecc in ogni costrutto:
buttonStatus1 = digitalRead (buttonPinPROTa);
buttonStatus2 = digitalRead (buttonPinPROTb);
buttonStatus3 = digitalRead (buttonPinRESET);
la logica che ho creato funziona così:
se buttonStatus1 è alto (quindi è scattata la protezione 1) ma anche buttonStatus3 è alto (quindi non è stato schiacciato il pulsante di reset) allora metti a 1 la variabile prot, fammi accendere il led corrispondente per segnalare l'avvenuto intervento della protezione 1, mandami alto l'uscita ledPinOFF così mi disabiliti l'uscita dell'alimentatore e per precauzione mandami basso l'uscita ledPinON.
se buttonStatus2 è alto (quindi è scattata la protezione 2) ma anche buttonStatus3 è alto (quindi non è stato schiacciato il pulsante di reset) allora metti a 1 la variabile prot, fammi accendere il led corrispondente per segnalare l'avvenuto intervento della protezione 2, mandami alto l'uscita ledPinOFF così mi disabiliti l'uscita dell'alimentatore e per precauzione mandami basso l'uscita ledPinON.
una volta scattate le protezioni ora devo resettarle, sempre che non siano ancora scattate, quindi verifico che buttonStatus1 ma anche buttonStatus2 sono bassi, allora schiacco buttonStatus3 che risulta anche lui basso quindi metti a 1 la variabile var, spegni ledPinPROTa e ledPinPROTb.
quest'altra funzione:
Codice: Seleziona tutto
if (ledState13 == HIGH) {
if (eravamoAccesi == HIGH) {
myDigitalWrite (ledPinOFF, LOW);
myDigitalWrite (ledPinON, HIGH);
}
}
mi serve per abilitare o disabilitare una memoria dove posso decidere se, una volta resettato, attacare il carico al mio alimentatore oppure farlo manualmente
poi ho messo un temporizzatore:
Codice: Seleziona tutto
if (var == 1) {
dt1 = millis() - t1;
if (dt1 > 3000) {
t1 = millis();
prot = 0;
var = 0;
}
}
che una volta fatto il reset mi manda a zero le variabili prot e var dopo 3 secondi perchè queste mi servono per fare altro.
ora qual'è il malfunzionamento che ho riscontrato?
prot viene messa a 1 o da buttonStatus1 o da buttonStatus2 e fin qui tutto ok,
var viene messa a 1 da buttonStatus3 e fin qui tutto ok,
var va a zero dopo tre secondi e fin qui tutto ok,
ma prot viene messa a zero subito dopo aver schiacciato buttonStatus3,
la cosa che non capisco è perchè prot non va a zero dopo tre secondi!!!!
ecco questa è la mia problematica!!!