Just mouse test for x,y position

Dependencies:   mbed Mouse

Revision:
0:48805553d80e
Child:
1:afd3fc7c27a2
diff -r 000000000000 -r 48805553d80e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Mar 03 22:16:29 2015 +0000
@@ -0,0 +1,94 @@
+#include "mbed.h"
+
+#define sensorConfig 0x00
+#define sensorStatus 0x01
+#define Delta_Y 0x02
+#define Delta_X 0x03
+
+Serial pc(USBTX, USBRX);
+
+DigitalInOut pinC(PTD0);
+DigitalInOut pinD(PTC4);
+
+signed long mx, my;
+
+void reSync(){
+  pinC = 1; // ReSync (startup) mouse
+  wait_us(5);
+  pinC = 0;
+  wait_us(1);
+  pinC = 1; 
+  wait_ms(1000);  // wait for OptiMouse serial transaction timer to time out:
+}
+
+uint8_t readRegister(uint8_t address){ // Bitbang SPI read operation
+  int i = 7;
+  uint8_t r = 0;
+  pinD.output();   // Write the address of the register we want to read:
+  for (; i>=0; i--){
+    pinC = 0;
+    pinD = (address & (1 << i));
+    pinC = 1;
+  }
+  pinD.input();    // Switch data line from OUTPUT to INPUT
+  wait_us(100);   // Wait according to datasheet
+  for (i=7; i>=0; i--){     // Fetch the data!                          
+    pinC = 0;
+    pinC = 1;
+    r |= ((pinD.read()) << i);
+  }
+  wait_us(100);
+  return r;
+}
+
+void writeRegister(uint8_t address, uint8_t data){
+  int i = 7;  
+  address |= 0x80;// Set MSB high, to indicate write operation:
+  pinD.output();  // Write the address:
+  for (; i>=0; i--){
+    pinC = 0;
+    pinD = (address & (1 << i));
+    pinC = 1;
+  } 
+  for (i=7; i>=0; i--){ // Write the data:
+    pinC = 0;
+    pinD = (data & (1 << i));
+    pinC = 1;
+  }
+}
+
+void forceAwake(char value){
+  if (value>0) writeRegister(sensorConfig,0x01); 
+  else writeRegister(sensorConfig,0x00);
+}
+
+signed char getDx(void){
+  return (signed char) readRegister(Delta_X);
+}
+
+signed char getDy(void){
+  return (signed char) readRegister(Delta_Y);
+}
+
+signed char status(void){
+  return (signed char) readRegister(sensorStatus);
+}
+
+int main(){
+    pc.baud(9600);
+    pinC.output();
+    pinD.input();
+    reSync();
+    forceAwake(1); // LED on
+    wait_ms(100);
+    while(1){
+        mx = getDx();
+        my = getDy();
+                
+        pc.printf("x = ");
+        pc.printf("%x\t", mx);
+        pc.printf("x = ");
+        pc.printf("%x\n", my);
+    }
+}
+