Trackball based on the NXP LPC11U24 and the ADNS-9500

Dependencies:   ADNS9500 USBDevice mbed 25LCxxx_SPI

Revision:
1:34085d7e0991
Parent:
0:eb8c05a5b8a7
Child:
2:72a8d2b11320
--- a/main.cpp	Sun Nov 04 00:16:55 2012 +0000
+++ b/main.cpp	Sun Dec 09 05:34:22 2012 +0000
@@ -1,12 +1,109 @@
-#include "mbed.h"
-
-DigitalOut myled(LED1);
-
-int main() {
-    while(1) {
-        myled = 1;
-        wait(0.2);
-        myled = 0;
-        wait(0.2);
-    }
-}
+#include "mbed.h"
+#include "USBMouse.h"
+#include <math.h>
+#include <stdint.h>
+
+#define ADNS9500_SROM_91
+
+#include "adns9500.hpp"
+
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+DigitalIn left(p18);
+DigitalIn middle(p19);
+DigitalIn right(p20);
+
+USBMouse mouse;
+
+//Ticker printData;
+
+/* 
+ * mosi miso sclk ncs FREQ, motion
+ */
+adns9500::ADNS9500 sensor(p5, p6, p7, p8, adns9500::MAX_SPI_FREQUENCY, p21);
+
+bool motionTriggered = false;
+//bool printDataTriggered = false;
+
+int motionCallbackCounter = 0;
+
+//void printDataCallback()
+//{
+//    printDataTriggered = true;
+//}
+
+void motionCallback()
+{
+    motionTriggered = true;
+    motionCallbackCounter++;
+}
+
+
+    
+int main(void)
+{
+    int dataReadCounter = 0;
+    float totalMotionDx = 0.0;
+    float totalMotionDy = 0.0;
+
+    printf("attach.\r\n");
+    sensor.attach(&motionCallback);
+    
+    printf("reset\r\n");
+    sensor.reset();
+    
+    printf("srom downlaod\r\n");
+    uint16_t crc = sensor.sromDownload(adns9500FWArray, (uint16_t)ADNS9500_FIRMWARE_LEN );
+    
+    printf( "CRC [%x] [%x].\r\n", (uint16_t)ADNS6010_FIRMWARE_CRC, crc );
+    
+    if( (uint16_t)ADNS6010_FIRMWARE_CRC != crc )
+    {
+        printf( "CRC does not match: [%x] [%x].\r\n", (uint16_t)ADNS6010_FIRMWARE_CRC, crc );
+        error( "Exiting.\r\n" );
+    }
+    printf("Enable lazer\r\n");
+    sensor.getLaser();
+    wait(3);
+    sensor.enableLaser();
+    sensor.getLaser();
+    
+    while (true)
+    {
+        if( left ){
+            mouse.click( 0 );
+            led2 = !led2;
+        }
+        if( middle ){
+            mouse.click( 1 );
+            led2 = !led3;
+        }
+        if( ! right ){
+            mouse.click( 2 );
+            led2 = !led4;
+        }
+        
+        int dx, dy;
+        if (motionTriggered) {
+            led1 = !led1;
+            motionTriggered = false;
+            
+            sensor.getMotionDelta(dx, dy);
+
+            totalMotionDx += dx;
+            totalMotionDy += dy;
+            
+            dataReadCounter++;
+        
+            mouse.move( dx, - dy );
+            //printf( "X: %d Y: %d\r\n", dx, dy);
+        }
+        
+            //wait(0.5);
+    }
+}
+