Libary for PM2.
Dependencies: LSM9DS1 RangeFinder FastPWM
Dependents: PM2_Example_PES_board PM2_Example_PES_board PM2_Example_PES_board PM2_Example_PES_board ... more
SensorBar.h@32:bb074bb17d39, 2022-06-22 (annotated)
- Committer:
- pmic
- Date:
- Wed Jun 22 14:05:13 2022 +0000
- Revision:
- 32:bb074bb17d39
- Parent:
- 25:51e92f2c89e2
Updated SensorBar so it is not blocking the program if it is not connected
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pmic | 24:f2614d8577a1 | 1 | #ifndef SensorBar_H |
pmic | 24:f2614d8577a1 | 2 | #define SensorBar_H |
pmic | 24:f2614d8577a1 | 3 | |
pmic | 24:f2614d8577a1 | 4 | #include <mbed.h> |
pmic | 25:51e92f2c89e2 | 5 | #include "AvgFilter.h" |
pmic | 24:f2614d8577a1 | 6 | #include "ThreadFlag.h" |
pmic | 24:f2614d8577a1 | 7 | |
pmic | 24:f2614d8577a1 | 8 | #define REG_INPUT_DISABLE_B 0x00 // RegInputDisableB Input buffer disable register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 9 | #define REG_INPUT_DISABLE_A 0x01 // RegInputDisableA Input buffer disable register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 10 | #define REG_LONG_SLEW_B 0x02 // RegLongSlewB Output buffer long slew register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 11 | #define REG_LONG_SLEW_A 0x03 // RegLongSlewA Output buffer long slew register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 12 | #define REG_LOW_DRIVE_B 0x04 // RegLowDriveB Output buffer low drive register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 13 | #define REG_LOW_DRIVE_A 0x05 // RegLowDriveA Output buffer low drive register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 14 | #define REG_PULL_UP_B 0x06 // RegPullUpB Pull_up register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 15 | #define REG_PULL_UP_A 0x07 // RegPullUpA Pull_up register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 16 | #define REG_PULL_DOWN_B 0x08 // RegPullDownB Pull_down register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 17 | #define REG_PULL_DOWN_A 0x09 // RegPullDownA Pull_down register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 18 | #define REG_OPEN_DRAIN_B 0x0A // RegOpenDrainB Open drain register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 19 | #define REG_OPEN_DRAIN_A 0x0B // RegOpenDrainA Open drain register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 20 | #define REG_POLARITY_B 0x0C // RegPolarityB Polarity register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 21 | #define REG_POLARITY_A 0x0D // RegPolarityA Polarity register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 22 | #define REG_DIR_B 0x0E // RegDirB Direction register _ I/O[15_8] (Bank B) 1111 1111 |
pmic | 24:f2614d8577a1 | 23 | #define REG_DIR_A 0x0F // RegDirA Direction register _ I/O[7_0] (Bank A) 1111 1111 |
pmic | 24:f2614d8577a1 | 24 | #define REG_DATA_B 0x10 // RegDataB Data register _ I/O[15_8] (Bank B) 1111 1111* |
pmic | 24:f2614d8577a1 | 25 | #define REG_DATA_A 0x11 // RegDataA Data register _ I/O[7_0] (Bank A) 1111 1111* |
pmic | 24:f2614d8577a1 | 26 | #define REG_INTERRUPT_MASK_B 0x12 // RegInterruptMaskB Interrupt mask register _ I/O[15_8] (Bank B) 1111 1111 |
pmic | 24:f2614d8577a1 | 27 | #define REG_INTERRUPT_MASK_A 0x13 // RegInterruptMaskA Interrupt mask register _ I/O[7_0] (Bank A) 1111 1111 |
pmic | 24:f2614d8577a1 | 28 | #define REG_SENSE_HIGH_B 0x14 // RegSenseHighB Sense register for I/O[15:12] 0000 0000 |
pmic | 24:f2614d8577a1 | 29 | #define REG_SENSE_LOW_B 0x15 // RegSenseLowB Sense register for I/O[11:8] 0000 0000 |
pmic | 24:f2614d8577a1 | 30 | #define REG_SENSE_HIGH_A 0x16 // RegSenseHighA Sense register for I/O[7:4] 0000 0000 |
pmic | 24:f2614d8577a1 | 31 | #define REG_SENSE_LOW_A 0x17 // RegSenseLowA Sense register for I/O[3:0] 0000 0000 |
pmic | 24:f2614d8577a1 | 32 | #define REG_INTERRUPT_SOURCE_B 0x18 // RegInterruptSourceB Interrupt source register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 33 | #define REG_INTERRUPT_SOURCE_A 0x19 // RegInterruptSourceA Interrupt source register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 34 | #define REG_EVENT_STATUS_B 0x1A // RegEventStatusB Event status register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 35 | #define REG_EVENT_STATUS_A 0x1B // RegEventStatusA Event status register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 36 | #define REG_LEVEL_SHIFTER_1 0x1C // RegLevelShifter1 Level shifter register 0000 0000 |
pmic | 24:f2614d8577a1 | 37 | #define REG_LEVEL_SHIFTER_2 0x1D // RegLevelShifter2 Level shifter register 0000 0000 |
pmic | 24:f2614d8577a1 | 38 | #define REG_CLOCK 0x1E // RegClock Clock management register 0000 0000 |
pmic | 24:f2614d8577a1 | 39 | #define REG_MISC 0x1F // RegMisc Miscellaneous device settings register 0000 0000 |
pmic | 24:f2614d8577a1 | 40 | #define REG_LED_DRIVER_ENABLE_B 0x20 // RegLEDDriverEnableB LED driver enable register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 41 | #define REG_LED_DRIVER_ENABLE_A 0x21 // RegLEDDriverEnableA LED driver enable register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 32:bb074bb17d39 | 42 | // Debounce and Keypad Engine |
pmic | 24:f2614d8577a1 | 43 | #define REG_DEBOUNCE_CONFIG 0x22 // RegDebounceConfig Debounce configuration register 0000 0000 |
pmic | 24:f2614d8577a1 | 44 | #define REG_DEBOUNCE_ENABLE_B 0x23 // RegDebounceEnableB Debounce enable register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 45 | #define REG_DEBOUNCE_ENABLE_A 0x24 // RegDebounceEnableA Debounce enable register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 24:f2614d8577a1 | 46 | #define REG_KEY_CONFIG_1 0x25 // RegKeyConfig1 Key scan configuration register 0000 0000 |
pmic | 24:f2614d8577a1 | 47 | #define REG_KEY_CONFIG_2 0x26 // RegKeyConfig2 Key scan configuration register 0000 0000 |
pmic | 24:f2614d8577a1 | 48 | #define REG_KEY_DATA_1 0x27 // RegKeyData1 Key value (column) 1111 1111 |
pmic | 24:f2614d8577a1 | 49 | #define REG_KEY_DATA_2 0x28 // RegKeyData2 Key value (row) 1111 1111 |
pmic | 32:bb074bb17d39 | 50 | // LED Driver (PWM, blinking, breathing) |
pmic | 24:f2614d8577a1 | 51 | #define REG_T_ON_0 0x29 // RegTOn0 ON time register for I/O[0] 0000 0000 |
pmic | 24:f2614d8577a1 | 52 | #define REG_I_ON_0 0x2A // RegIOn0 ON intensity register for I/O[0] 1111 1111 |
pmic | 24:f2614d8577a1 | 53 | #define REG_OFF_0 0x2B // RegOff0 OFF time/intensity register for I/O[0] 0000 0000 |
pmic | 24:f2614d8577a1 | 54 | #define REG_T_ON_1 0x2C // RegTOn1 ON time register for I/O[1] 0000 0000 |
pmic | 24:f2614d8577a1 | 55 | #define REG_I_ON_1 0x2D // RegIOn1 ON intensity register for I/O[1] 1111 1111 |
pmic | 24:f2614d8577a1 | 56 | #define REG_OFF_1 0x2E // RegOff1 OFF time/intensity register for I/O[1] 0000 0000 |
pmic | 24:f2614d8577a1 | 57 | #define REG_T_ON_2 0x2F // RegTOn2 ON time register for I/O[2] 0000 0000 |
pmic | 24:f2614d8577a1 | 58 | #define REG_I_ON_2 0x30 // RegIOn2 ON intensity register for I/O[2] 1111 1111 |
pmic | 24:f2614d8577a1 | 59 | #define REG_OFF_2 0x31 // RegOff2 OFF time/intensity register for I/O[2] 0000 0000 |
pmic | 24:f2614d8577a1 | 60 | #define REG_T_ON_3 0x32 // RegTOn3 ON time register for I/O[3] 0000 0000 |
pmic | 24:f2614d8577a1 | 61 | #define REG_I_ON_3 0x33 // RegIOn3 ON intensity register for I/O[3] 1111 1111 |
pmic | 24:f2614d8577a1 | 62 | #define REG_OFF_3 0x34 // RegOff3 OFF time/intensity register for I/O[3] 0000 0000 |
pmic | 24:f2614d8577a1 | 63 | #define REG_T_ON_4 0x35 // RegTOn4 ON time register for I/O[4] 0000 0000 |
pmic | 24:f2614d8577a1 | 64 | #define REG_I_ON_4 0x36 // RegIOn4 ON intensity register for I/O[4] 1111 1111 |
pmic | 24:f2614d8577a1 | 65 | #define REG_OFF_4 0x37 // RegOff4 OFF time/intensity register for I/O[4] 0000 0000 |
pmic | 24:f2614d8577a1 | 66 | #define REG_T_RISE_4 0x38 // RegTRise4 Fade in register for I/O[4] 0000 0000 |
pmic | 24:f2614d8577a1 | 67 | #define REG_T_FALL_4 0x39 // RegTFall4 Fade out register for I/O[4] 0000 0000 |
pmic | 24:f2614d8577a1 | 68 | #define REG_T_ON_5 0x3A // RegTOn5 ON time register for I/O[5] 0000 0000 |
pmic | 24:f2614d8577a1 | 69 | #define REG_I_ON_5 0x3B // RegIOn5 ON intensity register for I/O[5] 1111 1111 |
pmic | 24:f2614d8577a1 | 70 | #define REG_OFF_5 0x3C // RegOff5 OFF time/intensity register for I/O[5] 0000 0000 |
pmic | 24:f2614d8577a1 | 71 | #define REG_T_RISE_5 0x3D // RegTRise5 Fade in register for I/O[5] 0000 0000 |
pmic | 24:f2614d8577a1 | 72 | #define REG_T_FALL_5 0x3E // RegTFall5 Fade out register for I/O[5] 0000 0000 |
pmic | 24:f2614d8577a1 | 73 | #define REG_T_ON_6 0x3F // RegTOn6 ON time register for I/O[6] 0000 0000 |
pmic | 24:f2614d8577a1 | 74 | #define REG_I_ON_6 0x40 // RegIOn6 ON intensity register for I/O[6] 1111 1111 |
pmic | 24:f2614d8577a1 | 75 | #define REG_OFF_6 0x41 // RegOff6 OFF time/intensity register for I/O[6] 0000 0000 |
pmic | 24:f2614d8577a1 | 76 | #define REG_T_RISE_6 0x42 // RegTRise6 Fade in register for I/O[6] 0000 0000 |
pmic | 24:f2614d8577a1 | 77 | #define REG_T_FALL_6 0x43 // RegTFall6 Fade out register for I/O[6] 0000 0000 |
pmic | 24:f2614d8577a1 | 78 | #define REG_T_ON_7 0x44 // RegTOn7 ON time register for I/O[7] 0000 0000 |
pmic | 24:f2614d8577a1 | 79 | #define REG_I_ON_7 0x45 // RegIOn7 ON intensity register for I/O[7] 1111 1111 |
pmic | 24:f2614d8577a1 | 80 | #define REG_OFF_7 0x46 // RegOff7 OFF time/intensity register for I/O[7] 0000 0000 |
pmic | 24:f2614d8577a1 | 81 | #define REG_T_RISE_7 0x47 // RegTRise7 Fade in register for I/O[7] 0000 0000 |
pmic | 24:f2614d8577a1 | 82 | #define REG_T_FALL_7 0x48 // RegTFall7 Fade out register for I/O[7] 0000 0000 |
pmic | 24:f2614d8577a1 | 83 | #define REG_T_ON_8 0x49 // RegTOn8 ON time register for I/O[8] 0000 0000 |
pmic | 24:f2614d8577a1 | 84 | #define REG_I_ON_8 0x4A // RegIOn8 ON intensity register for I/O[8] 1111 1111 |
pmic | 24:f2614d8577a1 | 85 | #define REG_OFF_8 0x4B // RegOff8 OFF time/intensity register for I/O[8] 0000 0000 |
pmic | 24:f2614d8577a1 | 86 | #define REG_T_ON_9 0x4C // RegTOn9 ON time register for I/O[9] 0000 0000 |
pmic | 24:f2614d8577a1 | 87 | #define REG_I_ON_9 0x4D // RegIOn9 ON intensity register for I/O[9] 1111 1111 |
pmic | 24:f2614d8577a1 | 88 | #define REG_OFF_9 0x4E // RegOff9 OFF time/intensity register for I/O[9] 0000 0000 |
pmic | 24:f2614d8577a1 | 89 | #define REG_T_ON_10 0x4F // RegTOn10 ON time register for I/O[10] 0000 0000 |
pmic | 24:f2614d8577a1 | 90 | #define REG_I_ON_10 0x50 // RegIOn10 ON intensity register for I/O[10] 1111 1111 |
pmic | 24:f2614d8577a1 | 91 | #define REG_OFF_10 0x51 // RegOff10 OFF time/intensity register for I/O[10] 0000 0000 |
pmic | 24:f2614d8577a1 | 92 | #define REG_T_ON_11 0x52 // RegTOn11 ON time register for I/O[11] 0000 0000 |
pmic | 24:f2614d8577a1 | 93 | #define REG_I_ON_11 0x53 // RegIOn11 ON intensity register for I/O[11] 1111 1111 |
pmic | 24:f2614d8577a1 | 94 | #define REG_OFF_11 0x54 // RegOff11 OFF time/intensity register for I/O[11] 0000 0000 |
pmic | 24:f2614d8577a1 | 95 | #define REG_T_ON_12 0x55 // RegTOn12 ON time register for I/O[12] 0000 0000 |
pmic | 24:f2614d8577a1 | 96 | #define REG_I_ON_12 0x56 // RegIOn12 ON intensity register for I/O[12] 1111 1111 |
pmic | 24:f2614d8577a1 | 97 | #define REG_OFF_12 0x57 // RegOff12 OFF time/intensity register for I/O[12] 0000 0000 |
pmic | 24:f2614d8577a1 | 98 | #define REG_T_RISE_12 0x58 // RegTRise12 Fade in register for I/O[12] 0000 0000 |
pmic | 24:f2614d8577a1 | 99 | #define REG_T_FALL_12 0x59 // RegTFall12 Fade out register for I/O[12] 0000 0000 |
pmic | 24:f2614d8577a1 | 100 | #define REG_T_ON_13 0x5A // RegTOn13 ON time register for I/O[13] 0000 0000 |
pmic | 24:f2614d8577a1 | 101 | #define REG_I_ON_13 0x5B // RegIOn13 ON intensity register for I/O[13] 1111 1111 |
pmic | 24:f2614d8577a1 | 102 | #define REG_OFF_13 0x5C // RegOff13 OFF time/intensity register for I/O[13] 0000 0000 |
pmic | 24:f2614d8577a1 | 103 | #define REG_T_RISE_13 0x5D // RegTRise13 Fade in register for I/O[13] 0000 0000 |
pmic | 24:f2614d8577a1 | 104 | #define REG_T_FALL_13 0x5E // RegTFall13 Fade out register for I/O[13] 0000 0000 |
pmic | 24:f2614d8577a1 | 105 | #define REG_T_ON_14 0x5F // RegTOn14 ON time register for I/O[14] 0000 0000 |
pmic | 24:f2614d8577a1 | 106 | #define REG_I_ON_14 0x60 // RegIOn14 ON intensity register for I/O[14] 1111 1111 |
pmic | 24:f2614d8577a1 | 107 | #define REG_OFF_14 0x61 // RegOff14 OFF time/intensity register for I/O[14] 0000 0000 |
pmic | 24:f2614d8577a1 | 108 | #define REG_T_RISE_14 0x62 // RegTRise14 Fade in register for I/O[14] 0000 0000 |
pmic | 24:f2614d8577a1 | 109 | #define REG_T_FALL_14 0x63 // RegTFall14 Fade out register for I/O[14] 0000 0000 |
pmic | 24:f2614d8577a1 | 110 | #define REG_T_ON_15 0x64 // RegTOn15 ON time register for I/O[15] 0000 0000 |
pmic | 24:f2614d8577a1 | 111 | #define REG_I_ON_15 0x65 // RegIOn15 ON intensity register for I/O[15] 1111 1111 |
pmic | 24:f2614d8577a1 | 112 | #define REG_OFF_15 0x66 // RegOff15 OFF time/intensity register for I/O[15] 0000 0000 |
pmic | 24:f2614d8577a1 | 113 | #define REG_T_RISE_15 0x67 // RegTRise15 Fade in register for I/O[15] 0000 0000 |
pmic | 24:f2614d8577a1 | 114 | #define REG_T_FALL_15 0x68 // RegTFall15 Fade out register for I/O[15] 0000 0000 |
pmic | 32:bb074bb17d39 | 115 | // Miscellaneous |
pmic | 24:f2614d8577a1 | 116 | #define REG_HIGH_INPUT_B 0x69 // RegHighInputB High input enable register _ I/O[15_8] (Bank B) 0000 0000 |
pmic | 24:f2614d8577a1 | 117 | #define REG_HIGH_INPUT_A 0x6A // RegHighInputA High input enable register _ I/O[7_0] (Bank A) 0000 0000 |
pmic | 32:bb074bb17d39 | 118 | // Software Reset |
pmic | 24:f2614d8577a1 | 119 | #define REG_RESET 0x7D // RegReset Software reset register 0000 0000 |
pmic | 24:f2614d8577a1 | 120 | #define REG_TEST_1 0x7E // RegTest1 Test register 0000 0000 |
pmic | 24:f2614d8577a1 | 121 | #define REG_TEST_2 0x7F // RegTest2 Test register 0000 0000 |
pmic | 24:f2614d8577a1 | 122 | |
pmic | 24:f2614d8577a1 | 123 | #define RECEIVE_TIMEOUT_VALUE 1000 // Timeout for I2C receive |
pmic | 24:f2614d8577a1 | 124 | |
pmic | 24:f2614d8577a1 | 125 | // These are used for setting LED driver to linear or log mode: |
pmic | 24:f2614d8577a1 | 126 | #define LINEAR 0 |
pmic | 24:f2614d8577a1 | 127 | #define LOGARITHMIC 1 |
pmic | 24:f2614d8577a1 | 128 | |
pmic | 24:f2614d8577a1 | 129 | // These are used for clock config: |
pmic | 24:f2614d8577a1 | 130 | #define INTERNAL_CLOCK 2 |
pmic | 24:f2614d8577a1 | 131 | #define EXTERNAL_CLOCK 1 |
pmic | 24:f2614d8577a1 | 132 | |
pmic | 24:f2614d8577a1 | 133 | class SensorBar |
pmic | 24:f2614d8577a1 | 134 | { |
pmic | 24:f2614d8577a1 | 135 | public: |
pmic | 24:f2614d8577a1 | 136 | //New functions for bar specific operation |
pmic | 24:f2614d8577a1 | 137 | SensorBar(I2C& i2c, float distAxisToSensor = 0.12f); |
pmic | 24:f2614d8577a1 | 138 | virtual ~SensorBar(); |
pmic | 24:f2614d8577a1 | 139 | |
pmic | 25:51e92f2c89e2 | 140 | //Functions pulled from the SX1509 driver |
pmic | 24:f2614d8577a1 | 141 | // void debounceConfig( uint8_t configValue ); |
pmic | 24:f2614d8577a1 | 142 | // void debounceEnable( uint8_t pin ); |
pmic | 24:f2614d8577a1 | 143 | // unsigned int interruptSource(); |
pmic | 24:f2614d8577a1 | 144 | // void configClock( uint8_t oscSource = 2, uint8_t oscPinFunction = 0, uint8_t oscFreqOut = 0, uint8_t oscDivider = 1 ); |
pmic | 24:f2614d8577a1 | 145 | |
pmic | 24:f2614d8577a1 | 146 | void setBarStrobe(); // to only illuminate while reading line |
pmic | 24:f2614d8577a1 | 147 | void clearBarStrobe(); // to illuminate all the time |
pmic | 24:f2614d8577a1 | 148 | void setInvertBits(); // to make the bar functions look for a white line on dark surface |
pmic | 24:f2614d8577a1 | 149 | void clearInvertBits(); // to make the bar look for a dark line on a reflective surface |
pmic | 24:f2614d8577a1 | 150 | |
pmic | 24:f2614d8577a1 | 151 | uint8_t getRaw(); |
pmic | 24:f2614d8577a1 | 152 | int8_t getBinaryPosition(); |
pmic | 24:f2614d8577a1 | 153 | float getAngleRad(); |
pmic | 25:51e92f2c89e2 | 154 | float getAvgAngleRad(); |
pmic | 25:51e92f2c89e2 | 155 | uint8_t getNrOfLedsActive(); |
pmic | 25:51e92f2c89e2 | 156 | bool isAnyLedActive(); |
pmic | 24:f2614d8577a1 | 157 | |
pmic | 24:f2614d8577a1 | 158 | private: |
pmic | 24:f2614d8577a1 | 159 | //Holding variables |
pmic | 24:f2614d8577a1 | 160 | uint8_t lastBarRawValue; |
pmic | 24:f2614d8577a1 | 161 | uint8_t lastBarPositionValue; |
pmic | 24:f2614d8577a1 | 162 | float distAxisToSensor; |
pmic | 24:f2614d8577a1 | 163 | |
pmic | 24:f2614d8577a1 | 164 | //Settings |
pmic | 24:f2614d8577a1 | 165 | uint8_t deviceAddress; // I2C Address of SX1509 |
pmic | 24:f2614d8577a1 | 166 | uint8_t barStrobe; // 0 = always on, 1 = power saving by IR LED strobe |
pmic | 24:f2614d8577a1 | 167 | uint8_t invertBits; // 1 = invert |
pmic | 24:f2614d8577a1 | 168 | |
pmic | 24:f2614d8577a1 | 169 | // Pin definitions: |
pmic | 24:f2614d8577a1 | 170 | uint8_t pinInterrupt; |
pmic | 24:f2614d8577a1 | 171 | uint8_t pinOscillator; |
pmic | 24:f2614d8577a1 | 172 | uint8_t pinReset; |
pmic | 24:f2614d8577a1 | 173 | |
pmic | 32:bb074bb17d39 | 174 | bool begin(); // Run this once during initialization to configure the SX1509 as a sensor bar |
pmic | 24:f2614d8577a1 | 175 | void reset(); |
pmic | 24:f2614d8577a1 | 176 | |
pmic | 24:f2614d8577a1 | 177 | // Read Functions: |
pmic | 24:f2614d8577a1 | 178 | uint8_t readByte(uint8_t registerAddress); |
pmic | 24:f2614d8577a1 | 179 | unsigned int readWord(uint8_t registerAddress); |
pmic | 24:f2614d8577a1 | 180 | void readBytes(uint8_t firstRegisterAddress, char * destination, uint8_t length); |
pmic | 24:f2614d8577a1 | 181 | // Write functions: |
pmic | 24:f2614d8577a1 | 182 | void writeByte(uint8_t registerAddress, uint8_t writeValue); |
pmic | 24:f2614d8577a1 | 183 | void writeWord(uint8_t registerAddress, unsigned int writeValue); |
pmic | 24:f2614d8577a1 | 184 | void writeBytes(uint8_t firstRegisterAddress, uint8_t * writeArray, uint8_t length); |
pmic | 24:f2614d8577a1 | 185 | |
pmic | 24:f2614d8577a1 | 186 | I2C& i2c; |
pmic | 24:f2614d8577a1 | 187 | |
pmic | 24:f2614d8577a1 | 188 | static const float TS; |
pmic | 24:f2614d8577a1 | 189 | |
pmic | 24:f2614d8577a1 | 190 | static const char REG_I_ON[16]; |
pmic | 24:f2614d8577a1 | 191 | static const char REG_T_ON[16]; |
pmic | 24:f2614d8577a1 | 192 | static const char REG_OFF[16]; |
pmic | 24:f2614d8577a1 | 193 | static const char REG_T_RISE[16]; |
pmic | 24:f2614d8577a1 | 194 | static const char REG_T_FALL[16]; |
pmic | 24:f2614d8577a1 | 195 | |
pmic | 24:f2614d8577a1 | 196 | ThreadFlag threadFlag; |
pmic | 24:f2614d8577a1 | 197 | Thread thread; |
pmic | 24:f2614d8577a1 | 198 | Ticker ticker; |
pmic | 24:f2614d8577a1 | 199 | |
pmic | 25:51e92f2c89e2 | 200 | float angle, avg_angle; |
pmic | 25:51e92f2c89e2 | 201 | uint8_t nrOfLedsActive; |
pmic | 25:51e92f2c89e2 | 202 | AvgFilter avg_filter; |
pmic | 25:51e92f2c89e2 | 203 | bool is_first_avg; |
pmic | 25:51e92f2c89e2 | 204 | |
pmic | 24:f2614d8577a1 | 205 | void update(); |
pmic | 25:51e92f2c89e2 | 206 | float updateAngleRad(); |
pmic | 25:51e92f2c89e2 | 207 | uint8_t updateNrOfLedsActive(); |
pmic | 24:f2614d8577a1 | 208 | void sendThreadFlag(); |
pmic | 24:f2614d8577a1 | 209 | }; |
pmic | 24:f2614d8577a1 | 210 | |
pmic | 24:f2614d8577a1 | 211 | #endif /* SensorBar_H */ |
pmic | 24:f2614d8577a1 | 212 | |
pmic | 24:f2614d8577a1 | 213 | //****************************************************************************// |
pmic | 24:f2614d8577a1 | 214 | // |
pmic | 24:f2614d8577a1 | 215 | // Circular Buffer |
pmic | 24:f2614d8577a1 | 216 | // |
pmic | 24:f2614d8577a1 | 217 | //****************************************************************************// |
pmic | 24:f2614d8577a1 | 218 | |
pmic | 24:f2614d8577a1 | 219 | //Class CircularBuffer is int16_t |
pmic | 24:f2614d8577a1 | 220 | //Does not care about over-running real data ( if request is outside length's bounds ). |
pmic | 24:f2614d8577a1 | 221 | //For example, the underlying machine writes [48], [49], [0], [1] ... |
pmic | 24:f2614d8577a1 | 222 | |
pmic | 24:f2614d8577a1 | 223 | /* |
pmic | 24:f2614d8577a1 | 224 | namespace name |
pmic | 24:f2614d8577a1 | 225 | { |
pmic | 24:f2614d8577a1 | 226 | class CircularBuffer |
pmic | 24:f2614d8577a1 | 227 | { |
pmic | 24:f2614d8577a1 | 228 | public: |
pmic | 24:f2614d8577a1 | 229 | CircularBuffer( uint16_t inputSize ); |
pmic | 24:f2614d8577a1 | 230 | ~CircularBuffer(); |
pmic | 24:f2614d8577a1 | 231 | int16_t getElement( uint16_t ); //zero is the push location |
pmic | 24:f2614d8577a1 | 232 | void pushElement( int16_t ); |
pmic | 24:f2614d8577a1 | 233 | int16_t averageLast( uint16_t ); |
pmic | 24:f2614d8577a1 | 234 | uint16_t recordLength(); |
pmic | 24:f2614d8577a1 | 235 | private: |
pmic | 24:f2614d8577a1 | 236 | uint16_t cBufferSize; |
pmic | 24:f2614d8577a1 | 237 | int16_t *cBufferData; |
pmic | 24:f2614d8577a1 | 238 | int16_t cBufferLastPtr; |
pmic | 24:f2614d8577a1 | 239 | uint8_t cBufferElementsUsed; |
pmic | 24:f2614d8577a1 | 240 | }; |
pmic | 24:f2614d8577a1 | 241 | } |
pmic | 24:f2614d8577a1 | 242 | */ |