robot rileva ostacoli

Sto tentando di scrivere un codice per un robot rileva osacoli,ma quando il robot arriva alla minima distanza impostata si ferma e sembra che non prenda alcuna decisione muovendo continuamente il servo dove è posizionato l'HCSR04.Posto il codice cercando aiuto

#include <Ultrasonic.h>
#include <Servo.h> // include la Libreria Servo.h

int pinDirA = 12;
int pinDirB = 13;
int pinPwmA = 3;
int pinPwmB = 11;
float fronte_cm;
float sx_cm;
float dx_cm;

Servo myservo;  // crea l’oggetto di tipo Servo, myservo sarà l’oggetto su cui opererai
int pos = 0 ;     // inizializza una variabile di tipo intero pos il cui valore sarà la posizione da impartire al servo

#define TRIGGER_PIN  7
#define ECHO_PIN     6


Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);


void setup() {
  pinMode( pinDirA, OUTPUT );
  pinMode( pinPwmA, OUTPUT );
  pinMode( pinDirB, OUTPUT );
  pinMode( pinPwmB, OUTPUT );

  myservo.attach(8);
  myservo.write(90);// pone il servere in posizione a 90°,rivolto in avanti
  delay (2000);// attende 2 secondi prima di incominciare il loop
}

void loop() {

  float cmMsec, inMsec;
  long microsec = ultrasonic.timing();
  float prova = 20;
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
  Serial.print("MS: ");
  Serial.print(microsec);
  Serial.print(", CM: ");
  Serial.print(cmMsec);
  Serial.print(", IN: ");
  Serial.println(inMsec);
  fronte_cm = cmMsec;

  if (fronte_cm > prova) {
    avanti();

  }
  else  {

    fermo();

    movservodx();
     dx_cm = cmMsec;
    movservosx();
     sx_cm = cmMsec;
    myservo.write(90);

    if (dx_cm > sx_cm) {
      giradx();
    }
    else  {
      girasx();
    }
  }
}

void avanti() {
  digitalWrite( pinDirA, HIGH );
  digitalWrite( pinDirB, LOW );
  analogWrite( pinPwmA, 255 );
  analogWrite( pinPwmB, 255 );
}

void fermo()  {
  analogWrite( pinPwmA, 0 );
  analogWrite( pinPwmB, 0 );

}

void indietro() {
  digitalWrite( pinDirA, LOW );
  digitalWrite( pinDirB, HIGH );
  analogWrite( pinPwmA, 255 );
  analogWrite( pinPwmB, 255 );

}
void movservodx() {
  myservo.write(142);
  delay(300);
}
void movservosx() {
  myservo.write(36);
  delay(300);
}
void movservofronte() {
  myservo.write(90);

}
void girasx() {
  digitalWrite( pinDirA, LOW );
  digitalWrite( pinDirB, LOW );
  analogWrite( pinPwmA, 255 );
  analogWrite( pinPwmB, 255 );
}
void giradx() {
  digitalWrite( pinDirA, HIGH );
  digitalWrite( pinDirB, HIGH );
  analogWrite( pinPwmA, 255 );
  analogWrite( pinPwmB, 255 );
}

Nota di moderazione: @gaerix:Non devi aggiungere un post, devi correggere il post sbagliato. Per questa volta te l'ho fatto io :wink: - gpb01

Ciao gaerix, ben arrivato.
Non so se ti sei accorto, ma nel codice che hai postato

myservo.attach(8);

si è trasformato in myservo.attach(8);!
Per evitare questo devi racchiudere il codice all'interno di "</>"!

Ciao Meluino