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
- gpb01