Questo è il mio codice, o per lo meno quello che sono riuscito a trovare, non uso sempre lo stesso pc per programmare l'arduino quindi non ricordo se questa è l'ultima versione o meno
#include <Servo.h>
/* GIGNIKKO_RobotCar
by Alessio Ciofi
Nel progetto è stato utilizzato:
- Una automobilina telecomandata abbastanza grande da poter contenere le schede.
- Un sensore ad ultrasuoni HC RS04.
- Un servo motore.
- Una scheda Arduino Motor shield.
- Una scheda Arduino uno v.3
*/
int triggerPort = 7;
int echoPort = 6;
Servo myservo;
int pos = 90;
int vel;
void setup (){
pinMode (triggerPort, OUTPUT);
pinMode (echoPort, INPUT);
Serial.begin (9600);
Serial.println("sensore ultrasuoni:");
myservo.attach(5);
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
pinMode(8, OUTPUT);
}
long funzionesonar(){
digitalWrite(triggerPort, LOW);
digitalWrite(triggerPort, HIGH);
delayMicroseconds(10);
digitalWrite( triggerPort, LOW);
long durata = pulseIn (echoPort, HIGH);
long distanza = durata * 0.034 /2;
delay(500);
Serial.println(distanza);
return distanza;
}
void Ferma(){
digitalWrite(8, HIGH);
digitalWrite(11,HIGH);
analogWrite(3,0);
analogWrite(11,0);
}
void Indietro(){
analogWrite(11,0);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(12, LOW);
digitalWrite(9, HIGH);
analogWrite(3, vel);
delay(1500);
Serial.println("Indietro");
}
void Avanti(){
analogWrite(11,0);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(12,HIGH);
digitalWrite(9,LOW);
analogWrite(3,vel);
Serial.println("Avanti");
}
void SvoltaSx (){
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(13, LOW);
digitalWrite(8, HIGH);
analogWrite(11, 255);
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, vel);
delay(1500);
Serial.println("SX");
}
void SvoltaDx (){
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
analogWrite(11, 255);
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, vel);
delay(1500);
Serial.println("DX");
}
void loop (){
long cx, sx, dx;
long distanza = funzionesonar();
if (distanza < 150) {
vel=200;
}else vel=255;
if (distanza > 100) Avanti();
else{
// Attesa scelta servo-sensore
Ferma();
myservo.write(90);
cx = funzionesonar();
delay(500);
myservo.write(120);
sx = funzionesonar();
delay(500);
myservo.write(60);
dx = funzionesonar();
myservo.write(90);
if (cx<35) Indietro();
if (dx<35) Indietro();
if (sx<35) Indietro();
else{
if (sx>dx) SvoltaSx();
else SvoltaDx();
}
}
}
la variabile vel non prenderla in considerazione, quando ho scritto questo sketch, ero convinto (poichè riportato su numerosi progetti non solo sul web ma anche in alcuni testi che parlano di arduino) che potesse regolare la velocità dell'automobilina attraverso l'impostazione del segnale pwm sull'ingresso enable del motor driver; ma come potrai constatare in un altro topic di questo forum l298 da corrente ad arduino - Hardware - Arduino Forum non risponde al modo più idoneo all'utilizzo del motor driver. il valore della variabile vel dovrà essere HIGH o LOW in modo da attivare + o - il motor driver.
ATTENZIONE. il mio progetto include un servo motore che si attiva facendo ruotare il sensore ultrasuoni a dx e a sx, quando il sensore intercetta un ostacolo, in modo da verificare la via di uscita per poi intraprenderla.
Il codice è sempre perfezionabile, per questo è bello incontrarsi in forum come questo. Spero che questo sketch possa darti uno spunto per perfezionare il tuo codice