Pages: [1]   Go Down
Author Topic: Mi servirebbe una conferma su IRremote  (Read 530 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:

#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 è

Code:
#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);
}
« Last Edit: February 16, 2013, 07:34:44 am by aerospike » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per favore per le prox volte includi il codice usando l'apposito tag code (il pulsante "#").

PS:
perché 2 volte lo stesso messaggio? E' un errore? Se sì, potresti cancellare il secondo?
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Corretto  smiley-mr-green Mi spiace di non essermi spiegato all' inizio, ho 2 dubbi legati proprio alla comunicazione infrarosso

1-l' arduino-telecomando legge i potenziometri del joystick che ho chiamato asseX e asseZ, e il codice inviato tramite l' infrarosso cambia in funzione di essi in questo modo:

Code:

   datiX.sendSony(0x0+Xaxis,6);
   delay(80);
   datiZ.sendSony(0x0+Zaxis,6);
   delay(80);

non sono segnati errori quando lo compilo ma non sono sicuro che funzioni




2-devo far distinguere al robot 2 segnali distinti, quelli provenienti dall' asseX e dall' asseZ del joystick, ma i segnali arrivano da un solo pin quindi come faccio a distinguerli ?

ho provato a "sincronizzare"  l' invio dei dati dal telecomando,  con il ricevimento da parte del robot, in questo modo:
 l' invio dei dati sul' asseX è contemporaneo al ricevimento di essi sul robot, dopo una pausa di 80 millisecondi, avviene lo stesso ma questa volta per l' asseZ
 
anche questa volta però non sono sicuro che funzioni

Code:
 irrecv.decode(&datiX);

  irrecv.resume(); // Receive the next value
  delay(80);  
  
  irrecv.decode(&datiZ);
  irrecv.resume(); // Receive the next value
 
  delay(80);

« Last Edit: February 15, 2013, 03:55:25 pm by aerospike » Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Spedisci 2 caratteri: il primo indicherà a quale asse si riferisce il secondo byte ricevuto.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

potresti scrivermi un esempio ? è la prima vota che uso IRremote e non sono molto pratico
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vedo che spedisci dati così:
Code:
datiX.sendSony(0x0+Xaxis,6);

Potresti spedire prima un carattere prestabilito e poi il dato:
Code:
datiX.sendSony(0xff,6);
datiX.sendSony(0x0+Xaxis,6);
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok grazie  smiley e per il ricevimento come sarebbe lo sketch?

PS: voglio andare sul sicuro
Logged

Pages: [1]   Go Up
Jump to: