arduino y mouse

unsigned long millisStart;
long MouseX = 0;
long MouseY = 0;
char stat,x,y;

byte PS2ReadByte = 0;

#define PS2CLOCK  6
#define PS2DATA   5



void PS2GoHi(int pin){
  pinMode(pin, INPUT);
  digitalWrite(pin, HIGH);
}

void PS2GoLo(int pin){
  pinMode(pin, OUTPUT);
  digitalWrite(pin, LOW);
}

void PS2Write(unsigned char data){
  unsigned char parity=1;

  PS2GoHi(PS2DATA);
  PS2GoHi(PS2CLOCK);
  delayMicroseconds(300);
  PS2GoLo(PS2CLOCK);
  delayMicroseconds(300);
  PS2GoLo(PS2DATA);
  delayMicroseconds(10);
  PS2GoHi(PS2CLOCK);

  while(digitalRead(PS2CLOCK)==HIGH);

  for(int i=0; i<8; i++){
    if(data&0x01) PS2GoHi(PS2DATA);
    else PS2GoLo(PS2DATA);
    while(digitalRead(PS2CLOCK)==LOW);
    while(digitalRead(PS2CLOCK)==HIGH);
    parity^=(data&0x01);
    data=data>>1;
  }

  if(parity) PS2GoHi(PS2DATA);
  else PS2GoLo(PS2DATA);

  while(digitalRead(PS2CLOCK)==LOW);
  while(digitalRead(PS2CLOCK)==HIGH);

  PS2GoHi(PS2DATA);
  delayMicroseconds(50);

  while(digitalRead(PS2CLOCK)==HIGH);
  while((digitalRead(PS2CLOCK)==LOW)||(digitalRead(PS2DATA)==LOW));

  PS2GoLo(PS2CLOCK);
}

unsigned char PS2Read(void){
  unsigned char data=0, bit=1;

  PS2GoHi(PS2CLOCK);
  PS2GoHi(PS2DATA);
  delayMicroseconds(50);
  while(digitalRead(PS2CLOCK)==HIGH);

  delayMicroseconds(5);
  while(digitalRead(PS2CLOCK)==LOW);

  for(int i=0; i<8; i++){
    while(digitalRead(PS2CLOCK)==HIGH);
    if(digitalRead(PS2DATA)==HIGH) data|=bit;
    while(digitalRead(PS2CLOCK)==LOW);
    bit=bit<<1;
  }

  while(digitalRead(PS2CLOCK)==HIGH);
  while(digitalRead(PS2CLOCK)==LOW);
  while(digitalRead(PS2CLOCK)==HIGH);
  while(digitalRead(PS2CLOCK)==LOW);

  PS2GoLo(PS2CLOCK);

  return data;
}

void PS2MouseInit(void){
  PS2Write(0xFF);
  for(int i=0; i<3; i++) PS2Read();
  PS2Write(0xF0);
  PS2Read();
  delayMicroseconds(100);
}

void PS2MousePos(char &stat, char &x, char &y){
  PS2Write(0xEB);
  PS2Read();
  stat=PS2Read();
  x=PS2Read();
  y=PS2Read();
}


void setup(){
  PS2GoHi(PS2CLOCK);
  PS2GoHi(PS2DATA);

  Serial.begin(115200);
  while(!Serial); 
  Serial.println("Setup");
  PS2MouseInit();
  Serial.println("Mouse Ready");
  millisStart=millis();
  MouseX = 0;
  MouseY = 0;
}

void loop(){

  if(millis() < millisStart){
    millisStart = millis();
  }
  if(millis() - millisStart > 1000){
    PS2MousePos(stat,x,y);
    Serial.print(stat, BIN);
    Serial.print("\tdelta X=");
    Serial.print(x, DEC);
    Serial.print("\tdelta Y=");
    Serial.println(y, DEC);
    millisStart = millis();
  }

  MouseX += x;
  MouseY += y;


  //  delay(1000);
}

hola buenas tardes
quiero preguntarles acerca de un proyecto que tengo en mente y es que tengo este codigo que es para capturar coordenadas en y & x por medio de un mouse, y lo que quiero hacer es almacenar las coordenadas y mover dos motores por las coordenadas almacenadas , los motores pueden ser paso a paso o dc normal
alguien me puede guiar para terminar el codigo

gracias

Y como trabaja ese código que has presentado, lo hace bien?

Encontré este código mira si te sirve

/*
 * an arduino sketch to interface with a ps/2 mouse.
 * Also uses serial protocol to talk back to the host
 * and report what it finds.
 */

/*
 * Pin 5 is the mouse data pin, pin 6 is the clock pin
 * Feel free to use whatever pins are convenient.
 */
#define MDATA 5
#define MCLK 6

/*
 * according to some code I saw, these functions will
 * correctly set the mouse clock and data pins for
 * various conditions.
 */
void gohi(int pin)
{
  pinMode(pin, INPUT);
  digitalWrite(pin, HIGH);
}

void golo(int pin)
{
  pinMode(pin, OUTPUT);
  digitalWrite(pin, LOW);
}

void mouse_write(char data)
{
  char i;
  char parity = 1;

  //  Serial.print("Sending ");
  //  Serial.print(data, HEX);
  //  Serial.print(" to mouse\n");
  //  Serial.print("RTS");
  /* put pins in output mode */
  gohi(MDATA);
  gohi(MCLK);
  delayMicroseconds(300);
  golo(MCLK);
  delayMicroseconds(300);
  golo(MDATA);
  delayMicroseconds(10);
  /* start bit */
  gohi(MCLK);
  /* wait for mouse to take control of clock); */
  while (digitalRead(MCLK) == HIGH)
    ;
  /* clock is low, and we are clear to send data */
  for (i=0; i < 8; i++) {
    if (data & 0x01) {
      gohi(MDATA);
    } 
    else {
      golo(MDATA);
    }
    /* wait for clock cycle */
    while (digitalRead(MCLK) == LOW)
      ;
    while (digitalRead(MCLK) == HIGH)
      ;
    parity = parity ^ (data & 0x01);
    data = data >> 1;
  }  
  /* parity */
  if (parity) {
    gohi(MDATA);
  } 
  else {
    golo(MDATA);
  }
  while (digitalRead(MCLK) == LOW)
    ;
  while (digitalRead(MCLK) == HIGH)
    ;
  /* stop bit */
  gohi(MDATA);
  delayMicroseconds(50);
  while (digitalRead(MCLK) == HIGH)
    ;
  /* wait for mouse to switch modes */
  while ((digitalRead(MCLK) == LOW) || (digitalRead(MDATA) == LOW))
    ;
  /* put a hold on the incoming data. */
  golo(MCLK);
  //  Serial.print("done.\n");
}

/*
 * Get a byte of data from the mouse
 */
char mouse_read(void)
{
  char data = 0x00;
  int i;
  char bit = 0x01;

  //  Serial.print("reading byte from mouse\n");
  /* start the clock */
  gohi(MCLK);
  gohi(MDATA);
  delayMicroseconds(50);
  while (digitalRead(MCLK) == HIGH)
    ;
  delayMicroseconds(5);  /* not sure why */
  while (digitalRead(MCLK) == LOW) /* eat start bit */
    ;
  for (i=0; i < 8; i++) {
    while (digitalRead(MCLK) == HIGH)
      ;
    if (digitalRead(MDATA) == HIGH) {
      data = data | bit;
    }
    while (digitalRead(MCLK) == LOW)
      ;
    bit = bit << 1;
  }
  /* eat parity bit, which we ignore */
  while (digitalRead(MCLK) == HIGH)
    ;
  while (digitalRead(MCLK) == LOW)
    ;
  /* eat stop bit */
  while (digitalRead(MCLK) == HIGH)
    ;
  while (digitalRead(MCLK) == LOW)
    ;

  /* put a hold on the incoming data. */
  golo(MCLK);
  //  Serial.print("Recvd data ");
  //  Serial.print(data, HEX);
  //  Serial.print(" from mouse\n");
  return data;
}

void mouse_init()
{
  gohi(MCLK);
  gohi(MDATA);
  //  Serial.print("Sending reset to mouse\n");
  mouse_write(0xff);
  mouse_read();  /* ack byte */
  //  Serial.print("Read ack byte1\n");
  mouse_read();  /* blank */
  mouse_read();  /* blank */
  //  Serial.print("Sending remote mode code\n");
  mouse_write(0xf0);  /* remote mode */
  mouse_read();  /* ack */
  //  Serial.print("Read ack byte2\n");
  delayMicroseconds(100);
}

void setup()
{
  Serial.begin(9600);
  mouse_init();
}

/*
 * get a reading from the mouse and report it back to the
 * host via the serial line.
 */
void loop()
{
  char mstat;
  char mx;
  char my;

  /* get a reading from the mouse */
  mouse_write(0xeb);  /* give me data! */
  mouse_read();      /* ignore ack */
  mstat = mouse_read();
  mx = mouse_read();
  my = mouse_read();

  /* send the data back up */
  Serial.print(mstat, BIN);
  Serial.print("\tX=");
  Serial.print(mx, DEC);
  Serial.print("\tY=");
  Serial.print(my, DEC);
  Serial.println();
  delay(20);  /* twiddle */
}

Para la parte de los motores, solo usa la librería y si tienes el hardware apropiado verás que es facíl de adaptar.
Dime que tienes?

hola gracias por responder ,el codigo que yo publique va bien pero no se como agregarle el movimiento de los motores, voy a probar el codigo que pusiste gracias

El movimiento de los motores es otra cosa.
Comienza con los ejemplos de motores, cambia parametros para que se muevan y cuando lo entiendas sabras que hacer para juntar ambos códigos.

hola buenas noches alguien me puede ayudar con este error por favor
gracias

invalid conversion from 'volatile double*' to 'double*' [-fpermissive]

Es un error o un Warning?

Ese error se produce por no haber declarado antes la funcion que vas a llamar;
No solemos declarar las funciones pero antes era una práctica correcta hacerlo

Necesito ver el código y te muestro donde y al reproducir tu error te lo podré corregir.