Library containing Crazyflie 2.0 sensors drivers: - LPS25H (barometer) - MPU9250 (IMU) - PMW3901 (optical flow) - VL53L0X (range)

Dependents:   Drones-Controlador controladoatitude_cteste Drone_Controlador_Atitude optical_test

Committer:
fbob
Date:
Mon May 14 20:18:02 2018 +0000
Revision:
7:56608cce81ee
Parent:
6:c7bc001826ba
Child:
12:2bbe233d25fb
Updated init functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fbob 5:1ef8b91a0318 1 #ifndef PMW3901_h
fbob 5:1ef8b91a0318 2 #define PMW3901_h
fbob 5:1ef8b91a0318 3
fbob 5:1ef8b91a0318 4 #include "mbed.h"
fbob 5:1ef8b91a0318 5
fbob 6:c7bc001826ba 6 //
fbob 6:c7bc001826ba 7 #define PRODUCT_ID 0x00
fbob 6:c7bc001826ba 8 //
fbob 5:1ef8b91a0318 9 #define MOTION 0x02
fbob 5:1ef8b91a0318 10 // Accelerometer output register addresses
fbob 5:1ef8b91a0318 11 #define DELTA_X_L 0x03
fbob 5:1ef8b91a0318 12 #define DELTA_X_H 0x04
fbob 5:1ef8b91a0318 13 #define DELTA_Y_L 0x05
fbob 5:1ef8b91a0318 14 #define DELTA_Y_H 0x06
fbob 5:1ef8b91a0318 15
fbob 5:1ef8b91a0318 16 /** PMW3901 (optical flow sensor) class
fbob 5:1ef8b91a0318 17 *
fbob 7:56608cce81ee 18 * Example code (print optical flow data on serial port every 0.2 second):
fbob 5:1ef8b91a0318 19 * @code
fbob 5:1ef8b91a0318 20 * #include "mbed.h"
fbob 5:1ef8b91a0318 21 * #include "USBSerial.h"
fbob 5:1ef8b91a0318 22 * #include "PMW3901.h"
fbob 5:1ef8b91a0318 23 *
fbob 5:1ef8b91a0318 24 * USBSerial pc;
fbob 5:1ef8b91a0318 25 * PMW3901 flow(PA_7,PA_6,PA_5,PB_4);
fbob 5:1ef8b91a0318 26 *
fbob 5:1ef8b91a0318 27 * int main()
fbob 7:56608cce81ee 28 * {
fbob 7:56608cce81ee 29 * if(!flow.init())
fbob 7:56608cce81ee 30 * {
fbob 7:56608cce81ee 31 * pc.printf("Failed to detect and initialize optical flow on I2C bus!");
fbob 7:56608cce81ee 32 * while(1);
fbob 7:56608cce81ee 33 * }
fbob 5:1ef8b91a0318 34 * while(1);
fbob 5:1ef8b91a0318 35 * {
fbob 5:1ef8b91a0318 36 * flow.read();
fbob 7:56608cce81ee 37 * pc.printf("Optical flow [px]: %6.2f %6.2f \n\n", flow.x, flow.y);
fbob 7:56608cce81ee 38 * wait(0.2);
fbob 5:1ef8b91a0318 39 * }
fbob 5:1ef8b91a0318 40 * }
fbob 5:1ef8b91a0318 41 * @endcode
fbob 5:1ef8b91a0318 42 * (Need to target to NUCLEO-F401RE board platform)
fbob 5:1ef8b91a0318 43 */
fbob 5:1ef8b91a0318 44 class PMW3901
fbob 5:1ef8b91a0318 45 {
fbob 5:1ef8b91a0318 46 public:
fbob 5:1ef8b91a0318 47 /** Class constructor */
fbob 5:1ef8b91a0318 48 PMW3901(PinName mosi, PinName miso, PinName sclk, PinName csel);
fbob 5:1ef8b91a0318 49
fbob 5:1ef8b91a0318 50 /** Initialize optical flow */
fbob 6:c7bc001826ba 51 bool init();
fbob 5:1ef8b91a0318 52 /** **/
fbob 5:1ef8b91a0318 53 void read();
fbob 5:1ef8b91a0318 54
fbob 6:c7bc001826ba 55 /** Optical flow data in x-axis (px) **/
fbob 6:c7bc001826ba 56 float x;
fbob 6:c7bc001826ba 57 /** Optical flow data in y-axis (px) **/
fbob 6:c7bc001826ba 58 float y;
fbob 5:1ef8b91a0318 59 private:
fbob 5:1ef8b91a0318 60 /** SPI bus */
fbob 5:1ef8b91a0318 61 SPI spi;
fbob 5:1ef8b91a0318 62 /** Chip select */
fbob 5:1ef8b91a0318 63 DigitalOut cs;
fbob 5:1ef8b91a0318 64
fbob 6:c7bc001826ba 65 /** **/
fbob 6:c7bc001826ba 66 void setup_spi();
fbob 6:c7bc001826ba 67 /** **/
fbob 6:c7bc001826ba 68 bool test_spi();
fbob 5:1ef8b91a0318 69 /** **/
fbob 5:1ef8b91a0318 70 void setup_flow();
fbob 5:1ef8b91a0318 71 /** **/
fbob 5:1ef8b91a0318 72 void read_flow();
fbob 5:1ef8b91a0318 73 };
fbob 5:1ef8b91a0318 74
fbob 5:1ef8b91a0318 75 #endif