Project tutorial

Arduino as a Mouse © LGPL

Control your mouse cursor with this simple Leonardo switch setup.

  • 1,089 views
  • 0 comments
  • 6 respects

Components and supplies

About this project

First, gather everything and connect them according to this schematic. (These button connections.)

Connect the buttons to the Leonardo and upload the sketch.

I've attached the PDF for PCB etching. Just print the PDF on glossy paper and transfer the ink to a blank copper clad board.

Watch this video for a more detailed tutorial on this topic.

Code

codeC/C++
#include "Mouse.h"

// set pin numbers for the five buttons:
const int upButton = 2;
const int downButton = 3;
const int leftButton = 4;
const int rightButton = 5;
const int mouseButton = 6;

int range = 5;              // output range of X or Y movement; affects movement speed
int responseDelay = 10;     // response delay of the mouse, in ms


void setup() {
  // initialize the buttons' inputs:
  pinMode(upButton, INPUT);
  pinMode(downButton, INPUT);
  pinMode(leftButton, INPUT);
  pinMode(rightButton, INPUT);
  pinMode(mouseButton, INPUT);
  // initialize mouse control:
  Mouse.begin();
}

void loop() {
  // read the buttons:
  int upState = digitalRead(upButton);
  int downState = digitalRead(downButton);
  int rightState = digitalRead(rightButton);
  int leftState = digitalRead(leftButton);
  int clickState = digitalRead(mouseButton);

  // calculate the movement distance based on the button states:
  int  xDistance = (leftState - rightState) * range;
  int  yDistance = (upState - downState) * range;

  // if X or Y is non-zero, move:
  if ((xDistance != 0) || (yDistance != 0)) {
    Mouse.move(xDistance, yDistance, 0);
  }

  // if the mouse button is pressed:
  if (clickState == HIGH) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT);
    }
  }
  // else the mouse button is not pressed:
  else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT);
    }
  }

  // a delay so the mouse doesn't move too fast:
  delay(responseDelay);
}

Custom parts and enclosures

pdf for pcb etching

Schematics

sch for button circuit
Capture scn8vprlpn
sch for leonardo wiring
Image7 z6m4fgbze8

Comments

Similar projects you might like

Arduino Leonardo ETH v3 and MySQL Direct Insert

Project tutorial by amirso

  • 2,206 views
  • 1 comment
  • 3 respects

Arduino External Mouse Buttons

by

  • 819 views
  • 4 comments
  • 3 respects

Gesture Mouse

by Team ONYX

  • 9,598 views
  • 0 comments
  • 18 respects

How to Use Modbus with Arduino

Project tutorial by

  • 8,530 views
  • 3 comments
  • 17 respects

Hacking Qualcomm (Quick Charge) QC 2.0/3.0 With ATtiny85

Project tutorial by Shahariar

  • 7,748 views
  • 11 comments
  • 43 respects

Standalone Arduino Applied in Projects

Project tutorial by PCBWay and Silícios Lab

  • 6,919 views
  • 10 comments
  • 45 respects
Add projectSign up / Login