#define sclk 5 //Define pin 5 as clock #define sdio 6 //Define pin 6 as data //Mouse sensor register addresses #define CONF 0x1B #define LORES 0x80 #define CHNG 0x80 #define OFLOW 0x18 #define NEG 0x80 byte stat; byte quality; byte ovfl; byte readx; byte ready; int dx; int dy; int x; int y; void WriteAddr(byte address, byte data) { pinMode(sdio,OUTPUT); shiftOut(sdio,sclk,MSBFIRST,address|0x80); shiftOut(sdio,sclk,MSBFIRST,data); } int ReadAddr(byte address) { int data; pinMode(sdio,OUTPUT); shiftOut(sdio,sclk,MSBFIRST,address); delayMicroseconds(100); pinMode(sdio,INPUT); data = shiftIn(sdio,sclk,MSBFIRST); return data; } void setup() { Serial.begin(9600); pinMode(sclk,OUTPUT); digitalWrite(sclk,LOW); delay(100); WriteAddr(CONF,LORES); } void loop() { stat = ReadAddr(0x16); if(stat & CHNG == 0) { } else { if(stat & OFLOW) { ovfl = 10; } readx = ReadAddr(0x17); if(readx & NEG) { dx = -1*(256-readx); } else { dx = readx; } x = x + dx; ready = ReadAddr(0x18); if(ready & NEG) { dy = -1*(256-ready); } else { dy = ready; } y = y + dy; quality = ReadAddr(0x04); Serial.print(ReadAddr(0x17),DEC); Serial.print("\t"); Serial.print(x,DEC); Serial.print("\t"); Serial.print(ReadAddr(0x18),DEC); Serial.print("\t"); Serial.print(y,DEC); Serial.print("\t"); Serial.print(quality,DEC); Serial.print("\n"); } }