Just mouse test for x,y position

Dependencies:   mbed Mouse

Committer:
joshwilkins2013
Date:
Tue Mar 03 22:16:29 2015 +0000
Revision:
0:48805553d80e
Child:
1:afd3fc7c27a2
Working mouse test

Who changed what in which revision?

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