Go Down

Topic: Dataglove (Read 897 times) previous topic - next topic

dangrod

Bonjour tout le monde.

Je commence un projet de création de data glove qui pour l'instant est composé d'un accéléromètre et de 2 boutons. Et le problème que j'ai c'est l'interface entre la carte et l'ordi et donc je voudrai savoir ce que vous me proposai.

J'ai une arduino mega 2560, un adxl345 et un windows 7 64 bit.

Merci de votre aide  :D

dangrod

Voila le code que j'ai pour l'instant :

Code: [Select]

#include <Wire.h>
#include <Adxl345.h>


ADXL345 adxl; //variable adxl is an instance of the ADXL345 library


void setup(){
 
  Serial.begin(115200);//115200
  pinMode(13, OUTPUT);
  pinMode(39, OUTPUT);
  pinMode(41, OUTPUT);
  pinMode(43, OUTPUT);
  pinMode(7, OUTPUT); 
  pinMode(44  , OUTPUT);
  pinMode(42  , OUTPUT);
  pinMode(40  , OUTPUT);
  pinMode(38  , OUTPUT);
  pinMode(36  , OUTPUT);
  pinMode(52  , OUTPUT);
  pinMode(53  , OUTPUT); 
  pinMode(51  , OUTPUT); 
  pinMode(50  , OUTPUT); 
  pinMode(49  , OUTPUT); 
  pinMode(48  , OUTPUT); 
  pinMode(47  , OUTPUT);
  pinMode(46  , OUTPUT);
  pinMode(36, OUTPUT);
  pinMode(35, INPUT);
  pinMode(45, INPUT);
  pinMode(37, INPUT);
  pinMode(34, INPUT); 
 
  adxl.powerOn();//réglage accéléromètre

  //set activity/ inactivity thresholds (0-255)
  adxl.setActivityThreshold(75); //62.5mg per increment
  adxl.setInactivityThreshold(75); //62.5mg per increment
  adxl.setTimeInactivity(255); // how many seconds of no activity is inactive?

  //look of activity movement on this axes - 1 == on; 0 == off
  adxl.setActivityX(1);
  adxl.setActivityY(1);
  adxl.setActivityZ(1);

  //look of inactivity movement on this axes - 1 == on; 0 == off
  adxl.setInactivityX(0);
  adxl.setInactivityY(0);
  adxl.setInactivityZ(0);

  //look of tap movement on this axes - 1 == on; 0 == off
  adxl.setTapDetectionOnX(1);
  adxl.setTapDetectionOnY(1);
  adxl.setTapDetectionOnZ(1);

  //set values for what is a tap, and what is a double tap (0-255)
  adxl.setTapThreshold(37); //62.5mg per increment
  adxl.setTapDuration(11); //625?s per increment
  adxl.setDoubleTapLatency(120); //1.25ms per increment
  adxl.setDoubleTapWindow(220); //1.25ms per increment

  //set values for what is considered freefall (0-255)
  adxl.setFreeFallThreshold(7); //(5 - 9) recommended - 62.5mg per increment
  adxl.setFreeFallDuration(45); //(20 - 70) recommended - 5ms per increment

  //setting all interupts to take place on int pin 1
  //I had issues with int pin 2, was unable to reset it
  adxl.setInterruptMapping( ADXL345_INT_SINGLE_TAP_BIT,   ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_DOUBLE_TAP_BIT,   ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_FREE_FALL_BIT,    ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_ACTIVITY_BIT,     ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_INACTIVITY_BIT,   ADXL345_INT1_PIN );

  //register interupt actions - 1 == on; 0 == off 
  adxl.setInterrupt( ADXL345_INT_SINGLE_TAP_BIT, 1);
  adxl.setInterrupt( ADXL345_INT_DOUBLE_TAP_BIT, 1);
  adxl.setInterrupt( ADXL345_INT_FREE_FALL_BIT,  1);
  adxl.setInterrupt( ADXL345_INT_ACTIVITY_BIT,   1);
  adxl.setInterrupt( ADXL345_INT_INACTIVITY_BIT, 1);

//  unsigned char val;

  // send the mouse start up
//  while(mouse.write(0xAA)!=0); 
//  while(mouse.write(0x00)!=0);
 
 
 
Serial.println ("on");
digitalWrite(13, HIGH);   
  delay(1000);             
  digitalWrite(13, LOW);   

 
}

void loop()
{
 
     
if (Wire.available ()) digitalWrite(13, HIGH); 

else digitalWrite(13, LOW);

 
 
   
 
  //Boring accelerometer stuff   
  int x,y,z; 
  adxl.readAccel(&x, &y, &z); //read the accelerometer values and store them in variables  x,y,z



  //Fun Stuff!   
  //read interrupts source and look for triggerd actions
 
  //getInterruptSource clears all triggered actions after returning value
  //so do not call again until you need to recheck for triggered actions
   byte interrupts = adxl.getInterruptSource();
 
  // freefall
  if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){
    Serial.println("freefall");
    //add code here to do when freefall is sensed
  }
 
//ACTIVITY
 
  if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){
   Serial.println("Activity");
   digitalWrite(43, HIGH);
  }
else  digitalWrite(43, LOW);
     
 
 
    //tap
  if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP))
  {
       
    //double tap
     if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP))
     {
    digitalWrite(39, HIGH);
    Serial.println("double tap");
     
  } 
   
   
    else
    {
     
    digitalWrite(41, HIGH);
    Serial.println("tap");
                   
     }
    }

 
   
     

Serial.print ("Acc : ");   
 
 
 
  Serial.print ('x');
  Serial.print (x, DEC);
  Serial.print ("\t");
 
  Serial.print ('y');
  Serial.print (y, DEC);
  Serial.print ("\t");

  Serial.print ('z');
  Serial.print (z, DEC);
  Serial.print ("\t");
 
     
    delay(175); 
 

 
     
}


voila donc ce que je voudrait c'est pouvoir utiliser les variables x,y,z renvoyées par l'accéléromètre pour émuler la souris de mon pc mais je ne sait pas ce qu'il faut utiliser coté pc.

dangrod

Il me semble que processing est capable de faire ce que je voudrais, voue n'aurez pas un exemple de communication entre un arduino et ce logiciel ?

Jean-François

MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up