Simular click "fisico" del ratón

Tengo el switch del ratón conectado al Arduino mediante los pines digitales, lo que yo quiero es simular una pulsación del click primario, el problema es que queda presionado el click y no se si es mi código el que esta mal o mi circuito me podrían ayudar

int input;

void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    input = Serial.read();
    
    if (input == '1')
    {
        digitalWrite(13, HIGH);
    }
    else
    {
      digitalWrite(13, LOW);
    }
  }
}

Una vez que se cumple

if (input == '1')

input seguira teniendo el valor 1 hasta que por el puerto serie no le llegue un valor superior a 0 por lo que el pin 13 siempre estara HIGH

Prueba a poner al final del loop()

input = 0

Yo creo que el problema es que seguramente el botón del mouse cierra a masa, por lo tanto se activa con LOW, justamente al revés de como intentas simularlo.

Suponte que envías '1' (caracter 49) entonces pones el pin en alto (HIGH), seguramente tu terminal luego está enviando CR-LF (caracteres 13 y 10), salvo que la hayas seteado para que no los envíe, por lo tanto al ser caracteres distintos a '1' pones el pin el LOW y el mouse lo toma como botón pulsado.

El puerto serie de ese arduino están ubicados en los pines 0 y 1, luego la orden:

 input = Serial.read();

Espera una señal por esos pines y con cierto protocolo que va más allá que una simple pulsación de un botón.
Por ejemplo conecta el cable azul a pin 7, ( para separarlo del 13 que el del led de la placa), y usa el siguiente código:

int input;

void setup() {
  pinMode(13, OUTPUT);
  pinMode (7, INPUT_PULLUP);
}

void loop() {
  input = digitalRead (7);
  if (input == LOW) {
    digitalWrite(13, HIGH);
  }
  else {
    digitalWrite(13, LOW);
  }
}

Yo creo que es al revés, el quiere desde el Leo generar la pulsación controlandola por serial.
Esperemos que vuelva y lo aclare.

No lo había pensado como usa " serial read ". Pero de todas formas tendría que usar los pines tx/rx si es el caso.
A ver que cuenta cuando vuelva.

Me explico mejor cuando uno ambos cables que tengo soldado a los switch del mouse realiza un click si los mantengo unidos realiza una pulsación mantenida.

Cuando el input sea 1 que el mouse haga 1 click y que se suelte, eso es lo que quiero lograr

if (input == '1')
    {
        digitalWrite(13, HIGH);
        delay(1);
        digitalWrite(13, LOW);
    }

Intercambia LOW por HiGH y fijate si hace lo que quieres

O sea

if (input == '1')
    {
        digitalWrite(13, LOW);
        delay(1);
        digitalWrite(13, HIGH);
    }

Funciona pero tengo que presionar 2 ves para que se ejecute el click y a las 45 pulsaciones deja de funcionar.

Lo ejecuto desde Py el print se sigue mostrando después de las 45 pulsaciones pero el Arduino se buguea o algo

def Click():
    while True:
        if keyboard.is_pressed("x"):
            Arduino.write(b'P')
            print("Click")

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.