Problema Robot evita ostacoli

Buongiorno a tutti

vi sottopongo il mio dilemma.
sono alle prime armi, quindi può essere che non sto facendo qualcosa nel modo corretto....

Il mio progetto è un robot che evita gli ostacoli e che utilizza tre moduli IR per rivelare oggetti di fronte a se. i tre IR sono orientati tutti orientati nella parte anteriore del robot, ma ad angolazioni di 45 gradi diverse: quindi uno a 45 gradi a sinistra ( L ) , uno centrale che guarda avanti ( C ) e uno sul lato destro a 45 gradi da c (R).
il robot ha due ruote con motori DC che sono pilotati da una scheda YL86.

PROBLEMA: con il seguente script a volte capita che si blocca il robot incontrando un ostacolo e ripete la stessa funzione ,anche se il sensore non rileva più ostacoli.

void setup() {
 // put your setup code here, to run once:
 pinMode(2,OUTPUT);//Motor Driver Pin 1
 pinMode(3,OUTPUT);//Motor Driver Pin 2
 pinMode(4,OUTPUT);//Motor Driver Pin 3
 pinMode(5,OUTPUT);//Motor Driver Pin 4

 pinMode(10,INPUT);//Left Ir Sensor Signal Input
 pinMode(7,INPUT);//Central Ir Sensor Signal Input
 pinMode(9,INPUT);//Right Ir Sensor Signal Input
 /*
 //3 e 2 sono motore A (di destra) e 4 e 5 sono motore B (di sinistra)
digitalWrite(5,HIGH); AVANTI
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(2,HIGH);
  //------------------------
digitalWrite(5,LOW); INDIETRO
digitalWrite(4,HIGH);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
  //------------------------
digitalWrite(5,LOW); RUOTA VERSO SX
digitalWrite(4,HIGH);
digitalWrite(3,LOW);
digitalWrite(2,HIGH);
  //------------------------
digitalWrite(5,HIGH); RUOTA VERSO DX
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);

sensori con funzione IF= valore high vuol dire che  hanno un ostacolo, con low si */
}

void loop() {
//sensori centrale right e left
 int c=digitalRead(7);
 int l=digitalRead(10);
 int r=digitalRead(9);
if(l == HIGH && c == HIGH && r == HIGH){
//se  NON c'è ostacolo va avanti
digitalWrite(5,HIGH); //AVANTI
digitalWrite(4,LOW);
digitalWrite(3,LOW);
digitalWrite(2,HIGH);
delay(15); 
}

else if(l == LOW){ //ostacolo a sinistra
 digitalWrite(5,HIGH); //RUOTA VERSO DX
digitalWrite(4,LOW);
digitalWrite(3,HIGH);
digitalWrite(2,LOW);
}
else if(c == LOW){ //ostacolo davanti
digitalWrite(5,LOW); //RUOTA VERSO SX
digitalWrite(4,HIGH);
digitalWrite(3,LOW);
digitalWrite(2,HIGH);
}
else if(r == LOW){ //ostacolo a destra
digitalWrite(5,LOW); //RUOTA VERSO SX
digitalWrite(4,HIGH);
digitalWrite(3,LOW);
digitalWrite(2,HIGH);
 }
}

Buongiorno,
prima di tutto, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo primo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

chiedo scusa. ho rimediato alle mie mancanze.grazie!

Ciao, a parte il codice che hai messo nel setup() motore avanti, destra,sinistra ecc.., che non ha senso metterlo nel setup().

Nel loop() leggi i tre sensori e con degli if() scegli la direzione dei motori, non è un codice che ti possa dare dei problemi "se un sensore è attivo fa qualcosa" è tutto li il codice.

La mia idea è che sia un problema di elettronica, per qualche motivo i sensori si attivano anche quando non dovrebbero, se riesci metti tre led che si accendano quando il sensore è attivo, cosi ti possono indicare un malfunzionamento dei sensori.