Bluetooth mouse avec gyroscope.

Bonjour,

J’essaie de construire une souris avec gyroscope tel vous pouvez le voir sur ce site :

sur ce site.

En espérant que l’url passe bien.

Est-ce que je pourrais savoir si je peux remplacer les boutons de la souris tel sur le site, avant, arrière, haut, bas, par un module gyroscopique MPU6050 GY-521 sans l´ajout d’aucun code.

Ce serait l’idéal.
Auquel cas, la question que je me pose serait de savoir comment relier quelle borne d’un module Bluetooth avec quelle borne de la Nano board ?

Est-ce seulement possible ?

Merci pour toute réponse,

Intelego.

Tu peux imaginer que l'inclinaison du gyro soit interprétée comme des commandes droite, gauche, haut et bas. C'est faisable avec un module MCU6050 (accéléromètre + gyromètre). Faire Plus de 4 commandes sera difficile, mais pourquoi pas ?

Par contre, il faudra un minimum de code pour interfacer le module et traduire les données qu'il fournit en commandes que l'Arduino comprendra comme si c'étaient des appuis sur les boutons poussoirs.

Donc : faisable OUI, sans l'ajout d'aucun code NON (à mon avis).

Pour la connexion du module BT, ça dépend de ton module. Est-ce un HC05 ?

Pas du tout c’est un Rn42comme sur le site.

Merci,

Intelego.

Selon la doc du fabricant, il utilise une liaison série. Soit tu utilises directement les pins 0 et 1 de ta nano mais tu ne pourras plus communiquer avec le PC lorsque ton programme tournera (donc il faudra débrancher le module BT pour téléverser le code puis le rebrancher ensuite), soit tu fais comme dans l'exemple fourni et tu utilises la bibliothèque SoftWareSerial qui te permet d'émuler une liaison série avec deux autres pins (2 & 3 dans l'exemple) et de l'utiliser de la même manière.

Merci lesept,

De ces informations détaillées mais mon niveau en électronique et informatique ne me permet de programmer ni d’etre un tant soit peu créatif. Vu que les deux alternatives que me propose son impossible pour moi.

Non ce que j’ai de mieux à faire c’est encore de trouver un tuto. Genre celui-là
Et au lieu d’avoir un seul Bluetooth il y en aura deux.
Il y a le code mais pas le schéma. La vidéo n’est pas trop mauvaise. Je devrais pouvoir reconstituer le tout.

Merci,

Intelego.

L'utilisation de la bibliothèque SoftwareSerial est très simple, et je teste en ce moment même un MPU6050 donc je peux t'aider sur les deux points. Dis moi précisément ce que tu veux faire et donne moi le code dont tu disposes pour l'instant, je vais regarder.

C’est vrai ? Formidable.

C’est tout simple en fait. Mais pour peu que l’on puisse inventer deux ou trois lignes de code.

Voilà ce que je voulais faire c’est remplacer le haut, le bas, avant arrière de la souris par un gyroscope tout bête. Le MPU6050

Mais ces quatre boutons sont en fait le lien entre les connections d1, d2, d3, d4 et GND de l’ardiono. Connectes sous forme un pull-up ou pull-down. Je n’en sait plus lequel.

Quand même ! C’est pas du gâteau !

Donc ce que le gyroscope a à faire c’est seulement fermer le circuit. C’est tout.
Par exemple un peu plus à droite et le gyroscope ferme le contacte de droite, initialement un rôle attribué au bouton de droite. Le MPU5060 remplacerai idéalement en fait 4 connecteurs.

Mais quand j’ai vu de mes yeux vu les bornes du gyroscope j’ai compris combien on peut se faire des illusions.

Merci au moins pour ton enthousiasme.

Intelego.

int led = 13;

int bt1 = 4;//Button 1
int bt2 = 5;//Button 2

int bt3 = 6;//Wheel Down
int bt4 = 7;//Wheel Up

int bt5 = 8;//Up
int bt6 = 9;//Down
int bt7 = 10;//Left
int bt8 = 11;//Right

void readData(void);
void mouseSend(void);
void mouseClear(void);


void setup() {                
  pinMode(led, OUTPUT); 
  pinMode(bt1, INPUT);
  pinMode(bt2, INPUT);
  pinMode(bt3, INPUT);
  pinMode(bt4, INPUT);
  pinMode(bt5, INPUT);
  pinMode(bt6, INPUT);
  pinMode(bt7, INPUT);
  pinMode(bt8, INPUT);  
  
  digitalWrite(led, HIGH);
  Serial.begin(115200);//tem que ser a velocidade certa
 
  delay(2000);
  Serial.print("$$");//<<<<<<<<<< Command mode
  readData();

  Serial.println("C");//<<<<<<<<<<< Connect immediate to stored remote address
  readData();
  digitalWrite(led, LOW);
}


void loop() {
   
  if(digitalRead(bt1)==0)//Button 1
    {
    digitalWrite(led, HIGH);
    mouseClear();//necessary for button activation  
    mouseSend(1,0,0,0);
    delay(200);
    mouseClear();
    }
  if(digitalRead(bt2)==0)//Button 2
    {
    digitalWrite(led, LOW);
    mouseClear();//necessary for button activation
    mouseSend(2,0,0,0);
    delay(200);
    mouseClear();
    }
  if(digitalRead(bt3)==0)//Wheel Down
    {
    digitalWrite(led, HIGH);
    mouseSend(0,0,0,-1);   
    }
  if(digitalRead(bt4)==0)//Wheel Up
    {
    digitalWrite(led, LOW);
    mouseSend(0,0,0,1);    
    }
  if(digitalRead(bt5)==0)//Up
    {
    digitalWrite(led, HIGH);
    mouseSend(0,0,-10,0);    
    }
  if(digitalRead(bt6)==0)//Down
    {
    digitalWrite(led, LOW);
    mouseSend(0,0,10,0);   
    }
  if(digitalRead(bt7)==0)//Left
    {
    digitalWrite(led, HIGH);
    mouseSend(0,-10,0,0);   
    }
  if(digitalRead(bt8)==0)//Right
    {
    digitalWrite(led, LOW); 
    mouseSend(0,10,0,0);  
    }
}


 void readData(void) 
   {
   while(!Serial.available());
   delay(200);
   while(Serial.available()) Serial.read();
   delay(200);
   }
   
void mouseSend(int button,int x, int y,int wheel)
  {
  int value=0x00;
 
  Serial.write(0xFD);
  Serial.write(0x05);
  Serial.write(0x02);
  Serial.write(button);//botão
  Serial.write(x);//(x);
  Serial.write(y);//(y);
  Serial.write(wheel);//(wheel);
  
  delay(20);
  }
  
void mouseClear(void)
  {
  int value=0x00;
 
  Serial.write(0xFD);
  Serial.write(0x05);
  Serial.write(0x02);
  Serial.write(value);//botão
  Serial.write(value);//(x);
  Serial.write(value);//(y);
  Serial.write(value);//(wheel);
  
  delay(20);
  }
[\code]

Mon projet consiste à faire une télécommande IR pour ma TV qui ne remplace que les 4 fonctions Pg+, Pg-, Vol+ et Vol-, selon l'inclinaison de la main. L'idée est de mesurer l'angle d'inclinaison du capteur (qui comporte un accéléromètre 3 axes et un gyromètre 3 axes). Un gyromètre mesure une vitesse angulaire et pas un angle : il faut donc calculer l'angle si la commande se fait selon cette valeur (il y a peut-être d'autres solutions, je suis ouvert à toute proposition :slight_smile: ).

J'ai donc pompé sur Internet les deux lignes qui permettent de connaitre les angles d'inclinaison par rapport aux deux axes X et Y du capteur (ils sont dessinés sur le circuit imprimé normalement). Si la valeur de l'angle autour de X dépasse un seuil (disons 30°) j'envoie le code qui augmente le son, si la valeur de l'angle passe en dessous d'un autre seuil de l'autre côté (-30°) j'envoie le code qui diminue le son, etc...

Pour toi c'est pareil : au lieu d’envoyer un code IR, tu envoies les commandes à la souris.

Le problème que je rencontre est que le système prend du temps à revenir à un angle proche de 0 alors que j'ai remis le capteur à l'horizontale. Il semble y avoir de l'hystérésis. Pour contrer ça, je mesure l'angle maximal atteint dans une direction et j'envoie le code IR tant que l'angle reste dans une plage [angle_max - delta ; angle_max], avec delta à choisir (pour l'instant 2°). Mais il y a peut-être une meilleure solution, en se basant sur les valeurs de l'accéléromètre.

Je n'ai pas le code ici, mais je t'enverrai quelque chose ce soir ou demain.

Salut,

Je vais te paraître trivial, voir vulgaire, voir même grossier, et pourtant as-tu pensé à Amazon ?

Je sais la fierté de maîtriser son environnement. Mais bon quand même une télécommande TV, la universelle, c’est facil à trouver. Quoique l’inclinaison qui changerai le volume je n’en ai jamais vu en fait.

« Et toi tu me dira ». Eh bien moi ce dont j’ai besoin n’existe pas dans le commerce. Parce que c’est une commande Autocad. C’est à dire que quand j’appuie sur un bouton, la télécommande dit « cercle », « carré », « miroir ». Et bon s’il y a les boutons autant qu’il y ait la souris avec.

Mais tu crois que le module gyroscopique peut servir de simple interrupteur ? Si c’était le cas il n’y aurait pas ces effets de bord que tu décris dans ton dernier post.

Merci

Intelego.

En fait, je ne fais ce projet que pour apprendre à me servir du module MCU6050 et des capteur & émetteur IR. Dès que ça marchera, ou que j'aurai l'impression que ça marche, j'arrêterai, je démonterai et je rangerai tout, en attendant d'avoir un besoin pour ces composants...

Mon projet suivant rejoint un peu le tien : j'aimerais voir si on peut utiliser les capteurs capacitifs pour faire une souris 3D, c'est à dire qui donne des coordonnées en x, y et z.
De même, si ça marche, je démonterai, rangerai et passerai à autre chose.

Pour répondre à ta question, le module MCU6050 te donnera juste des informations : c'est ton programme qui les traitera et agira en conséquence. Tu parlais de commandes "avant, arrière, haut, bas", j'ai juste fait le lien avec mon projet qui fait un peu pareil.

Si tu veux ajouter d'autres commandes, il faut réfléchir à ce que le capteur peut fournir. Moi je mesure des angles d'inclinaison selon 2 axes. On peut imaginer que si les 2 angles dépassent un seuil ensemble, il faut reconnaître une autre commande. Ça permet d'en ajouter 4 nouvelles.

Ce qui est déjà envisagé :

  • angle X > seuil X et angle Y proche de 0 : commande 1 (par exemple souris vers le haut)
  • angle X < -seuil X et angle Y proche de 0 : commande 2 (par exemple souris vers le bas)
  • angle Y > seuil Y et angle X proche de 0 : commande 3 (par exemple souris vers la gauche)
  • angle Y < -seuil Y et angle X proche de 0 : commande 1 (par exemple souris vers la droite)

Ce qu'on peut ajouter :

  • angle X > seuil X et angle Y > seuil Y : commande 5 (par exemple clic gauche)
  • angle X < -seuil X et angle Y > seuil Y : commande 6 (par exemple clic DROIT)
  • angle X > seuil X et angle Y < -seuil Y : commande 7 (par exemple ?)
  • angle X < -seuil X et angle Y < -seuil Y : commande 8 (par exemple ?)

Après tu peux encore imaginer des choses liées au temps que le capteur reste dans une configuration donnée, ou adopter plusieurs seuils pour un même angle et avoir plusieurs commandes pour une même inclinaison (inclinaison faible, commande "x"; inclinaison forte, commande "y").

C'est à toi de décider ce que tu veux faire (c'est le cahier des charges de ton projet), puis il faut voir si c'est possible à réaliser en utilisant ce capteur... Ça c'est la phase de programmation.

A propos de l'interrupteur : si tu veux que ton système agisse comme pour un bouton, c'est très réalisable. C'est un exemple de ce que j'appelle plus haut "une commande". Tu peux le faire comme ça : si l'angle X dépasse un seuil (disons 30°), tu envoies à l'ordi la commande qui correspond à ton bouton, mais tu ne l'envoies qu'une seule fois. Ensuite tu attends de revenir en dessous d'un autre seuil (disons 10°) pour recommencer à traiter les données correspondant à l'angle X.

(j'espère que c'est clair et que je n'explique pas comme un cochon... :slight_smile: )

Voici mon code pour l'instant :

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "math.h"
#include <IRremote.h>
IRsend irsend;

// AD0 low = 0x68 (default for InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 accelgyro;

int16_t ax, ay, az;  //mesures brutes
int16_t gx, gy, gz;
float anglex = 0;
float angley = 0;
float offsetx = 0;
float offsety = 0;
float xmax = 0;
float xmin = 0;
float ymax = 0;
float ymin = 0;
byte delta = 2;
byte l = 0;
int khz = 38; // 38kHz carrier frequency for the NEC protocol
unsigned int  VolUp[51] = {3850, 4050, 400, 2050, 400, 2050, 400, 2050, 400, 2000, 450, 1100, 400, 1100, 400, 2050, 400, 1100, 400, 2050, 400, 2050, 400, 2050, 400, 2050, 400, 1100, 400, 1100, 400, 1100, 450, 1100, 400, 2050, 400, 2050, 400, 1100, 400, 2050, 400, 1100, 400, 1100, 400, 1100, 450, 1050, 450};
unsigned int  VolDown[51] = {3900, 4000, 450, 2000, 450, 2000, 450, 2000, 450, 2000, 450, 1050, 450, 1050, 500, 1950, 450, 1050, 500, 1950, 500, 1950, 450, 2000, 450, 1050, 450, 1100, 400, 1100, 450, 1050, 450, 1050, 450, 2000, 450, 2000, 450, 1050, 450, 2000, 450, 1050, 450, 1100, 450, 1050, 450, 2000, 450};
unsigned int  ProgUp[51] = {3850, 4050, 400, 2050, 400, 2050, 400, 2050, 400, 2050, 400, 1100, 400, 1100, 400, 2050, 400, 1100, 400, 2050, 400, 2050, 400, 1100, 400, 2050, 400, 1100, 450, 1100, 400, 1100, 400, 1100, 400, 2050, 400, 2050, 400, 1100, 400, 2050, 400, 1100, 400, 1100, 450, 2000, 450, 1100, 400};
unsigned int  ProgDown[51] = {3900, 4000, 450, 2000, 450, 1950, 500, 1950, 500, 1950, 500, 1050, 450, 1050, 450, 2000, 450, 1050, 450, 2000, 450, 2000, 450, 1050, 450, 1050, 500, 1000, 500, 1050, 450, 1050, 450, 1050, 450, 2000, 450, 2000, 450, 1050, 450, 2000, 450, 1050, 450, 1050, 450, 2000, 500, 1950, 500};

float calculAngle () {
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  anglex = 0.98 * (anglex + float(gx) * 0.01 / 131) + 0.02 * atan2((double)ay, (double)az) * 180 / PI;
  angley = 0.98 * (angley + float(gy) * 0.01 / 131) + 0.02 * atan2((double)ax, (double)az) * 180 / PI;
  delay(10);
}

void setup() {
  Wire.begin();  //I2C bus
  Serial.begin(115200);
  pinMode (A3, OUTPUT);
  // initialize device
  Serial.println("Initialisation I2C...");
  accelgyro.initialize();

  // verify connection
  Serial.println("Test de la connection du dispositif ...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection reussie" : "MPU6050 connection echec");
  delay(1000);
  for (int i = 0; i < 350; i++) calculAngle ();
  offsetx = anglex;
  offsety = angley;
}

void loop() {
  calculAngle ();
  if (anglex - offsetx < -30) { // Volume Down
    if (anglex - offsetx < xmin) xmin = anglex - offsetx;
    if (anglex - offsetx < xmin + delta) {
      digitalWrite(A3, HIGH);
      l = sizeof(VolDown) / sizeof(VolDown[0]);
      irsend.sendRaw(VolDown, l, khz);
      Serial.print ("Vol Down, ");
      delay(500);
    }
  }
  else if (anglex - offsetx > 30) { // Volume Up
    if (anglex - offsetx > xmax) xmax = anglex - offsetx;
    if (anglex - offsetx > xmax - delta) {
      digitalWrite(A3, HIGH);
      l = sizeof(VolUp) / sizeof(VolUp[0]);
      irsend.sendRaw(VolUp, l, khz);
      Serial.print ("Vol Up, ");
      delay(500);
    }
  }
  else {
    digitalWrite(A3, LOW);
    xmin = 0;
    xmax = 0;
  }
  if (angley - offsety < -30) { // Program Up
    if (angley - offsety < ymin) ymin = angley - offsety;
    if (angley - offsety < ymin + delta) {
      digitalWrite(A3, HIGH);
      l = sizeof(ProgUp) / sizeof(ProgUp[0]);
      irsend.sendRaw(ProgUp, l, khz);
      Serial.print ("Prog Up, ");
      delay(500);
    }
  }
  else if (angley - offsety > 30) { // Program Down
    if (angley - offsety > ymax) ymax = angley - offsety;
    if (angley - offsety > ymax - delta) {
      digitalWrite(A3, HIGH);
      l = sizeof(ProgDown) / sizeof(ProgDown[0]);
      irsend.sendRaw(ProgDown, l, khz);
      Serial.print ("Prog Down, ");
      delay(500);
    }
  }
  else {
    digitalWrite(A3, LOW);
    ymin = 0;
    ymax = 0;
  }
  Serial.print(anglex - offsetx);
  Serial.print(",");
  Serial.println(angley - offsety);
}

Bien sûr tu n'as pas besoin de toute la partie IR : le include IRRemote, tous les isrsend, les tableaux...

Intéressant ton code.

Donc tu penses que je peux copier coller une partie de ton code et je pourrais utiliser le module MCU6050 comme une souris ?

Mon code est tel quel :

int led = 13;

int bt1 = 4;//Button 1
int bt2 = 5;//Button 2

int bt3 = 6;//Wheel Down
int bt4 = 7;//Wheel Up

int bt5 = 8;//Up
int bt6 = 9;//Down
int bt7 = 10;//Left
int bt8 = 11;//Right

void readData(void);
void mouseSend(void);
void mouseClear(void);


void setup() {                
  pinMode(led, OUTPUT); 
  pinMode(bt1, INPUT);
  pinMode(bt2, INPUT);
  pinMode(bt3, INPUT);
  pinMode(bt4, INPUT);
  pinMode(bt5, INPUT);
  pinMode(bt6, INPUT);
  pinMode(bt7, INPUT);
  pinMode(bt8, INPUT);  
  
  digitalWrite(led, HIGH);
  Serial.begin(115200);//tem que ser a velocidade certa
 
  delay(2000);
  Serial.print("$$");//<<<<<<<<<< Command mode
  readData();

  Serial.println("C");//<<<<<<<<<<< Connect immediate to stored remote address
  readData();
  digitalWrite(led, LOW);
}


void loop() {
   
  if(digitalRead(bt1)==0)//Button 1
    {
    digitalWrite(led, HIGH);
    mouseClear();//necessary for button activation  
    mouseSend(1,0,0,0);
    delay(200);
    mouseClear();
    }
  if(digitalRead(bt2)==0)//Button 2
    {
    digitalWrite(led, LOW);
    mouseClear();//necessary for button activation
    mouseSend(2,0,0,0);
    delay(200);
    mouseClear();
    }
  if(digitalRead(bt3)==0)//Wheel Down
    {
    digitalWrite(led, HIGH);
    mouseSend(0,0,0,-1);   
    }
  if(digitalRead(bt4)==0)//Wheel Up
    {
    digitalWrite(led, LOW);
    mouseSend(0,0,0,1);    
    }
  if(digitalRead(bt5)==0)//Up
    {
    digitalWrite(led, HIGH);
    mouseSend(0,0,-10,0);    
    }
  if(digitalRead(bt6)==0)//Down
    {
    digitalWrite(led, LOW);
    mouseSend(0,0,10,0);   
    }
  if(digitalRead(bt7)==0)//Left
    {
    digitalWrite(led, HIGH);
    mouseSend(0,-10,0,0);   
    }
  if(digitalRead(bt8)==0)//Right
    {
    digitalWrite(led, LOW); 
    mouseSend(0,10,0,0);  
    }
}


 void readData(void) 
   {
   while(!Serial.available());
   delay(200);
   while(Serial.available()) Serial.read();
   delay(200);
   }
   
void mouseSend(int button,int x, int y,int wheel)
  {
  int value=0x00;
 
  Serial.write(0xFD);
  Serial.write(0x05);
  Serial.write(0x02);
  Serial.write(button);//botão
  Serial.write(x);//(x);
  Serial.write(y);//(y);
  Serial.write(wheel);//(wheel);
  
  delay(20);
  }
  
void mouseClear(void)
  {
  int value=0x00;
 
  Serial.write(0xFD);
  Serial.write(0x05);
  Serial.write(0x02);
  Serial.write(value);//botão
  Serial.write(value);//(x);
  Serial.write(value);//(y);
  Serial.write(value);//(wheel);
  
  delay(20);
  }

Oui d’accord mais quelle partie de ton code je copie ?

Et puis ensuite également où je connecte les bornes du MCU6050 sur les 8 bornes de mon schéma ?

C’est vrai que c’est similaire mais est-ce ton code est si facilement réutilisable que tu le penses ?

Merci

Intelego.

Je pense que tu peux utiliser une partie de mon code comme un "squelette" dans lequel tu peux mettre les instructions de déplacement de la souris.

Je ne connais pas ton module donc difficile de te dire comment le brancher... Voici le mien, si c'est le même, il suffit de brancher :

  • VCC -- 5V
  • GND -- GND
  • SCL -- A5
  • SDA -- A4
  • INT -- 2

Côté code, voici le squelette :

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "math.h"

// AD0 low = 0x68 (default for InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 accelgyro;

int16_t ax, ay, az;  //mesures brutes
int16_t gx, gy, gz;
float anglex = 0;
float angley = 0;
float offsetx = 0;
float offsety = 0;
float xmax = 0;
float xmin = 0;
float ymax = 0;
float ymin = 0;
byte delta = 2;

float calculAngle () {
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  anglex = 0.98 * (anglex + float(gx) * 0.01 / 131) + 0.02 * atan2((double)ay, (double)az) * 180 / PI;
  angley = 0.98 * (angley + float(gy) * 0.01 / 131) + 0.02 * atan2((double)ax, (double)az) * 180 / PI;
  delay(10);
}

void setup() {
  Wire.begin();  //I2C bus
  Serial.begin(115200);
  // initialize device
  Serial.println("Initialisation I2C...");
  accelgyro.initialize();

  // verify connection
  Serial.println("Test de la connection du dispositif ...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection reussie" : "MPU6050 connection echec");
  delay(1000);
  for (int i = 0; i < 350; i++) calculAngle ();
  offsetx = anglex;
  offsety = angley;
}

void loop() {
  calculAngle ();
  if (anglex - offsetx < -30) { // Volume Down
    if (anglex - offsetx < xmin) xmin = anglex - offsetx;
    if (anglex - offsetx < xmin + delta) {

// Mettre ici les instructions pour une commande (par exemple : souris vers le haut)

      delay(5);
    }
  }
  else if (anglex - offsetx > 30) { // Volume Up
    if (anglex - offsetx > xmax) xmax = anglex - offsetx;
    if (anglex - offsetx > xmax - delta) {

// Mettre ici les instructions pour une commande (par exemple : souris vers le bas)

      delay(5);
    }
  }
  else {

    xmin = 0;
    xmax = 0;
  }
  if (angley - offsety < -30) { // Program Up
    if (angley - offsety < ymin) ymin = angley - offsety;
    if (angley - offsety < ymin + delta) {

// Mettre ici les instructions pour une commande (par exemple : souris vers la gauche)

      delay(5);
    }
  }
  else if (angley - offsety > 30) { // Program Down
    if (angley - offsety > ymax) ymax = angley - offsety;
    if (angley - offsety > ymax - delta) {

// Mettre ici les instructions pour une commande (par exemple : souris vers la droite)

      delay(5);
    }
  }
  else {

    ymin = 0;
    ymax = 0;
  }
// Afficher les valeurs des angles pour vérification
  Serial.print(anglex - offsetx);
  Serial.print(",");
  Serial.println(angley - offsety);
}

Il faut que tu fasses les déclarations (varibles globales dont tu as besoin, bibliothèque de gestion de la souris, etc.) dans l'entête, que tu mettes ce qu'il faut en plus dans le setup, et que tu insères là où j'ai laissé les places les instructions de déplacement de la souris (les mouseSend...)
Les delays(5) sont des vestiges de mon code, et servaient à temporiser pendant que les codes sont envoyés, afin de ne pas changer les chaines en rafale. Pour toi, je les ai fortement diminués, peut-être que tu n'en as as besoin.

Je ne sais pas si ça marchera, car :

  • C'est la première fois que j'utilise un MPU6050 donc je ne peux pas dire que je suis un pro de ce capteur
  • Je n'ai jamais fait ce que tu veux faire, à savoir commander une souris.

Il y aura peut-être des choses à modifier ou des paramètres à optimiser... Je te laisse voir si ça marche et jouer un peu avec.

Super

Mais en fait tu utilises une arduino type Leonardo ou type Uno ?

Je pose la question car tu parles de bibliothèque gestion de souris et je sais que l’arduino type Leonardo est un émulateur clavier et souris alors que l’arduino Uno pas du tout donc ce n’est pas les mêmes programmes.

Par exemple moi j’utilise un tuto avec la Uno. Avec un programme écrit pour la Uno. Et la Uno ne reconnaît l’emulation clavier et souris.

Merci,

Intelego.

J'utilise un nano, et les codes sont compatibles 100% avec le Uno, pas de problème de ce côté

Eh bien mercy.

Je vais assembler les composants.

Salut.

Intelego.

Ok, tiens moi au courant

Bonjour lesept,

Je viens de voir un tuto avec une télécommande qui commanderait du son.

Je me suis soudainement rappelé de ton projet.

C'est toi l'auteur de ce tuto ?

Ou bien alors eh bien le voila réalisé.

[VOIR LE LINK[]

Salut,

Intelego.
](http://www.mrhobbytronics.com/arduino-accelerometer-mouse/)

Hello
Non, rien à voir avec moi... As-tu avancé dans ton projet ?

Certes rien à voir, mais as-tu que c'est exactement ton projet réalisé devant tes yeux !
Incroyable !

Salutations,

Intelego.