Salve a tutti, sto diventando matto con un progetto che dovrebbe farmi rilevare il tempo di manovra di un apparecchio meccanico, in pratica si tratta di contare il tempo che intercorre dall inizio dell impulso che causerà la manovra alla conferma dell avvenuta manovra,e cosi per lamanovra opposta in pratica due pulsanti , apertura e chiusura e due finecora chiuso e aperto, avrei scritto uno sketch che sembreebbe funzionare bene su tinkercad, ma idolori cominciano con la pratica , il problema sembra dato dagli optoisolatori buckk_817 in quanto al rilascio di uno dei pulsanti origina un picco sull ingresso opposto , evidenziabile dall accensione dell altro led nonchè da un mini oscilloscopio, la mia idea sarebbe quella di creare un inibizione dell ingresso opposto similmente a un contatto di interblocco ma ipotizzo io i cicli sono cosi rapidi che non mi basta porre delle condizioni con degli AND,se stacco il filo del pulsante opposto ,ad esempio apparecchio chiuso, spingo apertura con fli staccato dell apertura tutto va ok e il circuito conta un tempo che varia dai 3 ai 5 ms in linea con le specifiche del bistabile che uso per simulare la macchina e cosi per l'apertura, dunque direi che con ogni probabilità in mancanza di quell impulso che mi calcia indietro andrebbe tutto per il meglio anche perchè i tempi tipici della manovra vanoo dai 40 ai 70 ms.
int stato;
int tch;
int tAP;
const int PREMUTO = 1;
const int RILASCIATO = 0;
const int ON = HIGH;
const int OFF = LOW;
long t0;
long t;
long t1;
long t2;
void setup() {
Serial.begin(9600);
pinMode(5, INPUT_PULLUP);// ho usato il pullup perchè gli ingressi sono optoisolati
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
Serial.println("PRONTO PER LA PROVA");
stato = RILASCIATO;
tch = OFF;
tAP= OFF;
}
void loop(){
int pAP= digitalRead(5); //pulsante di apertura
int pCH = digitalRead(6); // pulsante di chiusura
int _52AP = digitalRead(7); //micro segnalazione interruttore aperto
int _52CH = digitalRead(8); // micro segnalazione interruttore chiuso
if ((tch == OFF) && (pCH ==LOW) &&(_52AP == LOW)&&(pAP==HIGH)&&(tAP==OFF)) { //verifica che tch sia off che il segnale di chiusura sia attivo e l?interruttore sia aperto
tch = ON;
t0 = millis();
Serial.println("TCH");
}
if ((tch == ON) && (_52CH == LOW)) {
tch = OFF;
t = millis() - t0;
Serial.println(t);
}
if ((tAP == OFF) && (pAP == LOW)&&(_52CH==LOW)&&(pCH==HIGH)&&(tch==OFF) ) {
tAP = ON;
t0 = millis();
Serial.println("TAP");
}
if ((tAP == ON) && (_52AP == LOW)) {
tAP = OFF;
t = millis() - t0;
Serial.println(t);
}
}
questo il codice che ho provato a metter giù