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

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?

UserRevisionLine numberNew 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 */