Trackball based on the NXP LPC11U24 and the ADNS-9500
Dependencies: ADNS9500 USBDevice mbed 25LCxxx_SPI
main.cpp@1:34085d7e0991, 2012-12-09 (annotated)
- 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?
User | Revision | Line number | New 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 |