souris a, souris b, et mix de codes ?

Bonjour,

J'ai une souris A, bluetooth RN-42.
J'ai une souris B, gyroscospique, mais seulement USB (pas bluetooth).

Comment rendre la souris B bluetooth ?

Suffit-il d'ajourter le code spécifique bluetooth de la souris A, dans la souris B ?

C'est à dire en l'occurence le code spécifique bluetooth de la souris A est : "mousesend" ?

Je rajoute le "mousesend" de la souris A, au code de la souris B, juste après ?

mySerial.print(abs(aaWorld.x))
mySerial.print(abs(aaWorld.y))
mySerial.print(abs(aaWorld.z))

SOURIS A

int led = 13;

int bt1 = 4;
int bt2 = 5;
int bt3 = 6;
int bt4 = 7;
int bt5 = 8;
int bt6 = 9;
int bt7 = 10;
int bt8 = 11;

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(500);
  Serial.print("$$");//<<<<<<<<<< command mode
  readData();

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


void loop() {
   
  if(digitalRead(bt1)==0)
    {
    digitalWrite(led, HIGH);
    mouseClear();//necessary for button activation  
    mouseSend(1,0,0,0);
    delay(200);
    mouseClear();
    }
  if(digitalRead(bt2)==0)
    {
    digitalWrite(led, LOW);
    mouseClear();//necessary for button activation
    mouseSend(2,0,0,0);
    delay(200);
    mouseClear();
    }
  if(digitalRead(bt3)==0)
    {
    digitalWrite(led, HIGH);
    mouseSend(0,0,0,-1);   
    }
  if(digitalRead(bt4)==0)
    {
    digitalWrite(led, LOW);
    mouseSend(0,0,0,1);    
    }
  if(digitalRead(bt5)==0)
    {
    digitalWrite(led, HIGH);
    mouseSend(0,0,-10,0);    
    }
  if(digitalRead(bt6)==0)
    {
    digitalWrite(led, LOW);
    mouseSend(0,0,10,0);   
    }
  if(digitalRead(bt7)==0)
    {
    digitalWrite(led, HIGH);
    mouseSend(0,-10,0,0);   
    }
  if(digitalRead(bt8)==0)
    {
    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);
  }

SOURIS B

#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include <Mouse.h>

MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;
int vx, vy;
int button1 = 6;
int button2 = 7;
int buttonState1 = 0; 
int buttonState2 = 0; 

void setup() {

  Serial.begin(9600);
  Wire.begin();
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  mpu.initialize();
  if (!mpu.testConnection()) { while (1); }
}

void loop() {
  mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);

  vx = (gx+15)/150;  
  vy = -(gz-100)/150;

  Serial.print("gx = ");
  Serial.print(gx);
  Serial.print(" | gz = ");
  Serial.print(gz);
  
  Serial.print("        | X = ");
  Serial.print(vx);
  Serial.print(" | Y = ");
  Serial.println(vy);
  
  Mouse.move(vx, vy);
  
  buttonState1 = digitalRead(button1);
  buttonState2 = digitalRead(button2);
  
 if (buttonState1 == HIGH) {
    Mouse.press(MOUSE_LEFT);
    delay(100);
    Mouse.release(MOUSE_LEFT);
    delay(200);
  } 
  else if(buttonState2 == HIGH) {
    Mouse.press(MOUSE_RIGHT);
    delay(100);
    Mouse.release(MOUSE_RIGHT);
    delay(200);
  }
  delay(80);
}

Est-ce que les choses seraient suffisament simples pour que la commande "mousend" soit compatible avec les deux codes ?

Y a-t-il que ce bout code "mousesend" qui soit specifique bluetooth pour la souris A ?
Y a-t-il d'autres bout de code qui concerte le bluetooth dans le code de la souris A ?

Merci

Intelego

Re bonjour,

je précise que je veux rendre la souris B en soudant un RN-42 sur la souris B.
et je rajoute le code "mousesend".

et voici les schémas :

souris A

souris B

Merci,

Intelego

Il y a une erreur : Je veux rendre la souris B bluetooth en lui soudant un RN-45 et en lui ajoutant le code "mousesend"

Merci,

Intelego.

Tu as déjà trois fils de discussion ouverts sur le même thème.

Se disperser n'est pas efficace., et mieux vaut répondre à toutes les propositions pour ne pas décourager les intervenants

Dans le code A (BT par RN42 HID), les 3 fonctions

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

.......plus les quelques serial.print() ou serial.write() dispersés allieeurs servent à gérer le HID Bluetooth du module Microchip "RN42 HID".

dans le code B (USB HID) il est fait appel à une librairie mouse spécifique au HID USB. Cette librairie est fournie par Arduino pour le cartes dotées de micros 32u4. Cette librairie est incapable de gérer un RN42 HID

Je remarque que tu ne reprends jamais la notion de HID dans tes interventions , elle pourtant au centre de ce que tu veux faire. Tous les RN42 ne font pas le HID, attention lors de l'achat.

Ton projet neccesite une comprehésion des choses, il ne peut être atteint pas un copie-coller de lignes de code

Dans le code de la souris B, il manque un mouse.begin() dans le setup.

Ensuite, mouse.move envoie des valeurs de déplacements, c'est à dire (je pense) le nombre de pixels dont il faut déplacer le curseur de la souris en X et en Y. Concernant mousesend, je ne sais pas si les arguments x et y sont des déplacements ou des positions absolues. Il faudrait savoir à quoi correspondent les codes qui viennent avant:

  Serial.write(0xFD);
  Serial.write(0x05);
  Serial.write(0x02);

Enfin, pour la question d'utiliser mousesend directement dans le code B : la bibliothèque Mouse utilise le framework PluggableHID (HID : Human Interface Device) qui permet de développer des interfaces USB. Ta souris n'est pas USB, puisque tu veux l'utiliser en Bluetooth. Donc, a priori, il n'y a pas de raison que ça marche aussi facilement que ça...

Pour info voici les variantes de RN42 et les 2 modèles gérant en BT le profil HID
RN42HID.png

Il me semble que pour avancer il faudrait comprendre :
-'de quoi a besoin ' le RN42HID, quelles commandes lui envoyer....
-comment ces besoins sont satisfaits dans le code A
Ensuite il sera possible de faire l'adaptation au BT HID du code B'

vers le milieu de la page web déjà citée on voit une liste de commandes envoyées en série (Tx/Rx) au RN42HID

$$$ terá a resposta CMD, entra no modo de comandos
ST,255 terá a resposa AOK, desativa timer para poder enviar comandos por mais de 60s

D apresenta as informações básicas do módulo
E apresenta as informações adicionais do módulo
SF,1 restaura configurações de fábrica
R,1 reboot
**$$$ ** modo de comandos
**ST,255 ** desativa timer
S-,RN42HID-Mouse muda o nome para RN42HID-MOUSE-xxxx onde os 4 últimos dígitos do MAC address do módulo são adicionados automaticamente
SH,0220 configura como mouse
S~,6 ativa profile HID
**SM,4 ** Auto-Connect DTR Mode, permite reconectar por comando $$$ C
R,1 reboot

Ce ne sont pas les commandes AT habituelles mais des commande équivalentes non précédées de 'AT'
Elles figurent dans la notice des RN-42
Par exemple pour envoyer des commandes aux RN42 il faut d'abord envoyer 3 fois le signe $, il devient réceptif aux commandes

En parcourant la page web déjà citée il semble que le code exécuté par la carte Arduino (git hub içi)

fonctionne à condition que le module RN42HID ait été préalablement configuré 'à la main' en envoyant au module ,par FTDI ou équivalent, la bonne séquence de commandes décrite au paragraphe :
Configuração do Módulo Bluetooth
depuis le premier $$$ jusqu'au dernier R,1

Le gros de l'initialisation du RN42HID n'est pas faite dans le code Arduino mais en amont

Quand je pense que j'ai commencé à souder une carte RN-42, que je l'ai même acheté avec mes sous, et que je me prépare à la connecter à une carte arduino ;
Quand on sait combien les bornes à souder de la carte RN-42 sont minus même au microscope, et bien je suis m’apprêtais peut-être à me fatiguer pour rien avant de prendre connaissance de ce tableau.

Merci

Intelego

Un petit espoir
Le tableau avec les variantes de RN42 a été pris dans une doc de 2012 du fabricant initial (Roving Networks) , qui depuis a été rachété par Microchip. A l'époque j'utilisais ces modules , les choses ont pu changer dans le 'bon 'sens ....Microchip a peut être réduit le nombre de variantes, son RN42 actuel est peut être polyvalent. (SPP+HID) ??

Pas le temps maintenant de creuser cette piste... ce soir peut etre....
Ne jettes pas ton RN42 !!

Allfch,

Je viens de vérifier tes informations, et je m’aperçois que ma carte RN-42 et la carte RN-42 de Marchanjo ne sont pas HID et pourtant il est arrivé à faire installation parfaitement fonctionnelle.

Comment est-ce possible ? Regarde bien sur l'image que je t'envoie, il n'est fait mention nulle part de HID sur sa carte RN-42.

En fait si tu regardes bien, c'est HID nul part, de tout les magasins et pourtant comment tu expliques cela ?

Merci,

Intelego.

Ah oui d'accord merci, je comprends mieux.

je constate aussi, sans expliquer et sans conclure...
ça irait dans les sens d'un RN42 Microchip polyvalent contarirement aux premiers RN42 de Roving Networks

et pourtant à l'instant je vois ça sur le site Microchip... Bizarre.....

Oui vraiment pus on obtient des informations, moins en fait on en sait...

Mystère...

Comme c'est étrange... vraiment.

Mais plus concrètement combien un électronicien certifié me facturerait le remplacement de la connexion USB de la souris B par une connexion bluetooth ?

En euro ?

Merci,

Intelego

La solution :

OU BIEN COMMENT RENDRE UNE CARTE ARDUINO USB, BLUETOOTH, INDÉPENDAMMENT DE TOUTES APPLICATIONS

Merci,

Intelego.

Bonjour

Désolé de' 'casser l'ambiance' à nouveau ....

Qu'est ce qui te fait espérer que ce module à base de RN41 (Roving Networks / Microchip) soit une solution pour ton projet de souris BT ?

Tout comme le RN42 le RN41 est vendu en plusieurs versions, (firmwares spécifiques)
IL existe un RN41HID considéré par un ordinateur comme une souris, un clavier ou un joystick (selon le code côté Arduino)

Ce module Sparfun et présenté comme 'modem', donc profil SPP (= émulation de liasion série, vu par l'ordinateur comme un Port série). Ce module à première vue ne fait pas plus qu'un HC06 avec une portée probablement supérieure (Class 1 pour les RN41 variés)

Il n'existe pas de Bluetooth 'universel'. le Bluetooth est très 'compartimenté' en 'profils' spécifiques , définis pour des applications bien déterminées.
Voir içi une présentation rapide de quelque profils courants.

L’ambiance était cassée bien avant que tu arrives sur terre en fait.

Tu sembles le témoin lassé de mes perplexitéS arduiniennes ?

(tu est bien un gars, je parle au masculin ?)

Et finalement pourquoi ne pas avoir opté pour ce qui semble le plus simple :

L'ADAPTATEUR UNIVERSEL

La question restante serait de savoir si je peux pluger ce dispositif :

CELUI CI

ET MEME EN MEME TEMPS CELUI-CI

Ainsi ni lignes de code, quelque soit mes applications, dispositifs ou autres, j'ai l'onglet bluetooth universel.

CQFD.

Intelego.

témoin lassé ? pas encore !!
un gars ? oui , pas tout jeune....(qui a galéré avec le BlueTooth , modules divers dont des RN, profils divers et qui y touche maintenant le moins possible après avoir eu le sentiment que "BT = usine à gaz" dès qu'on sort du 'prêt à porter'. je viens de goûter un peu au BLE.....même avis )

Ton lien "adaptateur universel' pointe sur le montage qui utilise un HC05 (courant et bon marché) qui a subi une modification : son firmaxare a été remplacé pur celui d'un RN42HID. On a échangé sur ce sujet quelques messages plus haut. Cet adapteur se branche sur l'Arduino par Rx/Tx . Le PC le voit comme une souris (ou un clavier) si l'adaptatrur est correctement configuré puis reçoit les bonnes commandes (il se comporte fait un RN42HID low cost)

Pas 'universel' du tout , c'est spécialisé 'profil HID' et rien d'autre
ça ne fonctionne qu'avec les bons préparatifs et le bon code Arduino
L'intérêt du lien que tu donnes est (cen'est pas rien) : comment faire un adaptateru BT HID low cost en 'hackant un HX05 ou un HC06) . Simple intérêt économique. Pas de magie , pas de 'sans code'

Ainsi ni lignes de code, quelque soit mes applications, dispositifs ou autres, j'ai l'onglet bluetooth universel.

J'ai l'impression qu tu cherches encore un produit miracle alors que ton objectif est loin d'être trivial. J

Je ne pense pas qu'il soit réalisable par un simple assemblage 'sans effort' de modules BT et de blocs de codes déjà faits.
Je pense qu'il faut impérativement écrire ligne à ligne le code approprié pour que les données issues de l'accélérometre soint envoyées correctement à un module BT HID bien configuré

Bon un doute tout de même :

Dans cette video minute 07:04, "step 06",

CETTE VIDEO

l'auteur du dispositif utilise un Adaptateur FTDI FT232RL.

Il ne l’utilise que lorsqu'il flache l'arduino.

Ensuite le module FTV232RL disparaît complètement.

A quoi peut-il bien servir selon vous ?

Merci,

Intelego

A ce stade le FTDI ne sert qu'à mettre le bon code dans la carte Arduino Pro Mini 3V (qui est dépourvue de connection USB)

perso : vidéos... bof..... le texte décrit mieux la procédure.

La première partie montre comment modifier un shield Host , puis l'associer à une carte Arduino Pro Mini 3V dans laquelle un code est injecté par FTDI. A ce stade le code sert juste à tester le fonctionnement du shield Host sur la carte Arduino, à vérifier que l'action sur le clavier USB est bien gérée par le HOST USB et la carte Pro Mini et que le PC reçoit la bonne info

La seconde partie montre comment ajouter à la carte Arduino un module BT 'trafiqué' (HC05 flashé avec un firmware HID pour RN42) Le FTDI peut servir pour faire ce flashage du module BT , et ensuite mettre un nouveau code dans la carte Pro MIni, puis le FTDI sera retiré pour laisser la place au module BT modifié.

Bilan , 3 utilisations successives du FTDI :
-flashage Pro Mini pour le test du shield Host modifié
-flashage du module HC05 (pour lui enlever son profil SPP et y mettre un profil HID)
(manip détaillée içi pour faire un gamepad Bluetooth avec un HC05)
-flashage de la carte Pro Mini avec code final qui intègre gestion du Host USB et gestion du module BT modifié

Attention , pas d'universalité !!

-le code final dans la carte Pro mini n'est pas tout à fait le même pour une souris, un clavier un gamepad, le HC05 hacké devant recevoir une initialisation particulière à chaque périphérique HID à émuler