#include<Wire.h>
#include <hidboot.h>
#include <usbhub.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
int x; // mouse x
int y; // mouse y
int l,r;
class MouseRptParser : public MouseReportParser
{
protected:
void OnMouseMove (MOUSEINFO *mi);
void OnLeftButtonUp (MOUSEINFO *mi);
void OnLeftButtonDown (MOUSEINFO *mi);
void OnRightButtonUp (MOUSEINFO *mi);
void OnRightButtonDown (MOUSEINFO *mi);
void OnMiddleButtonUp (MOUSEINFO *mi);
void OnMiddleButtonDown (MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{
x = mi->dX;
y = mi->dY;
Wire.beginTransmission(8);
Wire.write(x);
Wire.write(y);
//Wire.write(l); //transmit to device 8
//Wire.write(r);
Wire.endTransmission();
delay(10);
Wire.beginTransmission(7);
Wire.write(x);
Wire.write(y);
//Wire.write(l); // transmit to device 7
//Wire.write(r);
Wire.endTransmission();
delay(10);
}
void MouseRptParser::OnLeftButtonUp (MOUSEINFO *mi)
{
//Serial.println("L Butt Up");
l=0;
Wire.beginTransmission(8);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
//Wire.write(r);
Wire.endTransmission();
delay(10);
Wire.beginTransmission(7);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
//Wire.write(r);
Wire.endTransmission();
delay(10);
}
void MouseRptParser::OnLeftButtonDown (MOUSEINFO *mi)
{
//Serial.println("L Butt Dn");
l=1;
Wire.beginTransmission(8);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
//Wire.write(r);
Wire.endTransmission();
delay(10);
Wire.beginTransmission(7);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
//Wire.write(r);
Wire.endTransmission();
delay(10);
}
void MouseRptParser::OnRightButtonUp (MOUSEINFO *mi)
{
Serial.println("R Butt Up");
r=0;
Wire.beginTransmission(8);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
Wire.write(r);
Wire.endTransmission();
delay(10);
Wire.beginTransmission(7);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
Wire.write(r);
Wire.endTransmission();
delay(10);
}
void MouseRptParser::OnRightButtonDown (MOUSEINFO *mi)
{
Serial.println("R Butt Dn");
r=1;
Wire.beginTransmission(8);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
Wire.write(r);
Wire.endTransmission();
delay(10);
Wire.beginTransmission(7);
Wire.write(x);
Wire.write(y);
Wire.write(l); //transmit to device 8
Wire.write(r);
Wire.endTransmission();
delay(10);
}
void MouseRptParser::OnMiddleButtonUp (MOUSEINFO *mi)
{
Serial.println("M Butt Up");
}
void MouseRptParser::OnMiddleButtonDown (MOUSEINFO *mi)
{
Serial.println("M Butt Dn");
x = 90;
y = 90;
}
USB Usb;
USBHub Hub(&Usb);
HIDBoot<USB_HID_PROTOCOL_MOUSE> HidMouse(&Usb);
uint32_t next_time;
MouseRptParser Prs;
void setup()
{
//Serial.begin(9600);
Wire.begin(); //Begins I2C communication at pin (A4,A5)
Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect – used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start");
if (Usb.Init() == -1)
Serial.println("OSC did not start.");
delay( 200 );
next_time = millis() + 5000;
HidMouse.SetReportParser(0, &Prs);
}
void loop()
{
Usb.Task();
}
#include<Wire.h>
#include <Mouse.h>
int x,y,l,r;
int currentx = 0;
int previousx = 0;
int delta = 0;
int deltaValue = 1; // needs to be changed to suit your needs
void setup() {
Serial.begin( 115200 ); // start serial for output
Wire.begin(8);
Wire.onReceive(receiveEvent);
Mouse.begin(); //Init mouse emulation
}
void receiveEvent( int bytes )
{
x = Wire.read();
y = Wire.read();
l = Wire.read();
r = Wire.read();
}
void loop() {
//Serial.println(l);
currentx=x;
delta = abs(previousx - currentx);
if (delta >= deltaValue) {
Mouse.move(x, y, 0); // move mouse on y axis
delay(10);
}
else{
Mouse.move(0, 0, 0); // move mouse on y axis
delay(10);
}
previousx = currentx;
delay(10);
if (l == HIGH) {
if (!Mouse.isPressed(MOUSE_LEFT)) {
Mouse.press(MOUSE_LEFT);
delay(100); // delay to enable single and double-click
}
}
else {
if (Mouse.isPressed(MOUSE_LEFT)) {
Mouse.release(MOUSE_LEFT);
}
}
if (r == HIGH) {
if (!Mouse.isPressed(MOUSE_RIGHT)) {
Mouse.press(MOUSE_RIGHT);
delay(100); // delay to enable single and double-click
}
}
else {
if (Mouse.isPressed(MOUSE_RIGHT)) {
Mouse.release(MOUSE_RIGHT);
}
}
}