nel finale del codice mi dava errore, ho quindi scritto:
if (digitalRead(cmd_tx)) //se il valore analogico è < di 50, e cmd_tx è a 1
{
Serial.println("Aspetta");
delay(3000); //attendo 3 secondi
digitalWrite(cmd_tx, LOW);
Serial.println("LOW2"); //scrivo a zero cmd_tx
}}
delay(100);
}
comunque:
(cut)
4
LOW1
5
LOW1
4
LOW1
4
LOW1
1023 //porto analogico 3 a livello alto
HIGH
1023
HIGH
1023
HIGH
taglio per non rubare troppo spazio
1023
HIGH
1023
HIGH
1023
HIGH
1023
HIGH
4 //porto analogico 3 a livello basso...
LOW1
2
LOW1
3
LOW1
4
LOW1
5
LOW1
4
LOW1
4
LOW1
4
LOW1
....etc etc etc... fino a reset
Grazie per il tuo intervento Nagy, e stai tranquillo che pure io sono decisamente nabbo.
Vista la mia attività lavorativa, ho approcciato Arduino a scopo di hobby pensando di fare una passeggiata, ma non mi ero accorto di essere "Scalzo sui vetri"...
L'idea può essere sicuramente buona, tuttavia mi pare di capire che il problema stà nel fatto che non vuole saperne di fare quell'IF con l'AND tra il valore analogico e quello digitale, sia scritto come (&&) che come due IF in cascata.
Risolto questo dovrò capire come contare il tempo senza piantare il programma con il DELAY, ma per quello la tua può essere già la soluzione. Tuttavia avevo già sperimentato la libreria METRO con successo.
void loop()
{
rx_val = analogRead(analogPin);
Serial.println(rx_val,DEC);
if (rx_val > 50) //se il valore analogico è > di 50, metto a 1 l'output cmd_tx
{
stato_tx = 1;
digitalWrite(cmd_tx, stato_tx);
Serial.println("HIGH");
}
if (rx_val < 50)
{
Serial.println("LOW1");
if (stato_tx) //se il valore analogico è < di 50, e cmd_tx è a 1
{
Serial.println("Aspetta");
delay(3000); //attendo 3 secondi
stato_tx =0;
digitalWrite(cmd_tx, stato_tx);
Serial.println("LOW2"); //scrivo a zero cmd_tx
}}
delay(100);
}
Quel codice aspetta ogni volta 3 secondi prima di mettere il pin a LOW. per questo ralenta di molto la reszione su un cambio di stato del segnale di entrata.
Ciao Uwe
Lui voleva un ritardo di spegnimento ma non un ritardo di lettura del segnale di pilotaggio. Il tuo codice non controlla se il pin di uscita é H o L e percui aspetta ogni volta che trova il segnale a L
Ritornando al problema col digitalRead del uscita.
Che tensione misuri sul pin di arduino dove hai attacato l'optocoppler.
Quel codice del relpy #15 funziona se scolleghi l' optocoppler dal piedino di Arduino?
Il tuo codice, ogni volta che legge un valore maggiore di 50, aspetta 3 secondi.
Nel "if (rx_val < 50)" deve esserci un maggiore e non un minore.
Questo ritardo di 3 secondi ha come consequenza che un valore maggiore di 50 viene rilevato non subito ma in media dopo 1,5 secondi (fino a un massimo di 3 secondi)
Ciao Uwe