souris où appuyer sur un bouton donnerait sur l'écran le mot "cercle"

Bonjour,

je voudrais vous montrer ce code de souris :

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);
  }

Et cette video de présentation :

VIDEO DE PRESENTATION

Et je m’interroge quant à savoir si je peux écrire sur l’écran un mot comme “cercle” ou “ligne”
quand j’appuie sur un des huit boutons ?

Et la deuxième question insoluble, dans le cas où la première question serait possible, serait de savoir quel code ajouter ?

Merci

Intelego.

Ce tuto utilise un petit composant sympathique, le RN-42 qui est une encapsulation d’une stack BT supportant plusieurs profils

Dans ce composant, on lui envoie des ordres sur la voie série, et par son langage de commande, on paramètre comment il apparaît au monde grâce à la magie des profils Bluetooth

Il y a le [url=https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/bluetooth_cr_UG-v1.0r.pdf#page61]HID flag register[/url] que vous définissez grâce à la command SH,<valeur>

Comme illustré dans l’exemple SH,0220 va « transformer » aux yeux d’un périphérique distant (appairé et supportant les profiles HID) votre module en souris.

Page 64 de la doc vous verrez qu’une fois configuré en souris, pour envoyer un événement souris à l’ordinateur associé, et il faut envoyer les octets suivants:

The mouse raw report format is:
0xFD 5 2 Buttons X-stop Y-stop Wheel

Et si vous lisez la fonction mouseSend(), vous y verrez La transmission sur le port série suivante :

  Serial.write(0xFD);
  Serial.write(0x05);
  Serial.write(0x02);
  Serial.write(button); //bouton
  Serial.write(x);//(x);
  Serial.write(y);//(y);
  Serial.write(wheel);//(wheel);

Wow, c’est bizarre, ça correspond exactement à ce que dit la doc… :slight_smile:


Jetez donc un œil à la doc, vous verrez que vous pouvez le transformer en clavier au lieu de souris (mode par défaut est 0000 donc clavier mais faut passer le module en HID parce que par défaut il est en SPP) et donc ensuite d’envoyer des commandes, soit avec le mode translation, le mode Keyboard Shorthand ou mode Raw Report (cf chapitre 5.3 et les suivants)

Une fois que vous apparaissez en clavier pour votre PC, vous demandez d’envoyer les letttre C,E,R,C,L et E et c’est comme si vous aviez tapé CERCLE sur le clavier du PC. Si vous avez un éditeur de texte ou tout autre programme comme un interprèteur de commande LOGO ouvert de l’autre côté, il reçoit et traite les données reçues.

Vous pouvez mettre le module aussi en mode combo et dans ce cas il apparaîtra à la fois comme un clavier et une souris.

Pour le code, on vous laisse commencer à bosser un peu :slight_smile: