inserisco il codice che ho utilizzaro per dare vita al Rover.
___________________________________________________
// Applicazione per Rover SunFollower
// Il robot segue le fonti di luce predominanti
// evita gli ostacoli se entra in collisione con un ostacolo
// rilevato dai sensori.
//Ver. 1.0 7/3/2010
#include
#define SX 0 //pin 0 per sensore di SX
#define DX 1 //pin 1 per sensore di DX
#define LSX 9 //pin 9 per sensore di luce di Sinistra
#define LDX 8 //pin 8 per sensore di luce di Destra
Servo myservoDX; // Creo oggetto per ruota di Destra
Servo myservoSX; //Creo oggetto per ruota di Sinistra
long val_SX=0;
long val_DX=0;
long OTT_DX=0; //variabile per registrare la luce di Destra
long OTT_SX=0; // Variabile per registrare la luce di Sinistra
long delta=0; //variabile usata per salvare la differenza di luce tra DX e SX
void setup() {
Serial.begin(9600);
myservoDX.attach(9); // servo ruote al pin 9 PWM ruota di Destra
myservoSX.attach(8); // servo ruote al pin 8 PWM ruota di Sinistra
}
void loop () {
val_SX=analogRead(SX); //leggo i valori degli interruttori di sinistra
val_DX=analogRead(DX); //leggo i valori degli interruttori di destra
OTT_DX=analogRead(LDX); //leggo i valori di luce di Destra
OTT_SX=analogRead(LSX)-5; //leggo i valori di luce di Sinistra
delta = OTT_SX-OTT_DX; // eseguo la sottrazione tra i vaolri rilevati
// ottenendo valori positivi o negativi o ugali a 0
if (val_SX <= 20)
{
myservoSX.write(91); //Rover si ferma per blocco a sinistra
myservoDX.write(92);
delay(1000);
myservoDX.write(95); // va in dietro ruotando sulla ruota Sinistra
myservoSX.write(91);
delay (2000);
}
else if (val_DX 0 ) //rover riceve luce da Sinistra quindi gira a Sinistra
{
myservoSX.write(92); //rover ruota a Sinistra
myservoDX.write(88);
delay (500);
}
else if (delta < 0 ) //rover riceve luce da Destra quindi gira a Destra
{
myservoSX.write(95); //rover ruota a Destra
myservoDX.write(91);
delay (500);
}
else
{
myservoDX.write(88); // va avanti
myservoSX.write(95);
delay(500);
}
Serial.println(delta); //Debug e print del valore differenza tra la luce
myservoDX.write(91); //
myservoSX.write(92); // Rover si ferma
delay(10);
}