grande...immaginavo fosse una cavolata ma non mi veniva...non sono un esperto programmatore...
posto il codice, accetto consigli per ottimizzare il codice:
#include <Servo.h>
Servo s3;
long tempo;
int modalita=0;
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<4) { tempo=tempo+500;
if (tempo>10000) { modalita=0;}
Serial.print( " modalita: " );
Serial.println( modalita );
}
if (r<4) { tempo=tempo+500;
if (tempo>4000 && tempo<6000) { modalita=1;}
Serial.print( " modalita: " );
Serial.println( modalita );
}
if (r<4) { tempo=tempo+500;
if (tempo>2000 && tempo<4000) { modalita=2;}
Serial.print( " modalita: " );
Serial.println( modalita );
}
if (r>4) { tempo=0;}
switch (modalita) {
case 0:
s3.write(90);
break;
case 1:
if (r>4 && r<20) { s3.write(0) ; }
if (r>20 && r<30) { s3.write(45) ; }
if (r>30) { s3.write(90) ; }
break;
case 2:
if (r>4 && r<20) { s3.write(90) ; }
if (r>20 && r<30) { s3.write(135) ; }
if (r>30) { s3.write(180) ; }
break;
}
delay(500);
}
}