Etienne Charbonnier
/
plant_monitoring
Plant Monitoring CS
TSL2561.h@62:4763f2aa486c, 2020-03-26 (annotated)
- Committer:
- titi9211
- Date:
- Thu Mar 26 10:01:31 2020 +0000
- Revision:
- 62:4763f2aa486c
TSL2561
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
titi9211 | 62:4763f2aa486c | 1 | /* |
titi9211 | 62:4763f2aa486c | 2 | * mbed library program |
titi9211 | 62:4763f2aa486c | 3 | * Luminosity sensor -- LIGHT-TO-DIGITAL CONVERTER (light intensity to a digital signal output) |
titi9211 | 62:4763f2aa486c | 4 | * TSL2561 by Texas Advanced Optoelectronic Solutions Inc. |
titi9211 | 62:4763f2aa486c | 5 | * |
titi9211 | 62:4763f2aa486c | 6 | * Copyright (c) 2015,'17 Kenji Arai / JH1PJL |
titi9211 | 62:4763f2aa486c | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
titi9211 | 62:4763f2aa486c | 8 | * http://mbed.org/users/kenjiArai/ |
titi9211 | 62:4763f2aa486c | 9 | * Created: Feburary 21st, 2015 |
titi9211 | 62:4763f2aa486c | 10 | * Revised: August 23rd, 2017 |
titi9211 | 62:4763f2aa486c | 11 | */ |
titi9211 | 62:4763f2aa486c | 12 | /* |
titi9211 | 62:4763f2aa486c | 13 | *---------------- REFERENCE ---------------------------------------------------------------------- |
titi9211 | 62:4763f2aa486c | 14 | * https://docs.google.com/viewer?url=http%3A%2F%2Fwww.adafruit.com%2Fdatasheets%2FTSL256x.pdf |
titi9211 | 62:4763f2aa486c | 15 | * https://learn.adafruit.com/tsl2561?view=all |
titi9211 | 62:4763f2aa486c | 16 | * http://www.adafruit.com/products/439 |
titi9211 | 62:4763f2aa486c | 17 | * http://akizukidenshi.com/catalog/g/gM-08219/ |
titi9211 | 62:4763f2aa486c | 18 | */ |
titi9211 | 62:4763f2aa486c | 19 | |
titi9211 | 62:4763f2aa486c | 20 | #ifndef TSL2561_H |
titi9211 | 62:4763f2aa486c | 21 | #define TSL2561_H |
titi9211 | 62:4763f2aa486c | 22 | |
titi9211 | 62:4763f2aa486c | 23 | #include "mbed.h" |
titi9211 | 62:4763f2aa486c | 24 | |
titi9211 | 62:4763f2aa486c | 25 | // Luminosity sensor, TSL2561 |
titi9211 | 62:4763f2aa486c | 26 | // Address b7=0,b6=1,b5=1,b4=1,b3=0,b2=0,b1=1, b0=R/W |
titi9211 | 62:4763f2aa486c | 27 | #define TSL2561_ADDRESS_GND (0x29 << 1) |
titi9211 | 62:4763f2aa486c | 28 | #define TSL2561_ADDRESS_FLOAT (0x39 << 1) |
titi9211 | 62:4763f2aa486c | 29 | #define TSL2561_ADDRESS_VDD (0x49 << 1) |
titi9211 | 62:4763f2aa486c | 30 | |
titi9211 | 62:4763f2aa486c | 31 | ////////////// Registers ////////////////////////////////// |
titi9211 | 62:4763f2aa486c | 32 | // Register definition |
titi9211 | 62:4763f2aa486c | 33 | #define TSL2561_CONTROL 0x00 |
titi9211 | 62:4763f2aa486c | 34 | #define TSL2561_TIMING 0x01 |
titi9211 | 62:4763f2aa486c | 35 | #define TSL2561_THRESHLOWLOW 0x02 |
titi9211 | 62:4763f2aa486c | 36 | #define TSL2561_THRESHHIGHLOW 0x04 |
titi9211 | 62:4763f2aa486c | 37 | #define TSL2561_INTERRUPT 0x06 |
titi9211 | 62:4763f2aa486c | 38 | #define TSL2561_CRC 0x08 |
titi9211 | 62:4763f2aa486c | 39 | #define TSL2561_ID 0x0A |
titi9211 | 62:4763f2aa486c | 40 | #define TSL2561_DATA0LOW 0x0C |
titi9211 | 62:4763f2aa486c | 41 | #define TSL2561_DATA0HIGH 0x0D |
titi9211 | 62:4763f2aa486c | 42 | #define TSL2561_DATA1LOW 0x0E |
titi9211 | 62:4763f2aa486c | 43 | #define TSL2561_DATA1HIGH 0x0F |
titi9211 | 62:4763f2aa486c | 44 | |
titi9211 | 62:4763f2aa486c | 45 | ////////////// TIMING PARAMETER /////////////////////////// |
titi9211 | 62:4763f2aa486c | 46 | #define TIMING_GAIN_1 (0UL << 4) |
titi9211 | 62:4763f2aa486c | 47 | #define TIMING_GAIN_16 (1UL << 4) |
titi9211 | 62:4763f2aa486c | 48 | #define TIMING_TIME_13R7 (0x0) |
titi9211 | 62:4763f2aa486c | 49 | #define TIMING_TIME_101 (0x1) |
titi9211 | 62:4763f2aa486c | 50 | #define TIMING_TIME_402 (0x2) |
titi9211 | 62:4763f2aa486c | 51 | #define TIMING_TIME_MANU (0x3) |
titi9211 | 62:4763f2aa486c | 52 | #define TIMING_DEFAULT (TIMING_GAIN_1 + TIMING_TIME_402) |
titi9211 | 62:4763f2aa486c | 53 | |
titi9211 | 62:4763f2aa486c | 54 | ////////////// ID ///////////////////////////////////////// |
titi9211 | 62:4763f2aa486c | 55 | #define I_AM_TSL2561 0x50 |
titi9211 | 62:4763f2aa486c | 56 | #define REG_NO_MASK 0x0F |
titi9211 | 62:4763f2aa486c | 57 | |
titi9211 | 62:4763f2aa486c | 58 | ////////////// COMMAND //////////////////////////////////// |
titi9211 | 62:4763f2aa486c | 59 | #define CMD_CMDMODE (1UL << 7) |
titi9211 | 62:4763f2aa486c | 60 | #define CMD_CLEAR (1UL << 6) |
titi9211 | 62:4763f2aa486c | 61 | #define CMD_WORD (1UL << 5) |
titi9211 | 62:4763f2aa486c | 62 | #define CMD_BLOCK (1UL << 4) |
titi9211 | 62:4763f2aa486c | 63 | #define CMD_SINGLE (CMD_CMDMODE) |
titi9211 | 62:4763f2aa486c | 64 | #define CMD_MULTI (CMD_CMDMODE + CMD_WORD) |
titi9211 | 62:4763f2aa486c | 65 | |
titi9211 | 62:4763f2aa486c | 66 | /** Interface for Luminosity sensor, TSL2561 |
titi9211 | 62:4763f2aa486c | 67 | * @code |
titi9211 | 62:4763f2aa486c | 68 | * #include "mbed.h" |
titi9211 | 62:4763f2aa486c | 69 | * #include "TSL2561.h" |
titi9211 | 62:4763f2aa486c | 70 | * |
titi9211 | 62:4763f2aa486c | 71 | * // I2C Communication |
titi9211 | 62:4763f2aa486c | 72 | * TSL2561 lum(dp5,dp27); // TSL2561 SDA, SCL |
titi9211 | 62:4763f2aa486c | 73 | * // If you connected I2C line not only this device but also other devices, |
titi9211 | 62:4763f2aa486c | 74 | * // you need to declare following method. |
titi9211 | 62:4763f2aa486c | 75 | * I2C i2c(dp5,dp27); // SDA, SCL |
titi9211 | 62:4763f2aa486c | 76 | * TSL2561 lum(i2c); // TSL2561 SDA, SCL (Data available every 400mSec) |
titi9211 | 62:4763f2aa486c | 77 | * |
titi9211 | 62:4763f2aa486c | 78 | * int main() {; |
titi9211 | 62:4763f2aa486c | 79 | * while(true){ |
titi9211 | 62:4763f2aa486c | 80 | * printf("Illuminance: %+7.2f [Lux]\r\n", lum.lux()); |
titi9211 | 62:4763f2aa486c | 81 | * wait(1.0); |
titi9211 | 62:4763f2aa486c | 82 | * } |
titi9211 | 62:4763f2aa486c | 83 | * } |
titi9211 | 62:4763f2aa486c | 84 | * @endcode |
titi9211 | 62:4763f2aa486c | 85 | */ |
titi9211 | 62:4763f2aa486c | 86 | |
titi9211 | 62:4763f2aa486c | 87 | class TSL2561 |
titi9211 | 62:4763f2aa486c | 88 | { |
titi9211 | 62:4763f2aa486c | 89 | public: |
titi9211 | 62:4763f2aa486c | 90 | /** Configure data pin |
titi9211 | 62:4763f2aa486c | 91 | * @param data SDA and SCL pins |
titi9211 | 62:4763f2aa486c | 92 | */ |
titi9211 | 62:4763f2aa486c | 93 | TSL2561(PinName p_sda, PinName p_scl); |
titi9211 | 62:4763f2aa486c | 94 | TSL2561(PinName p_sda, PinName p_scl, uint8_t addr); |
titi9211 | 62:4763f2aa486c | 95 | |
titi9211 | 62:4763f2aa486c | 96 | /** Configure data pin (with other devices on I2C line) |
titi9211 | 62:4763f2aa486c | 97 | * @param I2C previous definition |
titi9211 | 62:4763f2aa486c | 98 | */ |
titi9211 | 62:4763f2aa486c | 99 | TSL2561(I2C& p_i2c); |
titi9211 | 62:4763f2aa486c | 100 | TSL2561(I2C& p_i2c, uint8_t addr); |
titi9211 | 62:4763f2aa486c | 101 | |
titi9211 | 62:4763f2aa486c | 102 | /** Get approximates the human eye response |
titi9211 | 62:4763f2aa486c | 103 | * in the commonly used Illuminance unit of Lux |
titi9211 | 62:4763f2aa486c | 104 | * @param none |
titi9211 | 62:4763f2aa486c | 105 | * @return Lux |
titi9211 | 62:4763f2aa486c | 106 | */ |
titi9211 | 62:4763f2aa486c | 107 | float lux(void); |
titi9211 | 62:4763f2aa486c | 108 | |
titi9211 | 62:4763f2aa486c | 109 | /** Set timing register |
titi9211 | 62:4763f2aa486c | 110 | * @param timing parameter |
titi9211 | 62:4763f2aa486c | 111 | * @return timing read data |
titi9211 | 62:4763f2aa486c | 112 | */ |
titi9211 | 62:4763f2aa486c | 113 | uint8_t set_timing_reg(uint8_t parameter); |
titi9211 | 62:4763f2aa486c | 114 | |
titi9211 | 62:4763f2aa486c | 115 | /** Read timing register |
titi9211 | 62:4763f2aa486c | 116 | * @param timing parameter |
titi9211 | 62:4763f2aa486c | 117 | * @return timing read data |
titi9211 | 62:4763f2aa486c | 118 | */ |
titi9211 | 62:4763f2aa486c | 119 | uint8_t read_timing_reg(void); |
titi9211 | 62:4763f2aa486c | 120 | |
titi9211 | 62:4763f2aa486c | 121 | /** Set I2C clock frequency |
titi9211 | 62:4763f2aa486c | 122 | * @param freq. |
titi9211 | 62:4763f2aa486c | 123 | * @return none |
titi9211 | 62:4763f2aa486c | 124 | */ |
titi9211 | 62:4763f2aa486c | 125 | void frequency(int hz); |
titi9211 | 62:4763f2aa486c | 126 | |
titi9211 | 62:4763f2aa486c | 127 | /** check Device ID number |
titi9211 | 62:4763f2aa486c | 128 | * @param none |
titi9211 | 62:4763f2aa486c | 129 | * @return TSL2561 = 1, others 0 |
titi9211 | 62:4763f2aa486c | 130 | */ |
titi9211 | 62:4763f2aa486c | 131 | uint8_t who_am_i(void); |
titi9211 | 62:4763f2aa486c | 132 | |
titi9211 | 62:4763f2aa486c | 133 | /** Read ID and Revision Number |
titi9211 | 62:4763f2aa486c | 134 | * @param none |
titi9211 | 62:4763f2aa486c | 135 | * @return ID + REVNO |
titi9211 | 62:4763f2aa486c | 136 | */ |
titi9211 | 62:4763f2aa486c | 137 | uint16_t read_ID(void); |
titi9211 | 62:4763f2aa486c | 138 | |
titi9211 | 62:4763f2aa486c | 139 | /** Power Up/Down |
titi9211 | 62:4763f2aa486c | 140 | * @param none |
titi9211 | 62:4763f2aa486c | 141 | * @return none |
titi9211 | 62:4763f2aa486c | 142 | */ |
titi9211 | 62:4763f2aa486c | 143 | void power_up(void); |
titi9211 | 62:4763f2aa486c | 144 | void power_down(void); |
titi9211 | 62:4763f2aa486c | 145 | |
titi9211 | 62:4763f2aa486c | 146 | protected: |
titi9211 | 62:4763f2aa486c | 147 | I2C *_i2c_p; |
titi9211 | 62:4763f2aa486c | 148 | I2C &_i2c; |
titi9211 | 62:4763f2aa486c | 149 | |
titi9211 | 62:4763f2aa486c | 150 | void init(void); |
titi9211 | 62:4763f2aa486c | 151 | |
titi9211 | 62:4763f2aa486c | 152 | private: |
titi9211 | 62:4763f2aa486c | 153 | uint8_t TSL2561_addr; |
titi9211 | 62:4763f2aa486c | 154 | uint8_t dt[4]; |
titi9211 | 62:4763f2aa486c | 155 | uint32_t ch0; |
titi9211 | 62:4763f2aa486c | 156 | uint32_t ch1; |
titi9211 | 62:4763f2aa486c | 157 | int8_t gain; |
titi9211 | 62:4763f2aa486c | 158 | uint8_t id_number; |
titi9211 | 62:4763f2aa486c | 159 | double integ_time; |
titi9211 | 62:4763f2aa486c | 160 | }; |
titi9211 | 62:4763f2aa486c | 161 | |
titi9211 | 62:4763f2aa486c | 162 | #endif // TSL2561_H |