SENSORE HC-SR04

Ciao a tutti,brancolo nel buio da un paio di ore, e non sono riuscito ancora a capire come inserire nello sketch che ho fatto per i motori il sensore ad ultrasuoni HC-SR04.

Per cortesia non e che mi potete dare delle dritte per fare in modo che inserendo il sensore il mio robottino cambi direzione ed eviti gli ostali?

grazie in anticipo Simone.

allego lo Sketch che ho fatto per far muovere i motori,ovviamente inserendo il sensore so che cambiano molte cose all?interno del mio Sketch,ma non so proprio da dove iniziare

int ENA = 10;                     // Motore DX
int IN1 = 3;                      // Motore DX
int IN2 = 4;                      // Motore DX

int ENB = 9;                      // Motore SX
int IN3 = 5;                      // Motore SX         
int IN4 = 6;                      // Motore SX       

void setup ()
{
pinMode (ENA, OUTPUT);           // Imposto il Pin come uscita
pinMode (IN1, OUTPUT);           // Imposto il Pin come uscita      
pinMode (IN2, OUTPUT);           // Imposto il Pin come uscita
pinMode (ENB, OUTPUT);           // Imposto il Pin come uscita
pinMode (IN3, OUTPUT);           // Imposto il Pin come uscita
pinMode (IN4, OUTPUT);           // Imposto il Pin come uscita
}
void ferma ()
{
digitalWrite(IN1, LOW);         // OFF motore perche in STOP
digitalWrite(IN2, LOW);         // OFF motore perche in STOP
digitalWrite(IN3, LOW);         // OFF motore perche in STOP   
digitalWrite(IN4, LOW);         // OFF motore perche in STOP  
analogWrite(ENA, 0);
analogWrite(ENB, 0);
delay(2000);
}

void avanti ()
{
digitalWrite(IN1, HIGH);       // ON motore dx AVANTI
digitalWrite(IN2, LOW);        // OFF motore dx perche questa e la marcia indietro
digitalWrite(IN3, HIGH);       // ON motore sx AVANTI
digitalWrite(IN4, LOW);        // OFF motore sx perche questa e la marcia indietro
analogWrite(ENA, 200);
analogWrite(ENB, 200);
delay(5000);
digitalWrite(IN1, LOW);       // OFF motore perche in STOP
digitalWrite(IN2, LOW);       // OFF motore perche in STOP    
digitalWrite(IN3, LOW);       // OFF motore perche in STOP  
digitalWrite(IN4, LOW);       // OFF motore perche in STOP   
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}

void indietro ()
{
digitalWrite(IN1, LOW);      // OFF motore dx perche questa e la marcia avanti
digitalWrite(IN2, HIGH);     // ON motore dx INDIETRO
digitalWrite(IN3, LOW);      // OFF motore sx perche questa e la marcia avanti
digitalWrite(IN4, HIGH);     // ON motore sx INDIETRO
analogWrite(ENA, 200);
analogWrite(ENB, 200);
delay(5000);
digitalWrite(IN1, LOW);      // OFF motore perche in STOP    
digitalWrite(IN2, LOW);      // OFF motore perche in STOP
digitalWrite(IN3, LOW);      // OFF motore perche in STOP
digitalWrite(IN4, LOW);     // OFF motore perche in STOP  
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}

void destra ()
{
digitalWrite(IN1, LOW);     // OFF motore dx perche questa e la marcia sinistra
digitalWrite(IN2, HIGH);    // ON motore dx DESTRA
digitalWrite(IN3, HIGH);    // ON motore sx DESTRA
digitalWrite(IN4, LOW);     // OFF motore sx perche questa e la marcia sinista
analogWrite(ENA, 200);
analogWrite(ENB, 200);
delay(5000);
digitalWrite(IN1, LOW);     // OFF motore perche in STOP
digitalWrite(IN2, LOW);     // OFF motore perche in STOP
digitalWrite(IN3, LOW);     // OFF motore perche in STOP
digitalWrite(IN4, LOW);     // OFF motore perche in STOP
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}

void sinistra ()
{
digitalWrite(IN1, HIGH);    // ON motore dx SINISTRA
digitalWrite(IN2, LOW);     // OFF motore dx perche questa e la marcia destra
digitalWrite(IN3, LOW);     // OFF motore sx perche questa e la marcia destra
digitalWrite(IN4, HIGH);    // ON motore sx SINISTRA
analogWrite(ENA, 200);
analogWrite(ENB, 200);
delay(5000);
digitalWrite(IN1, LOW);     // OFF motore perche in STOP
digitalWrite(IN2, LOW);     // OFF motore perche in STOP
digitalWrite(IN3, LOW);     // OFF motore perche in STOP
digitalWrite(IN4, LOW);     // OFF motore perche in STOP
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}

void loop()
{
avanti();
ferma();
indietro();
ferma();
destra();
ferma();
sinistra();
ferma();
}

**@Ajex: **ti ricordo che in conformità al regolamento, punto 7, devi editare (in basso a destra del post, bottone More → Modify) il tuo post e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

Scusami mi sono dimenticato è vero!

  1. Non capisco una cosa. Nelle varie funzioni, esempio sinistra(), c'e' un delay() di 5 secondi. Giri a sinistra ma solo x 5 secondi e poi lo fermi ? Ma ha già la funzione ferma().

  2. ma tu vuoi fare una macchina che va avanti da sola e se c'e' ostacolo davanti cambia direzione ? Quello che devi fare è provare a creare una macchina a stati finiti. In parole povere una variabile che dice in che "momento" si trova ma macchina. http://www.lucadentella.it/2013/04/30/macchina-a-stati-finiti-e-arduino/ int Stato=1; // 0=ferma 1=avanti 2=indietro 3=sx 4=dx Tutto dentro la loop() con un bel switch(Stato) a seconda del valore richiami le tue funzioni. Quando dai la partenza alla macchina metterai Stato=1 poi sarà del codice nella loop() a influenzare Stato in base a cosa rileva il sensore a ultrasuoni. Se sente qualcosa ti troppo vicino deve mettere Stato=0 Dentro a ramo 0 farei anche un attivazione di stato 2 e qui dentro 3 oppure 4 per far cambiare direzione alla macchina