A library to interface to the PAW3102DB optical mouse sensor. It cannot write to the sensor as of yet.
PAW3102DB.cpp@0:dda73f38c264, 2011-06-13 (annotated)
- Committer:
- Pinski1
- Date:
- Mon Jun 13 19:03:22 2011 +0000
- Revision:
- 0:dda73f38c264
Initial Release, bugs expected
Who changed what in which revision?
User | Revision | Line number | New 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 | } |