Industry's Lowest-Power Ambient Light Sensor with ADC

Dependents:   FYPhh FYPhh5 FYPhh5ultrafinal FYPhh5ultrafinal

Committer:
mcm
Date:
Mon Sep 17 11:41:33 2018 +0000
Revision:
3:13e5af215b11
Parent:
2:08d850dd1cb8
This driver was completed and tested ( NUCLEO-L152RE ), it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:db9c179c2a91 1 /**
mcm 1:db9c179c2a91 2 * @brief MAX44009.h
mcm 1:db9c179c2a91 3 * @details Industry's Lowest-Power Ambient Light Sensor with ADC.
mcm 1:db9c179c2a91 4 * Header file.
mcm 1:db9c179c2a91 5 *
mcm 1:db9c179c2a91 6 *
mcm 1:db9c179c2a91 7 * @return N/A
mcm 1:db9c179c2a91 8 *
mcm 1:db9c179c2a91 9 * @author Manuel Caballero
mcm 1:db9c179c2a91 10 * @date 17/September/2018
mcm 1:db9c179c2a91 11 * @version 17/September/2018 The ORIGIN
mcm 1:db9c179c2a91 12 * @pre N/A
mcm 1:db9c179c2a91 13 * @warning N/A
mcm 1:db9c179c2a91 14 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ).
mcm 1:db9c179c2a91 15 */
mcm 1:db9c179c2a91 16 #ifndef MAX44009_H_
mcm 1:db9c179c2a91 17 #define MAX44009_H_
mcm 1:db9c179c2a91 18
mcm 1:db9c179c2a91 19 #include "mbed.h"
mcm 1:db9c179c2a91 20
mcm 1:db9c179c2a91 21
mcm 1:db9c179c2a91 22 /**
mcm 1:db9c179c2a91 23 Example:
mcm 1:db9c179c2a91 24
mcm 1:db9c179c2a91 25 @code
mcm 3:13e5af215b11 26 #include "mbed.h"
mcm 3:13e5af215b11 27 #include "MAX44009.h"
mcm 1:db9c179c2a91 28
mcm 3:13e5af215b11 29 MAX44009 myMAX44009 ( I2C_SDA, I2C_SCL, MAX44009::MAX44009_ADDRESS_A0_VCC, 400000 );
mcm 3:13e5af215b11 30 Serial pc ( USBTX, USBRX ); // tx, rx
mcm 3:13e5af215b11 31
mcm 3:13e5af215b11 32 DigitalOut myled ( LED1 );
mcm 3:13e5af215b11 33 Ticker newAction;
mcm 3:13e5af215b11 34
mcm 3:13e5af215b11 35
mcm 3:13e5af215b11 36 //@brief Constants.
mcm 3:13e5af215b11 37 //
mcm 3:13e5af215b11 38
mcm 3:13e5af215b11 39
mcm 3:13e5af215b11 40 //@brief Variables.
mcm 3:13e5af215b11 41 //
mcm 3:13e5af215b11 42 volatile uint32_t myState; // State that indicates when to perform an ADC sample
mcm 3:13e5af215b11 43
mcm 3:13e5af215b11 44
mcm 3:13e5af215b11 45 //
mcm 3:13e5af215b11 46 // @brief FUNCTION PROTOTYPES
mcm 3:13e5af215b11 47 //
mcm 3:13e5af215b11 48 void changeDATA ( void );
mcm 3:13e5af215b11 49
mcm 3:13e5af215b11 50
mcm 3:13e5af215b11 51 //@brief FUNCTION FOR APPLICATION MAIN ENTRY.
mcm 3:13e5af215b11 52 //
mcm 3:13e5af215b11 53 int main()
mcm 3:13e5af215b11 54 {
mcm 3:13e5af215b11 55 MAX44009::MAX44009_status_t aux;
mcm 3:13e5af215b11 56 MAX44009::MAX44009_vector_data_t myMAX44009_Data;
mcm 3:13e5af215b11 57
mcm 3:13e5af215b11 58 pc.baud ( 115200 );
mcm 3:13e5af215b11 59
mcm 3:13e5af215b11 60
mcm 3:13e5af215b11 61 myled = 1;
mcm 3:13e5af215b11 62 wait(3);
mcm 3:13e5af215b11 63 myled = 0;
mcm 3:13e5af215b11 64
mcm 3:13e5af215b11 65 // Configure the device: Default mode ( sample every 800ms ), CDR and TIM are automatically determined
mcm 3:13e5af215b11 66 aux = myMAX44009.MAX44009_Configuration ( MAX44009::CONFIGURATION_CONT_DEFAULT_MODE, MAX44009::CONFIGURATION_MANUAL_DEFAULT_MODE, MAX44009::CONFIGURATION_CDR_CURRENT_NOT_DIVIDED, MAX44009::CONFIGURATION_TIM_800_MS );
mcm 3:13e5af215b11 67
mcm 3:13e5af215b11 68
mcm 3:13e5af215b11 69 myState = 0UL; // Reset the variable
mcm 3:13e5af215b11 70 newAction.attach( &changeDATA, 2 ); // the address of the function to be attached ( changeDATA ) and the interval ( 2s )
mcm 3:13e5af215b11 71
mcm 3:13e5af215b11 72 // Let the callbacks take care of everything
mcm 3:13e5af215b11 73 while(1) {
mcm 3:13e5af215b11 74 sleep();
mcm 3:13e5af215b11 75
mcm 3:13e5af215b11 76 if ( myState == 1UL ) {
mcm 3:13e5af215b11 77 myled = 1U;
mcm 3:13e5af215b11 78
mcm 3:13e5af215b11 79 // Get Lux value
mcm 3:13e5af215b11 80 aux = myMAX44009.MAX44009_GetLux ( MAX44009::RESOLUTION_EXTENDED_RESOLUTION, &myMAX44009_Data );
mcm 3:13e5af215b11 81
mcm 3:13e5af215b11 82 // Get current division ratio
mcm 3:13e5af215b11 83 aux = myMAX44009.MAX44009_GetCurrentDivisionRatio ( &myMAX44009_Data );
mcm 3:13e5af215b11 84
mcm 3:13e5af215b11 85 // Get integration time
mcm 3:13e5af215b11 86 aux = myMAX44009.MAX44009_GetIntegrationTime ( &myMAX44009_Data );
mcm 3:13e5af215b11 87
mcm 3:13e5af215b11 88 // Transmit result through the UART
mcm 3:13e5af215b11 89 pc.printf ( "Lux: %0.001f Lux\r\n", myMAX44009_Data.lux );
mcm 3:13e5af215b11 90
mcm 3:13e5af215b11 91
mcm 3:13e5af215b11 92 // Reset the variables
mcm 3:13e5af215b11 93 myState = 0UL;
mcm 3:13e5af215b11 94 myled = 0U;
mcm 3:13e5af215b11 95 }
mcm 3:13e5af215b11 96 }
mcm 3:13e5af215b11 97 }
mcm 3:13e5af215b11 98
mcm 3:13e5af215b11 99
mcm 3:13e5af215b11 100 //
mcm 3:13e5af215b11 101 // @brief changeDATA ( void )
mcm 3:13e5af215b11 102 //
mcm 3:13e5af215b11 103 // @details It changes myState variable
mcm 3:13e5af215b11 104 //
mcm 3:13e5af215b11 105 // @param[in] N/A
mcm 3:13e5af215b11 106 //
mcm 3:13e5af215b11 107 // @param[out] N/A.
mcm 3:13e5af215b11 108 //
mcm 3:13e5af215b11 109 //
mcm 3:13e5af215b11 110 // @return N/A.
mcm 3:13e5af215b11 111 //
mcm 3:13e5af215b11 112 //
mcm 3:13e5af215b11 113 // @author Manuel Caballero
mcm 3:13e5af215b11 114 // @date 17/September/2018
mcm 3:13e5af215b11 115 // @version 17/September/2018 The ORIGIN
mcm 3:13e5af215b11 116 // @pre N/A
mcm 3:13e5af215b11 117 // @warning N/A.
mcm 3:13e5af215b11 118 //
mcm 3:13e5af215b11 119 void changeDATA ( void )
mcm 3:13e5af215b11 120 {
mcm 3:13e5af215b11 121 myState = 1UL;
mcm 3:13e5af215b11 122 }
mcm 1:db9c179c2a91 123 @endcode
mcm 1:db9c179c2a91 124 */
mcm 1:db9c179c2a91 125
mcm 1:db9c179c2a91 126
mcm 1:db9c179c2a91 127 /*!
mcm 2:08d850dd1cb8 128 Library for the MAX44009 Industry's Lowest-Power Ambient Light Sensor with ADC.
mcm 1:db9c179c2a91 129 */
mcm 1:db9c179c2a91 130 class MAX44009
mcm 1:db9c179c2a91 131 {
mcm 1:db9c179c2a91 132 public:
mcm 1:db9c179c2a91 133 /**
mcm 1:db9c179c2a91 134 * @brief DEFAULT ADDRESS
mcm 1:db9c179c2a91 135 */
mcm 1:db9c179c2a91 136 typedef enum {
mcm 1:db9c179c2a91 137 MAX44009_ADDRESS_A0_GND = ( 0b1001010 << 1U ), /*!< MAX44009 I2C Address: A0 connected to GND */
mcm 1:db9c179c2a91 138 MAX44009_ADDRESS_A0_VCC = ( 0b1001011 << 1U ) /*!< MAX44009 I2C Address: A0 connected to VCC */
mcm 1:db9c179c2a91 139 } MAX44009_address_t;
mcm 1:db9c179c2a91 140
mcm 1:db9c179c2a91 141
mcm 1:db9c179c2a91 142 /* REGISTER MAP */
mcm 1:db9c179c2a91 143 /**
mcm 1:db9c179c2a91 144 * @brief REGISTER MAP
mcm 1:db9c179c2a91 145 */
mcm 1:db9c179c2a91 146 typedef enum {
mcm 1:db9c179c2a91 147 MAX44009_INTERRUPT_STATUS = 0x00, /*!< Interrupt Status ( Read Only ) ( Default 0x00 ) */
mcm 1:db9c179c2a91 148 MAX44009_INTERRUPT_ENABLE = 0x01, /*!< Interrupt Enable ( Read/Write ) ( Default 0x00 ) */
mcm 1:db9c179c2a91 149 MAX44009_CONFIGURATION = 0x02, /*!< Configuration ( Read/Write ) ( Default 0x03 ) */
mcm 1:db9c179c2a91 150 MAX44009_LUX_HIGH_BYTE = 0x03, /*!< Lux High Byte ( Read Only ) ( Default 0x00 ) */
mcm 1:db9c179c2a91 151 MAX44009_LUX_LOW_BYTE = 0x04, /*!< Lux Low Byte ( Read Only ) ( Default 0x00 ) */
mcm 1:db9c179c2a91 152 MAX44009_UPPER_THRESHOLD_HIGH_BYTE = 0x05, /*!< Upper Threshold High Byte ( Read/Write ) ( Default 0xFF ) */
mcm 1:db9c179c2a91 153 MAX44009_LOWER_THRESHOLD_HIGH_BYTE = 0x06, /*!< Lower Threshold High Byte ( Read/Write ) ( Default 0x00 ) */
mcm 1:db9c179c2a91 154 MAX44009_THRESHOLD_TIMER = 0x07 /*!< Threshold Timer ( Read/Write ) ( Default 0xFF ) */
mcm 1:db9c179c2a91 155 } MAX44009_register_maps_t;
mcm 1:db9c179c2a91 156
mcm 1:db9c179c2a91 157
mcm 1:db9c179c2a91 158
mcm 1:db9c179c2a91 159 /* INTERRUPT STATUS */
mcm 1:db9c179c2a91 160 /**
mcm 1:db9c179c2a91 161 * @brief INTS. If the INTE bit is set to 1, then the INTS status bit is asserted if the light intensity exceeds either upper or lower threshold
mcm 1:db9c179c2a91 162 * limits (as specified by registers 0x05 and 0x06, respectively) for a period longer than that defined by the Threshold
mcm 1:db9c179c2a91 163 * Timer register. This bit resets to 0 after the host reads this register.
mcm 1:db9c179c2a91 164 */
mcm 1:db9c179c2a91 165 typedef enum {
mcm 1:db9c179c2a91 166 INTERRUPT_STATUS_INTS_MASK = ( 1 << 0 ), /*!< INTS mask */
mcm 1:db9c179c2a91 167 INTERRUPT_STATUS_INTS_LIGHT_INTENSITY_OUTSIDE_THRESHOLD_WINDOW = ( 1 << 0 ), /*!< The light intensity exceeds either upper or lower threshold limits */
mcm 1:db9c179c2a91 168 INTERRUPT_STATUS_INTS_LIGHT_INTENSITY_INSIDE_THRESHOLD_WINDOW = ( 0 << 0 ) /*!< The light intensity is inside threshold window */
mcm 1:db9c179c2a91 169 } MAX44009_interrupt_status_ints_t;
mcm 1:db9c179c2a91 170
mcm 1:db9c179c2a91 171
mcm 1:db9c179c2a91 172
mcm 1:db9c179c2a91 173 /* INTERRUPT ENABLE. NOTE: Interrupt events set the INTS bit (register 0x00, bit 0) and the INT pin only if the INTE bit is set to 1. If the INTE bit is set
mcm 1:db9c179c2a91 174 ( interrupt is enabled ) and the interrupt condition is triggered, then the INT pin is pulled low ( asserted ) and the INTS bit
mcm 1:db9c179c2a91 175 in the Interrupt Status register is set to 1.
mcm 1:db9c179c2a91 176 */
mcm 1:db9c179c2a91 177 /**
mcm 1:db9c179c2a91 178 * @brief INTS.
mcm 1:db9c179c2a91 179 */
mcm 1:db9c179c2a91 180 typedef enum {
mcm 1:db9c179c2a91 181 INTERRUPT_ENABLE_INTS_MASK = ( 1 << 0 ), /*!< INTS mask */
mcm 1:db9c179c2a91 182 INTERRUPT_ENABLE_INTS_ENABLE = ( 1 << 0 ), /*!< INTS enables */
mcm 1:db9c179c2a91 183 INTERRUPT_ENABLE_INTS_DISABLE = ( 0 << 0 ) /*!< INTS disables */
mcm 1:db9c179c2a91 184 } MAX44009_interrupt_enable_ints_t;
mcm 1:db9c179c2a91 185
mcm 1:db9c179c2a91 186
mcm 1:db9c179c2a91 187
mcm 1:db9c179c2a91 188 /* CONFIGURATION */
mcm 1:db9c179c2a91 189 /**
mcm 1:db9c179c2a91 190 * @brief CONT ( CONTINUOUS MODE REGISTER ).
mcm 1:db9c179c2a91 191 */
mcm 1:db9c179c2a91 192 typedef enum {
mcm 1:db9c179c2a91 193 CONFIGURATION_CONT_MASK = ( 1 << 7 ), /*!< CONT mask */
mcm 1:db9c179c2a91 194 CONFIGURATION_CONT_DEFAULT_MODE = ( 0 << 7 ), /*!< Default mode. The IC measures lux intensity only once every 800ms regardless of integration time */
mcm 1:db9c179c2a91 195 CONFIGURATION_CONT_CONTINUOUS_MODE = ( 1 << 7 ) /*!< Continuous mode. The IC continuously measures lux intensity. That is, as soon as one reading is finished, a new one begins */
mcm 1:db9c179c2a91 196 } MAX44009_configuration_cont_t;
mcm 1:db9c179c2a91 197
mcm 1:db9c179c2a91 198
mcm 1:db9c179c2a91 199 /**
mcm 1:db9c179c2a91 200 * @brief MANUAL ( MANUAL MODE REGISTER ).
mcm 1:db9c179c2a91 201 */
mcm 1:db9c179c2a91 202 typedef enum {
mcm 1:db9c179c2a91 203 CONFIGURATION_MANUAL_MASK = ( 1 << 6 ), /*!< MANUAL mask */
mcm 1:db9c179c2a91 204 CONFIGURATION_MANUAL_DEFAULT_MODE = ( 0 << 6 ), /*!< Default mode. CDR, TIM[2:0] bits are automatically determined by the internal auto-ranging circuitry of the IC */
mcm 1:db9c179c2a91 205 CONFIGURATION_MANUAL_MANUAL_MODE = ( 1 << 6 ) /*!< Manual mode. CDR, and TIM[2:0] bits can be programmed by the user */
mcm 1:db9c179c2a91 206 } MAX44009_configuration_manual_t;
mcm 1:db9c179c2a91 207
mcm 1:db9c179c2a91 208
mcm 1:db9c179c2a91 209 /**
mcm 1:db9c179c2a91 210 * @brief CDR ( CURRENT DIVISION RATIO ).
mcm 1:db9c179c2a91 211 */
mcm 1:db9c179c2a91 212 typedef enum {
mcm 1:db9c179c2a91 213 CONFIGURATION_CDR_MASK = ( 0 << 3 ), /*!< CDR mask */
mcm 1:db9c179c2a91 214 CONFIGURATION_CDR_CURRENT_NOT_DIVIDED = ( 0 << 3 ), /*!< Current not divided. All of the photo-diode current goes to the ADC */
mcm 1:db9c179c2a91 215 CONFIGURATION_CDR_CURRENT_DIVIDED_1_8 = ( 1 << 3 ) /*!< Only 1/8 of the photo-diode current goes to the ADC. This mode is used in high-brightness situations */
mcm 1:db9c179c2a91 216 } MAX44009_configuration_cdr_t;
mcm 1:db9c179c2a91 217
mcm 1:db9c179c2a91 218
mcm 1:db9c179c2a91 219 /**
mcm 1:db9c179c2a91 220 * @brief TIM ( INTEGRATION TIMER BITS ).
mcm 1:db9c179c2a91 221 */
mcm 1:db9c179c2a91 222 typedef enum {
mcm 1:db9c179c2a91 223 CONFIGURATION_TIM_MASK = ( 0b111 << 0 ), /*!< TIM mask */
mcm 1:db9c179c2a91 224 CONFIGURATION_TIM_800_MS = ( 0b000 << 0 ), /*!< Integration timer 800ms ( This is a preferred mode for boosting low-light sensitivity ) */
mcm 1:db9c179c2a91 225 CONFIGURATION_TIM_400_MS = ( 0b001 << 0 ), /*!< Integration timer 400ms */
mcm 1:db9c179c2a91 226 CONFIGURATION_TIM_200_MS = ( 0b010 << 0 ), /*!< Integration timer 200ms */
mcm 1:db9c179c2a91 227 CONFIGURATION_TIM_100_MS = ( 0b011 << 0 ), /*!< Integration timer 100ms ( This is a preferred mode for high-brightness applications ) */
mcm 1:db9c179c2a91 228 CONFIGURATION_TIM_50_MS = ( 0b100 << 0 ), /*!< Integration timer 50ms ( Manual mode only ) */
mcm 1:db9c179c2a91 229 CONFIGURATION_TIM_25_MS = ( 0b101 << 0 ), /*!< Integration timer 25ms ( Manual mode only ) */
mcm 1:db9c179c2a91 230 CONFIGURATION_TIM_12_5_MS = ( 0b110 << 0 ), /*!< Integration timer 12.5ms ( Manual mode only ) */
mcm 1:db9c179c2a91 231 CONFIGURATION_TIM_6_25_MS = ( 0b111 << 0 ) /*!< Integration timer 6.25ms ( Manual mode only ) */
mcm 1:db9c179c2a91 232 } MAX44009_configuration_tim_t;
mcm 1:db9c179c2a91 233
mcm 1:db9c179c2a91 234
mcm 1:db9c179c2a91 235
mcm 1:db9c179c2a91 236 /* LUX HIGH-BYTE REGISTER */
mcm 1:db9c179c2a91 237 /**
mcm 1:db9c179c2a91 238 * @brief EXPONENT AND MANTISSA.
mcm 1:db9c179c2a91 239 */
mcm 1:db9c179c2a91 240 typedef enum {
mcm 1:db9c179c2a91 241 LUX_HIGH_BYTE_EXPONENT_MASK = ( 0b1111 << 4 ), /*!< Exponent mask */
mcm 1:db9c179c2a91 242 LUX_HIGH_BYTE_MANTISSA_MASK = ( 0b1111 << 0 ) /*!< Mantissa mask */
mcm 1:db9c179c2a91 243 } MAX44009_lux_high_byte_register_t;
mcm 1:db9c179c2a91 244
mcm 1:db9c179c2a91 245
mcm 1:db9c179c2a91 246 /* LUX LOW-BYTE REGISTER */
mcm 1:db9c179c2a91 247 /**
mcm 1:db9c179c2a91 248 * @brief MANTISSA.
mcm 1:db9c179c2a91 249 */
mcm 1:db9c179c2a91 250 typedef enum {
mcm 1:db9c179c2a91 251 LUX_LOW_BYTE_MANTISSA_MASK = ( 0b1111 << 0 ) /*!< Mantissa mask */
mcm 1:db9c179c2a91 252 } MAX44009_lux_low_byte_register_t;
mcm 1:db9c179c2a91 253
mcm 1:db9c179c2a91 254
mcm 1:db9c179c2a91 255 /* UPPER THRESHOLD HIGH-BYTE REGISTER */
mcm 1:db9c179c2a91 256 /**
mcm 1:db9c179c2a91 257 * @brief EXPONENT AND MANTISSA.
mcm 1:db9c179c2a91 258 */
mcm 1:db9c179c2a91 259 typedef enum {
mcm 1:db9c179c2a91 260 UPPER_THRESHOLD_HIGH_BYTE_EXPONENT_MASK = ( 0b1111 << 4 ), /*!< Exponent mask */
mcm 1:db9c179c2a91 261 UPPER_THRESHOLD_HIGH_BYTE_MANTISSA_MASK = ( 0b1111 << 0 ) /*!< Mantissa mask */
mcm 1:db9c179c2a91 262 } MAX44009_upper_threshold_high_byte_register_t;
mcm 1:db9c179c2a91 263
mcm 1:db9c179c2a91 264
mcm 1:db9c179c2a91 265 /* LOWER THRESHOLD HIGH-BYTE REGISTER */
mcm 1:db9c179c2a91 266 /**
mcm 1:db9c179c2a91 267 * @brief EXPONENT AND MANTISSA.
mcm 1:db9c179c2a91 268 */
mcm 1:db9c179c2a91 269 typedef enum {
mcm 1:db9c179c2a91 270 LOWER_THRESHOLD_HIGH_BYTE_EXPONENT_MASK = ( 0b1111 << 4 ), /*!< Exponent mask */
mcm 1:db9c179c2a91 271 LOWER_THRESHOLD_HIGH_BYTE_MANTISSA_MASK = ( 0b1111 << 0 ) /*!< Mantissa mask */
mcm 1:db9c179c2a91 272 } MAX44009_Lower_threshold_high_byte_register_t;
mcm 1:db9c179c2a91 273
mcm 1:db9c179c2a91 274
mcm 1:db9c179c2a91 275
mcm 1:db9c179c2a91 276 /*
mcm 1:db9c179c2a91 277 AUXILIAR REGISTERS
mcm 1:db9c179c2a91 278
mcm 1:db9c179c2a91 279 NOTE: These definitions are for better understanding in order to use the driver
mcm 1:db9c179c2a91 280 */
mcm 1:db9c179c2a91 281 /* DEVICE RESOLUTION */
mcm 1:db9c179c2a91 282 /**
mcm 1:db9c179c2a91 283 * @brief DEVICE RESOLUTION.
mcm 1:db9c179c2a91 284 */
mcm 1:db9c179c2a91 285 typedef enum {
mcm 1:db9c179c2a91 286 RESOLUTION_NORMAL_RESOLUTION = 0, /*!< Normal resolution ( LUX = 2^( exponent ) x mantissa x 0.72 ) */
mcm 1:db9c179c2a91 287 RESOLUTION_EXTENDED_RESOLUTION = 1 /*!< Extended resolution ( LUX = 2^( exponent ) x mantissa x 0.045 ) */
mcm 1:db9c179c2a91 288 } MAX44009_device_resolution_t;
mcm 1:db9c179c2a91 289
mcm 1:db9c179c2a91 290
mcm 1:db9c179c2a91 291
mcm 1:db9c179c2a91 292 #ifndef MAX44009_VECTOR_STRUCT_H
mcm 1:db9c179c2a91 293 #define MAX44009_VECTOR_STRUCT_H
mcm 1:db9c179c2a91 294 typedef struct {
mcm 1:db9c179c2a91 295 float lux; /*!< LUX */
mcm 1:db9c179c2a91 296
mcm 1:db9c179c2a91 297 uint8_t lux_lower_threshold; /*!< LUX lower threshold */
mcm 1:db9c179c2a91 298 uint8_t lux_upper_threshold; /*!< LUX upper threshold */
mcm 1:db9c179c2a91 299
mcm 1:db9c179c2a91 300 uint16_t threshold_timer_us; /*!< Timer threshold */
mcm 1:db9c179c2a91 301
mcm 1:db9c179c2a91 302 MAX44009_interrupt_status_ints_t interruptStatus; /*!< Interrupt status value */
mcm 1:db9c179c2a91 303 MAX44009_configuration_cdr_t cdr; /*!< Current division ratio */
mcm 1:db9c179c2a91 304 MAX44009_configuration_tim_t tim; /*!< integration time */
mcm 1:db9c179c2a91 305 } MAX44009_vector_data_t;
mcm 1:db9c179c2a91 306 #endif
mcm 1:db9c179c2a91 307
mcm 1:db9c179c2a91 308
mcm 1:db9c179c2a91 309 /**
mcm 1:db9c179c2a91 310 * @brief INTERNAL CONSTANTS
mcm 1:db9c179c2a91 311 */
mcm 1:db9c179c2a91 312 typedef enum {
mcm 1:db9c179c2a91 313 MAX44009_SUCCESS = 0,
mcm 1:db9c179c2a91 314 MAX44009_FAILURE = 1,
mcm 1:db9c179c2a91 315 I2C_SUCCESS = 0 /*!< I2C communication was fine */
mcm 1:db9c179c2a91 316 } MAX44009_status_t;
mcm 1:db9c179c2a91 317
mcm 1:db9c179c2a91 318
mcm 1:db9c179c2a91 319
mcm 1:db9c179c2a91 320
mcm 1:db9c179c2a91 321 /** Create an MAX44009 object connected to the specified I2C pins.
mcm 1:db9c179c2a91 322 *
mcm 1:db9c179c2a91 323 * @param sda I2C data pin
mcm 1:db9c179c2a91 324 * @param scl I2C clock pin
mcm 1:db9c179c2a91 325 * @param addr I2C slave address
mcm 1:db9c179c2a91 326 * @param freq I2C frequency in Hz.
mcm 1:db9c179c2a91 327 */
mcm 1:db9c179c2a91 328 MAX44009 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 1:db9c179c2a91 329
mcm 1:db9c179c2a91 330 /** Delete MAX44009 object.
mcm 1:db9c179c2a91 331 */
mcm 1:db9c179c2a91 332 ~MAX44009();
mcm 1:db9c179c2a91 333
mcm 1:db9c179c2a91 334 /** It gets the interrupt status value.
mcm 1:db9c179c2a91 335 */
mcm 1:db9c179c2a91 336 MAX44009_status_t MAX44009_ReadInterruptStatus ( MAX44009_vector_data_t* myInterruptStatus );
mcm 1:db9c179c2a91 337
mcm 1:db9c179c2a91 338 /** It enables/disables the interrupt.
mcm 1:db9c179c2a91 339 */
mcm 1:db9c179c2a91 340 MAX44009_status_t MAX44009_InterrupEnable ( MAX44009_interrupt_enable_ints_t myInterruptEnable );
mcm 1:db9c179c2a91 341
mcm 1:db9c179c2a91 342 /** It configures the device.
mcm 1:db9c179c2a91 343 */
mcm 1:db9c179c2a91 344 MAX44009_status_t MAX44009_Configuration ( MAX44009_configuration_cont_t myContinuousMode, MAX44009_configuration_manual_t myManualMode,
mcm 3:13e5af215b11 345 MAX44009_configuration_cdr_t myCurrentRatio, MAX44009_configuration_tim_t myIntegrationTime );
mcm 1:db9c179c2a91 346
mcm 1:db9c179c2a91 347 /** It gets the current division ratio
mcm 1:db9c179c2a91 348 */
mcm 1:db9c179c2a91 349 MAX44009_status_t MAX44009_GetCurrentDivisionRatio ( MAX44009_vector_data_t* myCDR );
mcm 1:db9c179c2a91 350
mcm 1:db9c179c2a91 351 /** It gets the integration time
mcm 1:db9c179c2a91 352 */
mcm 1:db9c179c2a91 353 MAX44009_status_t MAX44009_GetIntegrationTime ( MAX44009_vector_data_t* myTIM );
mcm 1:db9c179c2a91 354
mcm 1:db9c179c2a91 355 /** It gets the Lux value regarding of the resolution.
mcm 1:db9c179c2a91 356 */
mcm 1:db9c179c2a91 357 MAX44009_status_t MAX44009_GetLux ( MAX44009_device_resolution_t myResolution, MAX44009_vector_data_t* myLux );
mcm 1:db9c179c2a91 358
mcm 1:db9c179c2a91 359 /** It sets the upper threshold high-byte
mcm 1:db9c179c2a91 360 */
mcm 1:db9c179c2a91 361 MAX44009_status_t MAX44009_SetUpperThreshold ( MAX44009_vector_data_t myUpperThreshold );
mcm 1:db9c179c2a91 362
mcm 1:db9c179c2a91 363 /** It sets the lower threshold high-byte
mcm 1:db9c179c2a91 364 */
mcm 1:db9c179c2a91 365 MAX44009_status_t MAX44009_SetLowerThreshold ( MAX44009_vector_data_t myLowerThreshold );
mcm 1:db9c179c2a91 366
mcm 1:db9c179c2a91 367 /** It gets the upper threshold high-byte
mcm 1:db9c179c2a91 368 */
mcm 1:db9c179c2a91 369 MAX44009_status_t MAX44009_GetUpperThreshold ( MAX44009_vector_data_t* myUpperThreshold );
mcm 1:db9c179c2a91 370
mcm 1:db9c179c2a91 371 /** It gets the lower threshold high-byte
mcm 1:db9c179c2a91 372 */
mcm 1:db9c179c2a91 373 MAX44009_status_t MAX44009_GetLowerThreshold ( MAX44009_vector_data_t* myLowerThreshold );
mcm 1:db9c179c2a91 374
mcm 1:db9c179c2a91 375 /** It sets the threshold timer register
mcm 1:db9c179c2a91 376 */
mcm 1:db9c179c2a91 377 MAX44009_status_t MAX44009_SetThresholdTimer ( MAX44009_vector_data_t myThresholdTimer_us );
mcm 1:db9c179c2a91 378
mcm 1:db9c179c2a91 379 /** It gets the threshold timer register
mcm 1:db9c179c2a91 380 */
mcm 1:db9c179c2a91 381 MAX44009_status_t MAX44009_GetThresholdTimer ( MAX44009_vector_data_t* myThresholdTimer_us );
mcm 1:db9c179c2a91 382
mcm 1:db9c179c2a91 383 private:
mcm 1:db9c179c2a91 384 I2C _i2c;
mcm 1:db9c179c2a91 385 uint32_t _MAX44009_Addr;
mcm 1:db9c179c2a91 386 };
mcm 1:db9c179c2a91 387
mcm 1:db9c179c2a91 388 #endif /* MAX44009_H */