[gl-como] RoboGrass
Davide De Prisco
deprisco.davide@gmail.com
Dom 15 Mar 2015 16:12:40 CET
Ecco il programma scritto in fiera, da sistemare ;-P
//---------------------------------------------------------//
// //
//Robograss V0.1 //
// //
//Programmed by albertux 2014 //
// //
// Listato principale con due sensori SRF05 //
// posti frontalmente e Vnh5019 Motor shield //
// //
//---------------------------------------------------------//
#include "DualVNH5019MotorShield.h" // Inizializzazione libreria VNH5019
#include <NewPing.h>
#define trigPinSINISTRO 3 //dove è collegato il pin trigger del sensore 1
#define echoPinSINISTRO 5 //dove è collegato il pin echo del sensore 1
#define trigPinDESTRO 11 //dove è collegato il pin trigger del sensore 2
#define echoPinDESTRO 13 //dove è collegato il pin echo del sensore 2
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in
centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonarDESTRO(trigPinDESTRO, echoPinDESTRO, MAX_DISTANCE); //
NewPing setup of pins and maximum distance.
NewPing sonarSINISTRO(trigPinSINISTRO, echoPinSINISTRO, MAX_DISTANCE);
// NewPing setup of pins and maximum distance.
DualVNH5019MotorShield md; // Setup motor shield with declaration md
void setup()
{
Serial.begin(9600);
md.init(); // Inizializzazione Motor Shield VNH5019
}
void svicola_ostacolo( int SINISTRA , int DESTRA )
{
// md.setBrakes (0,0);
if ( SINISTRA > DESTRA ) // gira a sinistra
{
md.setSpeeds (50, -50); // giro su asse ruote a sinistra
delay (500); // attivo per 0.5 sec
}
else
{
md.setSpeeds (-50, 50); // giro su asse ruote a destra
delay (500); // attivo per 0.5 sec
}
}
void loop()
{
//Controllo tensione batteria
// if (tenisoneBAT < 10 ) //se minore di 10 V
// {
// md.setBrakes (0,0); // fermo i motori
// delay (500000); aspetto per non consumare
// exit();
// }
delay(100); // Wait 50ms between pings (about
20 pings/sec). 29ms should be the shortest delay between pings.
unsigned int DES = sonarDESTRO.ping(); // Send ping, get ping time
in microseconds (uS).
unsigned DESTRA = DES / US_ROUNDTRIP_CM ;
Serial.print("Ping: ");
Serial.print( DESTRA ); // Convert ping time to distance in cm and
print result (0 = outside set distance range)
Serial.println("cm");
delay(100); // Wait 50ms between pings (about
20 pings/sec). 29ms should be the shortest delay between pings.
unsigned int SIN = sonarSINISTRO.ping(); // Send ping, get ping time
in microseconds (uS).
unsigned SINISTRA = SIN / US_ROUNDTRIP_CM ;
Serial.print("Ping: ");
Serial.print( SINISTRA ); // Convert ping time to distance in cm and
print result (0 = outside set distance range)
Serial.println("cm");
if (( SINISTRA > 50 || SINISTRA == 0 ) && ( DESTRA > 50 || DESTRA
== 0 )) // non ci sono ostacoli avanti
{
md.setSpeeds (60, 40); //motori avanti velocità di taglio
delay (250);
}
else
{
// Funzione SVICOLA_OSTACOLO
svicola_ostacolo( SINISTRA , DESTRA );
delay (250);
}
}
Davide
Maggiori informazioni sulla lista
gl-como