"IF" tra segnale analogico e digitale

cosa hai attacato al pin di uscita? Magari un LED senza resistenza?
Ciao Uwe

no, un fotoaccoppiatore.
comunque così ha funzionato

6
LOW1
5
LOW1
4
LOW1
5
LOW1
4
LOW1
4
LOW1
5
LOW1
4
LOW1
4
LOW1
6
LOW1
3
LOW1
4
LOW1
3
LOW1
3
LOW1
1023
HIGH
1023
HIGH
1023
HIGH
1023
HIGH
1023
HIGH
1023
HIGH
1023
HIGH
1023
HIGH
3
LOW1
Aspetta
LOW2
4
LOW1
4
LOW1
3
LOW1
5
LOW1
4
LOW1
4
LOW1
4
LOW1
4

Grazie Uwe,
non ho capito bene il perchè ora funziona, ma visto che è ok, non tocco niente e vado avanti con il resto.

Grazie ancora
Claudio

astru_bale:
no, un fotoaccoppiatore.

insisto:
Un fotoaccoppiatore senza resistenza?

kappa che c'è, da 10K

no, intendevo sul lato LED IR, non sul lato fototransistore.
Ciao Uwe

scusami, allora non ho capito, che intendi per LED IR?

io ho risolto cosi :slight_smile:

int cmd_tx = 5 ;
int analogPin = 3;
int rx_val = 0;

void setup()
{
pinMode(cmd_tx, OUTPUT);

}

void loop()
{
rx_val = analogRead(analogPin);

if (rx_val < 50)
{
digitalWrite(cmd_tx, HIGH);
}
else
{
delay(3000); //attendo 3 secondi
digitalWrite(cmd_tx, LOW);
}

}

iz2rpn:
io ho risolto cosi :slight_smile:

int cmd_tx = 5 ;

int analogPin = 3;
int rx_val = 0;

void setup()
{
  pinMode(cmd_tx, OUTPUT);

}

void loop()
{
    rx_val = analogRead(analogPin);
   
   if (rx_val < 50)
{
  digitalWrite(cmd_tx, HIGH);
}
else
{
   delay(3000);                                                     //attendo 3 secondi
   digitalWrite(cmd_tx, LOW); 
}

}

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

astru_bale:
scusami, allora non ho capito, che intendi per LED IR?


Come hai collegato il optocopler al uscita Arduino? Hai usato una resistenza come nell imagine?
Ciao Uwe

ma è quello che voleva

iz2rpn:
ma è quello che voleva

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

Ciao Uwe

Non ho capito scusa :stuck_out_tongue:

l'out di Arduino sul fotoaccoppiatore, è fatto così:

Il circuito del optocoppler é giusto.

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?

Ciao Uwe

iz2rpn:
Non ho capito scusa :stuck_out_tongue:

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

ora ho capito grazie :slight_smile:

astru_bale:
eccolo:

int cmd_tx = 5;

int analogPin = 3;
int rx_val = 0;

void setup()
{
  pinMode(cmd_tx, OUTPUT);

}

void loop()
{
    rx_val = analogRead(analogPin);
   
   
    if (rx_val > 50) { digitalWrite(cmd_tx, HIGH); } //se il valore analogico è > di 50, metto a 1 l'output cmd_tx
    if ((rx_val < 50) && digitalRead(cmd_tx) == HIGH) {  //se il valore analogico è < di 50, e cmd_tx è a 1
        delay(3000);                                                     //attendo 3 secondi
        digitalWrite(cmd_tx, LOW);                                //scrivo a zero cmd_tx
}

}

secondo me quando si fa "l'accoppiata" di maggiore di con minore di bisognerebbe mettere => al posto di > oppure <= al posto <
che sarebbero uguale o maggiore di oppure uguale o minoredi

questo evita incertezze nel caso il valore sia proprio 50

si anche ma il mio codice non era giusto cmq :slight_smile: