Salve a tutti,
avrei un problema con la programmazione del mio progetto.
Il mio progetto consiste di far muovere la mia macchina in modo automatico, attraverso un sensore di prossimità riusciva a evitare gli ostacoli. Più precisamente dovrebbe, andare sempre avanti, quando incontra un ostacolo, torna indietro di qualche passo, poi faceva muovere le ruote a destra avanti e le ruote sinistra indietro, o al contrario, facendolo girare(ho un problema in questo pezzo nel programma, è giusto usare un ciclo for??).
PS: Vi allego il circuito e le altri parti del progetto sono qui:Problema con la macchina RC - #5 by system - Software - Arduino Forum
// inizializzo i PIN per collegare la scheda SFR05
int echoPin = 6; // echo (digital 2)
int initPin = 5; // trigger (digital 3)
unsigned long pulseTime = 0;
unsigned long distance = 0; // distanza in cm
int ENA=10;//connected to Arduino's port 10
int IN1=8;//connected to Arduino's port 8
int IN2=9;//connected to Arduino's port 9
int ENB=11;//connected to Arduino's port 11
int IN3=12;//connected to Arduino's port 12
int IN4=13;//connected to Arduino's port 13
//setup
void setup() {
pinMode(initPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ENA,OUTPUT);//output
pinMode(ENB,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);//stop driving
//va avanti
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
Serial.begin(9600); //inizializza la seriale
}
// loop principale
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
distance = pulseTime/58; // Distance = tempo impulso / 58 per calcolare i [cm] di distanza.
delay(100);
analogWrite(ENA,255);//start driving motorA
analogWrite(ENB,255);//start driving motorB
if (distance >=8)
{//se la distanza è maggiore di 8 cm, continua ad andare avanti
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);//setting motorA's directon
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);//setting motorB's directon
}
//se la distanza è minore di 8 cm, va all'indietro di qualche passo
else
{
delay(9000);
for(int x=0; x>=4;x++)
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);//setting motorA's directon
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);//setting motorB's directon
}//gira a destra
for(int x=0; x>=4;x++)
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);//setting motorA's directon
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);//setting motorB's directon
}
}
}
