/*
Test_robot_adriBOT.ino
Programma per la gestione del robot adribot tramite
sensore Ir e telecomando DeA
Si sono utilizzati i seguenti pin
+5V
GND
Pin Digitale 5 -> Servo
Pin Digitale 6 -> Servo
Pin Digitale 7 -> Sensore IR
Pin Digitale 13 -> Led
Ultima modifica il 27/7/2014
Applicazione realizzata da Adriano Gandolfo, tutto il materiale
disponibile sul sito Elettronica Open Source
Blog http://it.emcelettronica.com/author/adrirobot/
Filmato
Sito web https://www.adrirobot.it
This example code is in the public domain.
*/
#include <Servo.h>// Caricamento libreria per la crazione degli oggetti Servo che generano segnali PWM
Servo leftDrive; // Creazione per controllo servomotore sinistro
Servo rightDrive; // Creazione per controllo servomotore destro
#include <IRremote.h> // Caricamento libreria per gestione sensore IR
int receiver = 7; // Definizione del pin a cui è collegato il sensore IR
IRrecv irrecv(receiver); // Inizializzazione della libreria IRemote
decode_results results; // Decodifica del risultato che Arduino riceve dal sensore
// per ottenere un valore numerico utilizzabile nel confronto.
#define ledpin 13 // Definizione del pin a cui sono collegati i led di illuminazione
void setup()
{
leftDrive.attach(5); // attribuisce il servo sul pin 5 all'oggetto servo
rightDrive.attach(6); // attribuisce il servo sul pin 6 all'oggetto servo
pinMode(ledpin, OUTPUT); //Imposta il pin dei led come Output
irrecv.enableIRIn(); // si utilizza il metodo irrecv.enableIRIn(
// della libreria IRemote perchè legga i valori provenienti dal sensore
Serial.begin(9600); // Imposta la velocità della seriale per controllo
}
void loop()
{
if (irrecv.decode(&results)) // È stato ricevuto un segnale IR?
{
Serial.println(results.value, HEX); // Mostra eventualmente sul monitor seriale
// il valore esadecimale ricevuto
irrecv.resume();// prosegue mettendo il sensore nuovamente in modalità di ascolto
}
if ( results.value == 0x810 ){
driveForward();
} // a seconda dei valori decodificati esegue una diversa routine
if ( results.value == 0x210 ){
driveBackward();
}
if ( results.value == 0xA90 ){
STOP();
}
if ( results.value == 0x410 ){
turnLeft();
}
if ( results.value == 0xA10){
turnBackLeft();
}
if ( results.value == 0x10 ){
turnRight();
}
if ( results.value == 0xC10 ){
turnBackRight();
}
if ( results.value == 0xE10 ){
digitalWrite(ledpin, HIGH);
} //Accende i led frontali
if ( results.value == 0x910 ){
digitalWrite(ledpin, LOW);
} //Spegne i led frontali
}
//Routine azionamento
void turnRight() //Il robot gira a destra
{
leftDrive.write(180);
rightDrive.write(180);
}
void turnBackRight() //Il robot indietro a destra
{
leftDrive.write(90);
rightDrive.write(0);
}
void turnLeft() //Il robot gira a destra
{
leftDrive.write(0);
rightDrive.write(0);
}
void turnBackLeft() //Il robot gira a destra
{
leftDrive.write(180);
rightDrive.write(90);
}
void driveForward() //Il Robot va avanti
{
leftDrive.write(0);
rightDrive.write(180);
}
void driveBackward() //Il robot va indietro
{
leftDrive.write(180);
rightDrive.write(0);
}
void STOP()// Il robot si ferma
{
leftDrive.write(90);
rightDrive.write(90);
} |