altb_pmic / Mbed 2 deprecated Test_optical_flow_PX4

Dependencies:   mbed

Committer:
pmic
Date:
Mon Apr 06 05:57:56 2020 +0000
Revision:
13:89b65bfe6dda
Parent:
12:19fe4f6a8b6b
Change receiving driver and firmware. Data latency now 2.4 ms faster.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
altb2 0:4b02060af95b 1 #ifndef _PX4FLOW_MBED_H
altb2 0:4b02060af95b 2 #define _PX4FLOW_MBED_H
altb2 0:4b02060af95b 3
altb2 0:4b02060af95b 4 # include <stdint.h>
altb2 0:4b02060af95b 5 # include "mbed.h"
altb2 0:4b02060af95b 6
altb2 0:4b02060af95b 7 // 7 Bit I2C Address of the Flow Module: Default 0x42 (user selectable bits 0,1,2)
altb2 0:4b02060af95b 8 #define PX4FLOW_ADDRESS 0x42<<1
altb2 0:4b02060af95b 9
altb2 0:4b02060af95b 10 // Commands
altb2 0:4b02060af95b 11 #define INTEGRAL_FRAME 0x16
altb2 0:4b02060af95b 12
altb2 0:4b02060af95b 13 // integral frame
pmic 13:89b65bfe6dda 14 #define AVG_FLOW_X 0
pmic 13:89b65bfe6dda 15 #define AVG_FLOW_Y 2
pmic 13:89b65bfe6dda 16 #define AVG_QUAL 4
pmic 13:89b65bfe6dda 17 #define VALID_FRAME_COUNT 5
pmic 13:89b65bfe6dda 18 #define FRAME_COUNT_ 6
altb2 0:4b02060af95b 19
pmic 13:89b65bfe6dda 20 // Integral frame, only valid with modified firmware, see Git-branch IndNav from the Firmware
altb2 0:4b02060af95b 21 typedef struct i2c_integral_frame {
pmic 13:89b65bfe6dda 22 int16_t avg_flow_x;
pmic 13:89b65bfe6dda 23 int16_t avg_flow_y;
pmic 13:89b65bfe6dda 24 uint8_t avg_qual;
pmic 13:89b65bfe6dda 25 uint8_t valid_frame_count;
pmic 13:89b65bfe6dda 26 uint8_t frame_count;
altb2 0:4b02060af95b 27 } i2c_integral_frame;
altb2 0:4b02060af95b 28
altb2 0:4b02060af95b 29
altb2 0:4b02060af95b 30 class PX4Flow
altb2 0:4b02060af95b 31 {
altb2 0:4b02060af95b 32 public:
pmic 13:89b65bfe6dda 33
pmic 11:d367224f2194 34 PX4Flow(I2C& i2c);
pmic 3:e03714326b83 35
altb2 0:4b02060af95b 36 virtual ~PX4Flow();
altb2 0:4b02060af95b 37
altb2 0:4b02060af95b 38 bool update_integral();
pmic 13:89b65bfe6dda 39
pmic 13:89b65bfe6dda 40 float avg_flow_x(); // avg flow x in mm/s
pmic 13:89b65bfe6dda 41 float avg_flow_y(); // avg flow y in mm/s
pmic 13:89b65bfe6dda 42 uint8_t avg_qual(); // avg 0-255 linear quality measurement 0=bad, 255=best
pmic 13:89b65bfe6dda 43 uint8_t valid_frame_count(); // nr. of valid frames (qual > 0) between i2c readings
pmic 13:89b65bfe6dda 44 uint8_t frame_count(); // nr. of frames between i2c readings
pmic 13:89b65bfe6dda 45 uint8_t avg_qual_scaled(); // avg 0-255 linear quality measurement 0=bad, 255=best, scaled with N_valid_frame_count/N_frame_count
pmic 13:89b65bfe6dda 46
pmic 13:89b65bfe6dda 47 private:
altb2 0:4b02060af95b 48
pmic 13:89b65bfe6dda 49 DigitalOut dout1;
altb2 0:4b02060af95b 50
altb2 0:4b02060af95b 51 protected:
pmic 13:89b65bfe6dda 52
altb2 0:4b02060af95b 53 I2C i2c;
altb2 0:4b02060af95b 54
pmic 13:89b65bfe6dda 55 // storage for sensordata
pmic 13:89b65bfe6dda 56 char bufferI[7];
altb2 0:4b02060af95b 57
pmic 13:89b65bfe6dda 58 char i2c_commands;
altb2 0:4b02060af95b 59
altb2 0:4b02060af95b 60 struct i2c_integral_frame iframe;
altb2 0:4b02060af95b 61
altb2 0:4b02060af95b 62 uint8_t read8(char *buffer, const unsigned int& idx = 0);
altb2 0:4b02060af95b 63 uint16_t read16(char *buffer, const unsigned int& idx = 0);
altb2 0:4b02060af95b 64 uint32_t read32(char *buffer, const unsigned int& idx = 0);
altb2 0:4b02060af95b 65 };
altb2 0:4b02060af95b 66
altb2 0:4b02060af95b 67 #endif