Vi posto il codice che utilizzo per il controllo dei motori
int VelMot1 =9;
int VelMot2 =10;
int Motore1Pos =4;
int Motore1Neg =5;
int Motore2Pos =6;
int Motore2Neg =7;
int Enable= 2;
int echoPin = 12; // echo (digital 2)
int initPin = 13;
int SENSIBILITA =10;
unsigned long pulseTime = 0;
unsigned long distanza = 0;
void setup()
{
pinMode( Enable,OUTPUT );
pinMode( VelMot1,OUTPUT );
pinMode( VelMot2,OUTPUT );
pinMode( Motore1Pos,OUTPUT );
pinMode( Motore1Neg,OUTPUT );
pinMode( Motore2Pos,OUTPUT );
pinMode( Motore2Neg,OUTPUT );
pinMode(initPin, OUTPUT);
pinMode(echoPin, INPUT);
unsigned long pulseTime = 0;
unsigned long distanza = 0; // distanza in cm
digitalWrite( Enable,HIGH );
Serial.begin(9600); //inizializza la seriale
}
void loop()
{
//manda un impulso di ampiezza 10 us
digitalWrite(initPin, HIGH);
delayMicroseconds(10);
digitalWrite(initPin, LOW);
pulseTime = pulseIn(echoPin, HIGH); // Aspetta l'eco di risposta
distanza = pulseTime/58; // distanza = tempo impulso / 58 per calcolare i [cm] di distanza.
if ( distanza > SENSIBILITA ) {
digitalWrite( Motore1Pos,HIGH );
digitalWrite( Motore1Neg,LOW );
digitalWrite( Motore2Pos,HIGH );
digitalWrite( Motore2Neg,LOW );
analogWrite( VelMot1,100 );
analogWrite( VelMot2,100 );
}
else {
//INDIETRO
digitalWrite( Motore1Pos,LOW );
digitalWrite( Motore1Neg,HIGH );
digitalWrite( Motore2Pos,HIGH );
digitalWrite( Motore2Neg,LOW );
analogWrite( VelMot1,100 );
analogWrite( VelMot2,100 );
}
Serial.print ("Distanza: ");
Serial.println(distanza, DEC);
delay(100);
}
In pratica un sensore (srf05) rileva la distanza,finche questa distanza è maggiore di N va avanti e fino a qui tutto bene ma appena la distanza scende sotto questa distanza (nel codice si chiama SENSIBILITA) si ferma tutto e i motori non girano indietro come dovrebbero .