ok, sono andato avanti con il mio codice e ho trovato una soluzione "forse spartana" per ottenere quello che desideravo, ve lo posto per intero così ci capiamo meglio:
#include <Servo.h>
Servo s3;
long tempo;
int triggerPort = 10;
int echoPort = 11;
void setup() {
s3.attach(3,500,3000);
pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
Serial.begin( 9600 );
Serial.println( "Sensore ultrasuoni: ");
}
void loop() {
//porta bassa l'uscita del trigger
digitalWrite( triggerPort, LOW );
//invia un impulso di 10microsec su trigger
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 );
digitalWrite( triggerPort, LOW );
long duration = pulseIn( echoPort, HIGH );
long r = 0.034 * duration / 2;
Serial.print( tempo );
Serial.print( " durata: " );
Serial.print( duration );
Serial.print( " , " );
Serial.print( "distanza: " );
//dopo 38ms è fuori dalla portata del sensore
if( duration > 38000 ) Serial.println( "fuori portata");
else {
Serial.print( r ); Serial.println( "cm" );
if (r==1)
{
tempo=tempo+500;
if (tempo>3000) {
s3.write(90);
}
}
if (r==4) {
tempo=tempo+500;
if (tempo>3000) {
if (r>4 && r<20) { s3.write(170) ; }
if (r>20 && r<30) { s3.write(80) ; }
if (r>30) { s3.write(10) ; }
}
}
if (r!=1 && r!=4) { tempo=0; }
delay(500);
}
}
Intanto le impostazioni del sensore e l'assegnazione del servo sono ok.
Dunque così come l'ho impostato il tempo mi viene registrato correttamente o meglio se la distanza è uguale a 1cm (modalità A) o a 4cm (modalità B) inizia il count del tempo altrimenti verrà settato a 0;
ciò che non riesco a capire è come far mantenere sempre lo stesso ciclo di istruzioni nel caso si entri nella modalità A o B.
Scusate se non riesco ad essere chiaro.