usare arduino come mouse , un mouse particolare!

Ciao a tutti
mi piacerebbe premendo un pulsante posizionato sulla mia breadboard che il puntatore del mouse del pc al quale è collegato arduino (leonardo) si trova in un determinato punto dello schermo e non si muova più finché non glielo dico io con un altro pulsante o finché arduino non viene scollegato o spento!

Per poter iniziare a fare una cosa del genere ho pensato che bisognerebbe fare in modo che arduino diventasse un mouse e quindi l'uso della libreria mouse.h .... ecc .... ecc ...
.... procedendo per le vie brevi ... ho trovato e preso da youtube il codice in cui arduino con un joestik viene usato come mouse, ho pensato che modificando (semplificando!) tale codice sia possibile fare in modo che il puntatore si posizioni sempre e solo in un punto!
con questo codice:

Code: [Select]

int x = analogRead(A0);
    int y = analogRead(A1);
  
    String str = "x: " + String(x) + " y: " + String(y);
    x = map(x, 0,1024, -10, 10);
    y = map(y, 0,1024, -10, 10);
    Mouse.move(x, y, 0);    
   Serial.println(str);
    delay(100);

è possibile spostare il puntatore del mouse con un joestick in qualsiasi punto dello schermo, quindi ho pensato che se invece di passare a "x" e "y" i valori analogici letti da A0 e A1, gli passo dei valori fissi (ad esempio 40 , 40)

Code: [Select]

/*  int x = analogRead(A0);
    int y = analogRead(A1);
  
    String str = "x: " + String(x) + " y: " + String(y);
    x = map(x, 0,1024, -10, 10);
    y = map(y, 0,1024, -10, 10);  */

    Mouse.move(40, 40, 0);    

  // Serial.println(str);
    delay(100);

il puntatore non dovrebbe più spostarsi guidato del joestick ma dovrebbe posizionarsi in un solo punto! invece così non avviene!!
come faccio a conoscere la posizione di un determinato punto dello schermo?
la posizione che viene passata con x e y al mouse.move () è relativa!? quindi dipenda da una posizione di riferimento! potrebbe essere cosi? o sono fuoristrada? qualcuno può dirmi come fare facendomelo capire?

grazie

il codice per intero è il segunete:
Code: [Select]

#include <Mouse.h>

#define BUTTON 7

void setup() {
  pinMode(BUTTON, INPUT);  
  Serial.begin(9600);
  
}

>piero54: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione Inglese del forum (post per di più scritto in Italiano, cosa NON permessa) è stato cancellato.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie.

Guglielmo

Lo dice chiaramente nel reference:

la mouse.move() è relativa alla posizione corrente, ti sposti di tot + o - dalla posizione corrente (sx/dx o su/giu)

La posizione corrente NON puoi saperla, un dispositivo mouse NON ha la necessità di conoscerla, quindi la libreria non ha un comando per avere questa info.

gpb01:
>piero54: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) ...

chiedo scusa! non mi ero accorto di essere nel forum inglese(considerando che il browser traduce automaticamente) e ho scritto il mio post! subito dopo mi sono accorto di essere nel posto sbagliato e ho ricopiato il post nel forum italiano! non ho fatto in tempo ad eliminare quello nel forum inglese che mi era stato già spostato...

40 no, ma nel range -10÷10 dovrebbe funzionare.
Normalmente analogRead dovrebbe restituirti 511 in posizione centrale.

ho provato ad assegnare 10 10 oppure -10 -10 alle variabili x y, e il puntatore una volta va in alto a sx e una volta va in basso a dx . e questo potrebbe essere un inizio... partendo da quella posizione potrei usarla come riferimento e raggiungere altra posizione, ma come? ho fatto un po' di tentativi ma nulla... ho provato semplicemente al clik di un bottone ad assegnare un valore differente a x ed a y , ma il puntatore non si sposta ! sicuramente sbaglio io nn essendo esperto di programmazione...
idee?

Il puntatore dovrebbe apparire al centro con x=0, y=0.

Se funziona con il joystik deve funzionare anche incrementando x di 1.

Prova e incolla il codice.

Ciao.

questo è quello che ho scritto ma fa acqua da tutte le parti...

#include "Mouse.h"
#define BUTTON 7
int x = -10;
int y = -10;

void setup()
{
  pinMode(BUTTON,INPUT);
  pinMode(6,INPUT);
   Mouse.move(x,y);
}
int stato = LOW;

void loop()
{
if (digitalRead(BUTTON)) {
    stato = !stato;
    if (stato) {
      Mouse.begin();
      if (digitalRead(6 == HIGH)){
         Mouse.move(10,10);
      }else{
         Mouse.move(x,y);
      }
      } else {
         Mouse.end();
      }
  
}
}

Ripeto, mouse.move() è RELATIVA, non posizione assoluta.

E comunque parentesi errate: if (digitalRead(6 == HIGH)){
devi chiuderla dopo il 6

allora abbandono l'idea! non è possibile realizzarlo... pazienza!

grazie mille

2 cose
Come detto il Mouse si muove relativamente alla posizione attuale.
Devi muovere il Mouse prima in un angolo e poi alla posizione desiderata.

La seconda cosa é che il puntatore del mouse viene mosso dal Leaonardo ma anche da un altro dispositivo di puntazione ( mouse, touchpad, Display toutch ecc.)
Non puoi fare niente per bloccare il puntatore in una certa posizione.

Ciao Uwe

Non ha nulla a che vedere con il mondo Arduino, ma dai un'occhiata a questo tool gratuito: autoitscript
So per certo che può "bloccare" l'input di mouse e tastiera su sistemi Windows, magari può aiutarti a risolvere il tuo problema.

Io l'ho usato in passato per "automatizzare" il data entry di una quantità mostruosa di record da un foglio excel in una transazione SAP.PM, software gestionale che ha un'ergonomia cognitiva inesistente...
Guardare il pc che muoveva autonomamente il mouse, cliccava qui e li, copia e incollava dati era uno spettacolo ipnotizzante :grinning: :grinning: :grinning:

1 Like