Test of ADNS3080 on DISCO_F429ZI
Dependencies: BSP_DISCO_F429ZI LCD_DISCO_F429ZI mbed
Fork of ADNS3080_HelloWorld by
ADNS3080.cpp@1:46abb3b9347d, 2014-08-08 (annotated)
- Committer:
- ryosuke
- Date:
- Fri Aug 08 06:36:15 2014 +0000
- Revision:
- 1:46abb3b9347d
- Parent:
- 0:9beaad87014d
this program is a test program of ADNS 3080 optical flow sensor. this optical flow sensor board is developed by 3DRobotics.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ryosuke | 1:46abb3b9347d | 1 | /* |
ryosuke | 1:46abb3b9347d | 2 | *author Ryosuke Yumoto |
ryosuke | 1:46abb3b9347d | 3 | */ |
ryosuke | 0:9beaad87014d | 4 | #include "ADNS3080.h" |
ryosuke | 0:9beaad87014d | 5 | |
ryosuke | 0:9beaad87014d | 6 | ADNS3080::ADNS3080(PinName mosi, |
ryosuke | 0:9beaad87014d | 7 | PinName miso, |
ryosuke | 0:9beaad87014d | 8 | PinName sck, |
ryosuke | 0:9beaad87014d | 9 | PinName cs) : spi_(mosi, miso, sck), nCS_(cs){ |
ryosuke | 0:9beaad87014d | 10 | |
ryosuke | 0:9beaad87014d | 11 | spi_.frequency(2000000); |
ryosuke | 0:9beaad87014d | 12 | spi_.format(8, 3); |
ryosuke | 0:9beaad87014d | 13 | |
ryosuke | 0:9beaad87014d | 14 | nCS_=1; |
ryosuke | 0:9beaad87014d | 15 | |
ryosuke | 0:9beaad87014d | 16 | wait_us(500); |
ryosuke | 0:9beaad87014d | 17 | |
ryosuke | 0:9beaad87014d | 18 | } |
ryosuke | 1:46abb3b9347d | 19 | // |
ryosuke | 0:9beaad87014d | 20 | int ADNS3080::getProdID(void) { |
ryosuke | 0:9beaad87014d | 21 | |
ryosuke | 0:9beaad87014d | 22 | return ReadRegister(ADNS3080_PRODUCT_ID); |
ryosuke | 0:9beaad87014d | 23 | |
ryosuke | 0:9beaad87014d | 24 | } |
ryosuke | 0:9beaad87014d | 25 | |
ryosuke | 0:9beaad87014d | 26 | int ADNS3080::getRevID(void) { |
ryosuke | 0:9beaad87014d | 27 | |
ryosuke | 0:9beaad87014d | 28 | return ReadRegister(ADNS3080_REVISION_ID); |
ryosuke | 0:9beaad87014d | 29 | |
ryosuke | 0:9beaad87014d | 30 | } |
ryosuke | 0:9beaad87014d | 31 | |
ryosuke | 0:9beaad87014d | 32 | int ADNS3080::getMotion(void) { |
ryosuke | 0:9beaad87014d | 33 | |
ryosuke | 0:9beaad87014d | 34 | return ReadRegister(ADNS3080_MOTION); |
ryosuke | 0:9beaad87014d | 35 | |
ryosuke | 0:9beaad87014d | 36 | } |
ryosuke | 0:9beaad87014d | 37 | |
ryosuke | 0:9beaad87014d | 38 | signed char ADNS3080::getDelta_X(void) { |
ryosuke | 0:9beaad87014d | 39 | |
ryosuke | 0:9beaad87014d | 40 | return ReadRegister(ADNS3080_DELTA_X); |
ryosuke | 0:9beaad87014d | 41 | |
ryosuke | 0:9beaad87014d | 42 | } |
ryosuke | 0:9beaad87014d | 43 | |
ryosuke | 0:9beaad87014d | 44 | signed char ADNS3080::getDelta_Y(void) { |
ryosuke | 0:9beaad87014d | 45 | |
ryosuke | 0:9beaad87014d | 46 | return ReadRegister(ADNS3080_DELTA_Y); |
ryosuke | 0:9beaad87014d | 47 | |
ryosuke | 0:9beaad87014d | 48 | } |
ryosuke | 0:9beaad87014d | 49 | |
ryosuke | 1:46abb3b9347d | 50 | unsigned int ADNS3080::getSQUAL(void) { |
ryosuke | 1:46abb3b9347d | 51 | |
ryosuke | 1:46abb3b9347d | 52 | return ReadRegister(ADNS3080_SQUAL); |
ryosuke | 1:46abb3b9347d | 53 | |
ryosuke | 1:46abb3b9347d | 54 | } |
ryosuke | 1:46abb3b9347d | 55 | |
ryosuke | 1:46abb3b9347d | 56 | unsigned short ADNS3080::getPixel_sum(void) { |
ryosuke | 1:46abb3b9347d | 57 | |
ryosuke | 1:46abb3b9347d | 58 | return ReadRegister(ADNS3080_PIXEL_SUM); |
ryosuke | 1:46abb3b9347d | 59 | |
ryosuke | 1:46abb3b9347d | 60 | } |
ryosuke | 1:46abb3b9347d | 61 | |
ryosuke | 1:46abb3b9347d | 62 | char ADNS3080::getMax_Pixel(void) { |
ryosuke | 1:46abb3b9347d | 63 | |
ryosuke | 1:46abb3b9347d | 64 | return ReadRegister(ADNS3080_MAXIMUM_PIXEL); |
ryosuke | 1:46abb3b9347d | 65 | |
ryosuke | 1:46abb3b9347d | 66 | } |
ryosuke | 1:46abb3b9347d | 67 | |
ryosuke | 1:46abb3b9347d | 68 | int ADNS3080::getConfiguration_bits(void){ |
ryosuke | 1:46abb3b9347d | 69 | |
ryosuke | 1:46abb3b9347d | 70 | return ReadRegister(ADNS3080_CONFIGURATION_BITS); |
ryosuke | 1:46abb3b9347d | 71 | |
ryosuke | 1:46abb3b9347d | 72 | } |
ryosuke | 1:46abb3b9347d | 73 | |
ryosuke | 1:46abb3b9347d | 74 | void ADNS3080::setConfiguration_bits(char configuration){ |
ryosuke | 1:46abb3b9347d | 75 | |
ryosuke | 1:46abb3b9347d | 76 | WriteRegister(ADNS3080_CONFIGURATION_BITS, configuration); |
ryosuke | 1:46abb3b9347d | 77 | |
ryosuke | 1:46abb3b9347d | 78 | } |
ryosuke | 1:46abb3b9347d | 79 | |
ryosuke | 1:46abb3b9347d | 80 | int ADNS3080::getExtended_config(void){ |
ryosuke | 1:46abb3b9347d | 81 | |
ryosuke | 1:46abb3b9347d | 82 | return ReadRegister(ADNS3080_EXTENDED_CONFIG); |
ryosuke | 1:46abb3b9347d | 83 | |
ryosuke | 1:46abb3b9347d | 84 | } |
ryosuke | 1:46abb3b9347d | 85 | void ADNS3080::setExtended_config(char extended_config){ |
ryosuke | 1:46abb3b9347d | 86 | |
ryosuke | 1:46abb3b9347d | 87 | WriteRegister(ADNS3080_EXTENDED_CONFIG, extended_config); |
ryosuke | 1:46abb3b9347d | 88 | |
ryosuke | 1:46abb3b9347d | 89 | } |
ryosuke | 1:46abb3b9347d | 90 | |
ryosuke | 1:46abb3b9347d | 91 | /* |
ryosuke | 1:46abb3b9347d | 92 | short getData_Out(void){ |
ryosuke | 1:46abb3b9347d | 93 | |
ryosuke | 1:46abb3b9347d | 94 | ReadRegister(ADNS3080_DATA_OUT_UPPER); |
ryosuke | 1:46abb3b9347d | 95 | ReadRegister(ADNS3080_DATA_OUT_LOWER); |
ryosuke | 1:46abb3b9347d | 96 | |
ryosuke | 1:46abb3b9347d | 97 | } |
ryosuke | 1:46abb3b9347d | 98 | unsigned int getShutter(void); |
ryosuke | 1:46abb3b9347d | 99 | unsigned int getFrame_Period(void); |
ryosuke | 1:46abb3b9347d | 100 | void Motion_Clear(void); |
ryosuke | 1:46abb3b9347d | 101 | */ |
ryosuke | 1:46abb3b9347d | 102 | |
ryosuke | 0:9beaad87014d | 103 | int ADNS3080::getInverProdID(void) { |
ryosuke | 0:9beaad87014d | 104 | |
ryosuke | 0:9beaad87014d | 105 | return ReadRegister(ADNS3080_INVERSE_PRODUCT_ID); |
ryosuke | 0:9beaad87014d | 106 | |
ryosuke | 0:9beaad87014d | 107 | } |
ryosuke | 0:9beaad87014d | 108 | |
ryosuke | 0:9beaad87014d | 109 | int ADNS3080::ReadRegister(int address) { |
ryosuke | 0:9beaad87014d | 110 | |
ryosuke | 0:9beaad87014d | 111 | int tx = (ADNS3080_SPI_READ | address); |
ryosuke | 0:9beaad87014d | 112 | int rx = 0; |
ryosuke | 0:9beaad87014d | 113 | |
ryosuke | 0:9beaad87014d | 114 | nCS_=0; |
ryosuke | 0:9beaad87014d | 115 | |
ryosuke | 0:9beaad87014d | 116 | spi_.write(tx); |
ryosuke | 0:9beaad87014d | 117 | wait_us(50); |
ryosuke | 0:9beaad87014d | 118 | rx = spi_.write(0x00); |
ryosuke | 0:9beaad87014d | 119 | nCS_ = 1; |
ryosuke | 0:9beaad87014d | 120 | |
ryosuke | 0:9beaad87014d | 121 | return rx; |
ryosuke | 0:9beaad87014d | 122 | } |
ryosuke | 0:9beaad87014d | 123 | |
ryosuke | 0:9beaad87014d | 124 | void ADNS3080::WriteRegister(int address, char data) { |
ryosuke | 0:9beaad87014d | 125 | |
ryosuke | 0:9beaad87014d | 126 | int tx = ( ADNS3080_SPI_WRITE | address); |
ryosuke | 0:9beaad87014d | 127 | |
ryosuke | 0:9beaad87014d | 128 | nCS_=0; |
ryosuke | 0:9beaad87014d | 129 | spi_.write(tx); |
ryosuke | 0:9beaad87014d | 130 | spi_.write(data); |
ryosuke | 0:9beaad87014d | 131 | |
ryosuke | 0:9beaad87014d | 132 | nCS_=1; |
ryosuke | 0:9beaad87014d | 133 | |
ryosuke | 0:9beaad87014d | 134 | } |