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);
}
}