ho prestato la mia scheda arduino ad un amico e per una settimana non potrò sapere se questo codice funziona...
Secondo voi è corretto? Oltre ad essere alle prime armi è anche la prima volta che uso IRremote
Questo programma servirebbe a controllare un robot con un joistick montato su un telecomando
#include <IRremote.h>
#define motsx 6 //il pin del motore snistro
#define motdx 11 //il pin del motore destro
#define DirSx 7 //controlla la direzione del motore sinistro
#define DirDx 13 //controlla la direzione del motore destro
// IR stuff
#define RECV_PIN 2 //stabilisce il pin del ricevitore
IRrecv irrecv(RECV_PIN); //crea un oggetto per la decodifica
decode_results datiX; //consente la decodifica del codice ir
decode_results datiZ;
int mouvementX;
int mouvementZ;
int Xaxis;
int Zaxis;
void setup() {
pinMode(motdx,OUTPUT);
pinMode(motsx,OUTPUT);
pinMode(DirSx,OUTPUT);
pinMode(DirDx,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // avvia il ricevimento ir
}
//IL MAIN PROGRAM
void loop() {
irrecv.decode(&datiX);
irrecv.resume(); // Receive the next value
delay(80);
irrecv.decode(&datiZ);
irrecv.resume(); // Receive the next value
delay(80);
Xaxis = datiX.value;
Zaxis = datiZ.value;
mouvementX=map(Xaxis,0,1023,0,255); // converte il valore del potenziometro nel valore di output dei motore
mouvementZ=map(Zaxis,0,1023,0,255); // converte il valore del potenziometro nel valore di output dei motore
if ((Xaxis > 512 && Zaxis == 0))
{
forward(); // per andare dritti
}
if (Xaxis > 512 && Zaxis < 512)
{
left(); //per andare a sinistra
}
if (Xaxis > 512 && Zaxis > 512)
{
right(); //per andare a destra
}
if (Xaxis > 512 && Zaxis > 512)
{
backward(); //per andare in retro
}
if (Xaxis < 512 && Zaxis < 512)
{
backward_left(); //andare a sinistra in retro
}
if (Xaxis < 512 && Zaxis > 512)
{
backward_right(); //andare a destra in retro
}
if (Xaxis == 0 && Zaxis < 512)
{
rotation_left(); //per ruotare su se stesso a sinistra
}
if (Xaxis == 0 && Zaxis < 512)
{
rotation_right(); //per ruotare su se stesso a destra
}
}
il programma che gestisce l' arduino che funge da telecomando è
#include <IRremote.h>
IRsend irsend;
IRsend datiX;//per inviare i dati dell' asse X al robot
IRsend datiZ;//per inviare i dati dell' asse Z al robot
#define potenziometroX 5 //il potenziometro avanti/indietro
#define potenziometroZ 3 // potenziometro destra/sinistra
int Xaxis;
int Zaxis;
int mouvementX;
int mouvementZ;
void setup() {
pinMode(potenziometroX,INPUT);
pinMode(potenziometroZ,INPUT);
}
void loop () {
Xaxis=analogRead(potenziometroX); //legge il valore del potenziometro avanti/indietro
Zaxis=analogRead(potenziometroZ); //legge il valore del potenziometro destra/sinistra
//invia coninuamente dati sulla posizione del joistick
datiX.sendSony(0x0+Xaxis,6);
delay(80);
datiZ.sendSony(0x0+Zaxis,6);
delay(80);
}