robot evita ostacoli

Salve ho costruito un robot evita ostacoli, è già funzionante, solo che ho aggiunto un servo che fa ruotare il sensore ultrasuoni. Come posso far ruotare questo servo e contemporaneamente far andare avanti il robot?

… allo stesso modo come alla mia stampante 3D posso far fare il caffè !!! :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Seriamente, ma porca miseria, come pretendete che uno vi aiuti se NON mettete uno straccio di programma ? ma che fa uno … le cose se le inventa ? :o

Metti il codice che stai usando (… mi raccomando, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> … primo a sinistra) e, forse, qualcuno proverà ad aiutarti ! :wink:

Guglielmo

#include <AFMotor.h>
#include <Servo.h>

AF_DCMotor MOTORE_SINISTRA(1);
AF_DCMotor MOTORE_DESTRA(2);
Servo SERVO_SENSORE;
const int triggerPort = 18;
const int echoPort = A5;

void setup() {
  Serial.begin (9600);
  Serial.print( "Sensore Ultrasuoni: ");
  pinMode(triggerPort, OUTPUT);
  pinMode(echoPort, INPUT);
  MOTORE_SINISTRA.setSpeed(255);
  MOTORE_DESTRA.setSpeed(255);
  MOTORE_SINISTRA.run(RELEASE);
  MOTORE_DESTRA.run(RELEASE);
  SERVO_SENSORE.attach(9);
  SERVO_SENSORE.write(90);
 
}

void loop() {
  if(CALCOLA_DISTANZA () > 35)
    AVANTI ();
  else {
    STOP ();
    delay (1000);
    INDIETRO ();
    delay (500);
    STOP ();
    delay (300);
    DESTRA ();
    delay (350);
    }
}

void INDIETRO ()
{
  MOTORE_SINISTRA.setSpeed(255);
  MOTORE_DESTRA.setSpeed(255);
  MOTORE_SINISTRA.run(FORWARD);  
  MOTORE_DESTRA.run(FORWARD);
}

void AVANTI ()
{
  MOTORE_SINISTRA.setSpeed(255);
  MOTORE_DESTRA.setSpeed(255);
  MOTORE_SINISTRA.run(BACKWARD);  
  MOTORE_DESTRA.run(BACKWARD);
}

void SINISTRA ()
{
  MOTORE_SINISTRA.setSpeed(255);
  MOTORE_DESTRA.setSpeed(255);
  MOTORE_SINISTRA.run(FORWARD);  
  MOTORE_DESTRA.run(BACKWARD);
}

void DESTRA ()
{
  MOTORE_SINISTRA.setSpeed(255);
  MOTORE_DESTRA.setSpeed(255);
  MOTORE_SINISTRA.run(BACKWARD);  
  MOTORE_DESTRA.run(FORWARD);
}

void STOP ()
{
  MOTORE_SINISTRA.setSpeed(255);
  MOTORE_DESTRA.setSpeed(255);
  MOTORE_SINISTRA.run(RELEASE);  
  MOTORE_DESTRA.run(RELEASE);
}

long CALCOLA_DISTANZA ()
{
  digitalWrite( triggerPort, LOW ); //porta bassa l'uscita del trigger
  digitalWrite( triggerPort, HIGH ); //invia un impulso di 10microsec su trigger
  delayMicroseconds( 10 );
  digitalWrite( triggerPort, LOW );
  long durata = pulseIn( echoPort, HIGH );
  long distanza = 0.034 * durata / 2;
  Serial.print("distanza: ");
  if( durata > 38000 ) //dopo 38ms è fuori dalla portata del sensore
    Serial.println("Fuori portata   ");
  else { 
    Serial.print(distanza);
    Serial.println(" cm     ");
    }
    return distanza;
}

ho pensato di integrare il mio programma con quello della libreria servo "sweep", ovvero quello con i due cicli for annidati.