Plant Monitoring CS

Dependencies:   HTS221

Committer:
titi9211
Date:
Thu Mar 26 10:01:31 2020 +0000
Revision:
62:4763f2aa486c
TSL2561

Who changed what in which revision?

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