Trackball based on the NXP LPC11U24 and the ADNS-9500

Dependencies:   ADNS9500 USBDevice mbed 25LCxxx_SPI

Committer:
xxann5
Date:
Sun Dec 09 05:34:22 2012 +0000
Revision:
1:34085d7e0991
Parent:
0:eb8c05a5b8a7
Child:
2:72a8d2b11320
started programming the buttons.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xxann5 1:34085d7e0991 1 #include "mbed.h"
xxann5 1:34085d7e0991 2 #include "USBMouse.h"
xxann5 1:34085d7e0991 3 #include <math.h>
xxann5 1:34085d7e0991 4 #include <stdint.h>
xxann5 1:34085d7e0991 5
xxann5 1:34085d7e0991 6 #define ADNS9500_SROM_91
xxann5 1:34085d7e0991 7
xxann5 1:34085d7e0991 8 #include "adns9500.hpp"
xxann5 1:34085d7e0991 9
xxann5 1:34085d7e0991 10
xxann5 1:34085d7e0991 11 DigitalOut led1(LED1);
xxann5 1:34085d7e0991 12 DigitalOut led2(LED2);
xxann5 1:34085d7e0991 13 DigitalOut led3(LED3);
xxann5 1:34085d7e0991 14 DigitalOut led4(LED4);
xxann5 1:34085d7e0991 15
xxann5 1:34085d7e0991 16 DigitalIn left(p18);
xxann5 1:34085d7e0991 17 DigitalIn middle(p19);
xxann5 1:34085d7e0991 18 DigitalIn right(p20);
xxann5 1:34085d7e0991 19
xxann5 1:34085d7e0991 20 USBMouse mouse;
xxann5 1:34085d7e0991 21
xxann5 1:34085d7e0991 22 //Ticker printData;
xxann5 1:34085d7e0991 23
xxann5 1:34085d7e0991 24 /*
xxann5 1:34085d7e0991 25 * mosi miso sclk ncs FREQ, motion
xxann5 1:34085d7e0991 26 */
xxann5 1:34085d7e0991 27 adns9500::ADNS9500 sensor(p5, p6, p7, p8, adns9500::MAX_SPI_FREQUENCY, p21);
xxann5 1:34085d7e0991 28
xxann5 1:34085d7e0991 29 bool motionTriggered = false;
xxann5 1:34085d7e0991 30 //bool printDataTriggered = false;
xxann5 1:34085d7e0991 31
xxann5 1:34085d7e0991 32 int motionCallbackCounter = 0;
xxann5 1:34085d7e0991 33
xxann5 1:34085d7e0991 34 //void printDataCallback()
xxann5 1:34085d7e0991 35 //{
xxann5 1:34085d7e0991 36 // printDataTriggered = true;
xxann5 1:34085d7e0991 37 //}
xxann5 1:34085d7e0991 38
xxann5 1:34085d7e0991 39 void motionCallback()
xxann5 1:34085d7e0991 40 {
xxann5 1:34085d7e0991 41 motionTriggered = true;
xxann5 1:34085d7e0991 42 motionCallbackCounter++;
xxann5 1:34085d7e0991 43 }
xxann5 1:34085d7e0991 44
xxann5 1:34085d7e0991 45
xxann5 1:34085d7e0991 46
xxann5 1:34085d7e0991 47 int main(void)
xxann5 1:34085d7e0991 48 {
xxann5 1:34085d7e0991 49 int dataReadCounter = 0;
xxann5 1:34085d7e0991 50 float totalMotionDx = 0.0;
xxann5 1:34085d7e0991 51 float totalMotionDy = 0.0;
xxann5 1:34085d7e0991 52
xxann5 1:34085d7e0991 53 printf("attach.\r\n");
xxann5 1:34085d7e0991 54 sensor.attach(&motionCallback);
xxann5 1:34085d7e0991 55
xxann5 1:34085d7e0991 56 printf("reset\r\n");
xxann5 1:34085d7e0991 57 sensor.reset();
xxann5 1:34085d7e0991 58
xxann5 1:34085d7e0991 59 printf("srom downlaod\r\n");
xxann5 1:34085d7e0991 60 uint16_t crc = sensor.sromDownload(adns9500FWArray, (uint16_t)ADNS9500_FIRMWARE_LEN );
xxann5 1:34085d7e0991 61
xxann5 1:34085d7e0991 62 printf( "CRC [%x] [%x].\r\n", (uint16_t)ADNS6010_FIRMWARE_CRC, crc );
xxann5 1:34085d7e0991 63
xxann5 1:34085d7e0991 64 if( (uint16_t)ADNS6010_FIRMWARE_CRC != crc )
xxann5 1:34085d7e0991 65 {
xxann5 1:34085d7e0991 66 printf( "CRC does not match: [%x] [%x].\r\n", (uint16_t)ADNS6010_FIRMWARE_CRC, crc );
xxann5 1:34085d7e0991 67 error( "Exiting.\r\n" );
xxann5 1:34085d7e0991 68 }
xxann5 1:34085d7e0991 69 printf("Enable lazer\r\n");
xxann5 1:34085d7e0991 70 sensor.getLaser();
xxann5 1:34085d7e0991 71 wait(3);
xxann5 1:34085d7e0991 72 sensor.enableLaser();
xxann5 1:34085d7e0991 73 sensor.getLaser();
xxann5 1:34085d7e0991 74
xxann5 1:34085d7e0991 75 while (true)
xxann5 1:34085d7e0991 76 {
xxann5 1:34085d7e0991 77 if( left ){
xxann5 1:34085d7e0991 78 mouse.click( 0 );
xxann5 1:34085d7e0991 79 led2 = !led2;
xxann5 1:34085d7e0991 80 }
xxann5 1:34085d7e0991 81 if( middle ){
xxann5 1:34085d7e0991 82 mouse.click( 1 );
xxann5 1:34085d7e0991 83 led2 = !led3;
xxann5 1:34085d7e0991 84 }
xxann5 1:34085d7e0991 85 if( ! right ){
xxann5 1:34085d7e0991 86 mouse.click( 2 );
xxann5 1:34085d7e0991 87 led2 = !led4;
xxann5 1:34085d7e0991 88 }
xxann5 1:34085d7e0991 89
xxann5 1:34085d7e0991 90 int dx, dy;
xxann5 1:34085d7e0991 91 if (motionTriggered) {
xxann5 1:34085d7e0991 92 led1 = !led1;
xxann5 1:34085d7e0991 93 motionTriggered = false;
xxann5 1:34085d7e0991 94
xxann5 1:34085d7e0991 95 sensor.getMotionDelta(dx, dy);
xxann5 1:34085d7e0991 96
xxann5 1:34085d7e0991 97 totalMotionDx += dx;
xxann5 1:34085d7e0991 98 totalMotionDy += dy;
xxann5 1:34085d7e0991 99
xxann5 1:34085d7e0991 100 dataReadCounter++;
xxann5 1:34085d7e0991 101
xxann5 1:34085d7e0991 102 mouse.move( dx, - dy );
xxann5 1:34085d7e0991 103 //printf( "X: %d Y: %d\r\n", dx, dy);
xxann5 1:34085d7e0991 104 }
xxann5 1:34085d7e0991 105
xxann5 1:34085d7e0991 106 //wait(0.5);
xxann5 1:34085d7e0991 107 }
xxann5 1:34085d7e0991 108 }
xxann5 1:34085d7e0991 109