Giusto per prova, la parte che rileva l'oggetto prova a farla cosi:
void loop()
{
val = digitalRead(sensore_infrarosso);
if ((val_old != val) && (val == LOW)) //oggetto davanti al sensore
{
... istruzioni del pin uscita
val_old = val;
}
if ((val_old != val) && (val == LOW)) //oggetto allontanato
{
val_old = val;
}
}
Il primo if viene eseguito una sola volta nel momento in cui l'oggetto viene rilevato, poi NON viene piu eseguito finche' l'oggetto non se ne va e ritorna di nuovo (perche' val_old non e' piu diverso da val finche' non viene resettato dal secondo if), il secondo if allo stesso modo viene eseguito solo una volta quando l'oggetto si allontana dal sensore ... a proposito, le istruzioni del pin di uscita dovrebbero essere digitalWrite, non pinmode ... ![]()
SukkoPera: ovviamente va usato un partitore resistivo per la connessione dei due ... meglio non rischiare comunque, date le differenze di alimentazione