A library to interface to the PAW3102DB optical mouse sensor. It cannot write to the sensor as of yet.

Committer:
Pinski1
Date:
Mon Jun 13 19:03:22 2011 +0000
Revision:
0:dda73f38c264
Initial Release, bugs expected

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pinski1 0:dda73f38c264 1 #include "PAW3102DB.h"
Pinski1 0:dda73f38c264 2 #include "mbed.h"
Pinski1 0:dda73f38c264 3
Pinski1 0:dda73f38c264 4 PAW3102DB::PAW3102DB(PinName pMOSI, PinName pMISO, PinName pSCK): sensor(pMOSI, pMISO, pSCK) {
Pinski1 0:dda73f38c264 5 MOSI = pMOSI;
Pinski1 0:dda73f38c264 6 MISO = pMISO;
Pinski1 0:dda73f38c264 7 SCK = pSCK;
Pinski1 0:dda73f38c264 8
Pinski1 0:dda73f38c264 9 sensor.frequency(10000000); // set it to 10MHz
Pinski1 0:dda73f38c264 10 sensor.format(8, 3); // send 8 bits, change on falling, read on rising
Pinski1 0:dda73f38c264 11 sensor.slave_format(8); // 8 bits returned
Pinski1 0:dda73f38c264 12 }
Pinski1 0:dda73f38c264 13
Pinski1 0:dda73f38c264 14 unsigned char PAW3102DB::read(unsigned char address) {
Pinski1 0:dda73f38c264 15 return (char)sensor.write(address & 0x7F);
Pinski1 0:dda73f38c264 16 }
Pinski1 0:dda73f38c264 17
Pinski1 0:dda73f38c264 18 unsigned short PAW3102DB::getProductID(void) {
Pinski1 0:dda73f38c264 19 return (sensor.write(PRODUCT_ID2) << 4) | (sensor.write(PRODUCT_ID3) >> 4);
Pinski1 0:dda73f38c264 20 }
Pinski1 0:dda73f38c264 21
Pinski1 0:dda73f38c264 22 unsigned short PAW3102DB::getResolution(void) {
Pinski1 0:dda73f38c264 23 unsigned short resolution = 0;
Pinski1 0:dda73f38c264 24 unsigned char buffer = sensor.write(MOTION_STATUS);
Pinski1 0:dda73f38c264 25 buffer = (buffer >> 4) & 0x03;
Pinski1 0:dda73f38c264 26 switch (buffer)
Pinski1 0:dda73f38c264 27 {
Pinski1 0:dda73f38c264 28 case 0:
Pinski1 0:dda73f38c264 29 resolution = 1000;
Pinski1 0:dda73f38c264 30 break;
Pinski1 0:dda73f38c264 31 case 1:
Pinski1 0:dda73f38c264 32 resolution = 1200;
Pinski1 0:dda73f38c264 33 break;
Pinski1 0:dda73f38c264 34 case 2:
Pinski1 0:dda73f38c264 35 resolution = 1600;
Pinski1 0:dda73f38c264 36 break;
Pinski1 0:dda73f38c264 37 case 3:
Pinski1 0:dda73f38c264 38 resolution = 800;
Pinski1 0:dda73f38c264 39 break;
Pinski1 0:dda73f38c264 40 default:
Pinski1 0:dda73f38c264 41 break;
Pinski1 0:dda73f38c264 42 }
Pinski1 0:dda73f38c264 43 return resolution;
Pinski1 0:dda73f38c264 44 }
Pinski1 0:dda73f38c264 45
Pinski1 0:dda73f38c264 46 signed char PAW3102DB::getDeltaX(void) {
Pinski1 0:dda73f38c264 47 signed char buffer = read(DELTA_X);
Pinski1 0:dda73f38c264 48 buffer *= -1; // dirty hack
Pinski1 0:dda73f38c264 49 return buffer;
Pinski1 0:dda73f38c264 50 }
Pinski1 0:dda73f38c264 51 signed char PAW3102DB::getDeltaY(void) {
Pinski1 0:dda73f38c264 52 signed char buffer = read(DELTA_Y);
Pinski1 0:dda73f38c264 53 buffer *= -1; // dirty hack
Pinski1 0:dda73f38c264 54 return buffer;
Pinski1 0:dda73f38c264 55 }