Our PS2 converted into library

Dependents:   Position_Mouse Test_Mouse

Committer:
joshwilkins2013
Date:
Tue Mar 31 22:29:38 2015 +0000
Revision:
0:eb8581df1f5e
Child:
1:11b4710b30c2
Fixed position; added rgb stuff; added interrupt w/ sw3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joshwilkins2013 0:eb8581df1f5e 1 #ifndef MOUSE_H
joshwilkins2013 0:eb8581df1f5e 2 #define MOUSE_H
joshwilkins2013 0:eb8581df1f5e 3
joshwilkins2013 0:eb8581df1f5e 4 #include "mbed.h"
joshwilkins2013 0:eb8581df1f5e 5
joshwilkins2013 0:eb8581df1f5e 6 #define sensorConfig 0x00
joshwilkins2013 0:eb8581df1f5e 7 #define sensorStatus 0x01
joshwilkins2013 0:eb8581df1f5e 8 #define Delta_Y 0x02
joshwilkins2013 0:eb8581df1f5e 9 #define Delta_X 0x03
joshwilkins2013 0:eb8581df1f5e 10
joshwilkins2013 0:eb8581df1f5e 11 DigitalInOut pinC(PTB23);
joshwilkins2013 0:eb8581df1f5e 12 DigitalInOut pinD(PTA2);
joshwilkins2013 0:eb8581df1f5e 13
joshwilkins2013 0:eb8581df1f5e 14 class MOUSE {
joshwilkins2013 0:eb8581df1f5e 15
joshwilkins2013 0:eb8581df1f5e 16 protected:
joshwilkins2013 0:eb8581df1f5e 17
joshwilkins2013 0:eb8581df1f5e 18 public:
joshwilkins2013 0:eb8581df1f5e 19
joshwilkins2013 0:eb8581df1f5e 20 //=====================================
joshwilkins2013 0:eb8581df1f5e 21 //====== Set of useful functions ======
joshwilkins2013 0:eb8581df1f5e 22 //=====================================
joshwilkins2013 0:eb8581df1f5e 23
joshwilkins2013 0:eb8581df1f5e 24 void init(){
joshwilkins2013 0:eb8581df1f5e 25 pinC.output();
joshwilkins2013 0:eb8581df1f5e 26 pinD.input();
joshwilkins2013 0:eb8581df1f5e 27 reSync();
joshwilkins2013 0:eb8581df1f5e 28 forceAwake(1); // LED on
joshwilkins2013 0:eb8581df1f5e 29 wait_ms(100);
joshwilkins2013 0:eb8581df1f5e 30 }
joshwilkins2013 0:eb8581df1f5e 31
joshwilkins2013 0:eb8581df1f5e 32 void reSync(){
joshwilkins2013 0:eb8581df1f5e 33 pinC = 1; // ReSync (startup) mouse
joshwilkins2013 0:eb8581df1f5e 34 wait_us(5);
joshwilkins2013 0:eb8581df1f5e 35 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 36 wait_us(1);
joshwilkins2013 0:eb8581df1f5e 37 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 38 wait_us(1000); // wait for OptiMouse serial transaction timer to time out:
joshwilkins2013 0:eb8581df1f5e 39 }
joshwilkins2013 0:eb8581df1f5e 40
joshwilkins2013 0:eb8581df1f5e 41 uint8_t readRegister(uint8_t address){ // Bitbang SPI read operation
joshwilkins2013 0:eb8581df1f5e 42 int i = 7;
joshwilkins2013 0:eb8581df1f5e 43 uint8_t r = 0;
joshwilkins2013 0:eb8581df1f5e 44 pinD.output(); // Write the address of the register we want to read:
joshwilkins2013 0:eb8581df1f5e 45 for (; i>=0; i--){
joshwilkins2013 0:eb8581df1f5e 46 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 47 pinD = (address & (1 << i));
joshwilkins2013 0:eb8581df1f5e 48 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 49 }
joshwilkins2013 0:eb8581df1f5e 50 pinD.input(); // Switch data line from OUTPUT to INPUT
joshwilkins2013 0:eb8581df1f5e 51 wait_us(100); // Wait according to datasheet
joshwilkins2013 0:eb8581df1f5e 52 for (i=7; i>=0; i--){ // Fetch the data!
joshwilkins2013 0:eb8581df1f5e 53 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 54 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 55 r |= ((pinD.read()) << i);
joshwilkins2013 0:eb8581df1f5e 56 }
joshwilkins2013 0:eb8581df1f5e 57 wait_us(100);
joshwilkins2013 0:eb8581df1f5e 58 return r;
joshwilkins2013 0:eb8581df1f5e 59 }
joshwilkins2013 0:eb8581df1f5e 60
joshwilkins2013 0:eb8581df1f5e 61 void writeRegister(uint8_t address, uint8_t data){
joshwilkins2013 0:eb8581df1f5e 62 int i = 7;
joshwilkins2013 0:eb8581df1f5e 63 address |= 0x80;// Set MSB high, to indicate write operation:
joshwilkins2013 0:eb8581df1f5e 64 pinD.output(); // Write the address:
joshwilkins2013 0:eb8581df1f5e 65 for (; i>=0; i--){
joshwilkins2013 0:eb8581df1f5e 66 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 67 pinD = (address & (1 << i));
joshwilkins2013 0:eb8581df1f5e 68 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 69 }
joshwilkins2013 0:eb8581df1f5e 70 for (i=7; i>=0; i--){ // Write the data:
joshwilkins2013 0:eb8581df1f5e 71 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 72 pinD = (data & (1 << i));
joshwilkins2013 0:eb8581df1f5e 73 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 74 }
joshwilkins2013 0:eb8581df1f5e 75 }
joshwilkins2013 0:eb8581df1f5e 76
joshwilkins2013 0:eb8581df1f5e 77 void forceAwake(char value){
joshwilkins2013 0:eb8581df1f5e 78 if (value>0) writeRegister(sensorConfig,0x01);
joshwilkins2013 0:eb8581df1f5e 79 else writeRegister(sensorConfig,0x00);
joshwilkins2013 0:eb8581df1f5e 80 }
joshwilkins2013 0:eb8581df1f5e 81
joshwilkins2013 0:eb8581df1f5e 82 signed char getDx(void){
joshwilkins2013 0:eb8581df1f5e 83 return (signed char) readRegister(Delta_X);
joshwilkins2013 0:eb8581df1f5e 84 }
joshwilkins2013 0:eb8581df1f5e 85
joshwilkins2013 0:eb8581df1f5e 86 signed char getDy(void){
joshwilkins2013 0:eb8581df1f5e 87 return (signed char) readRegister(Delta_Y);
joshwilkins2013 0:eb8581df1f5e 88 }
joshwilkins2013 0:eb8581df1f5e 89
joshwilkins2013 0:eb8581df1f5e 90 signed char status(void){
joshwilkins2013 0:eb8581df1f5e 91 return (signed char) readRegister(sensorStatus);
joshwilkins2013 0:eb8581df1f5e 92 }
joshwilkins2013 0:eb8581df1f5e 93 };
joshwilkins2013 0:eb8581df1f5e 94 #endif