Advertisement
jamrab

Digital_Light_TSL2561.h

Apr 23rd, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.84 KB | None | 0 0
  1. /*
  2.     Digital_Light_TSL2561.h
  3.     A library for TSL2561
  4.  
  5.     Copyright (c) 2012 seeed technology inc.
  6.     Website    : www.seeed.cc
  7.     Author     : zhangkun
  8.     Create Time:
  9.     Change Log :
  10.  
  11.     The MIT License (MIT)
  12.  
  13.     Permission is hereby granted, free of charge, to any person obtaining a copy
  14.     of this software and associated documentation files (the "Software"), to deal
  15.     in the Software without restriction, including without limitation the rights
  16.     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  17.     copies of the Software, and to permit persons to whom the Software is
  18.     furnished to do so, subject to the following conditions:
  19.  
  20.     The above copyright notice and this permission notice shall be included in
  21.     all copies or substantial portions of the Software.
  22.  
  23.     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  24.     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  25.     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  26.     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  27.     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  28.     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  29.     THE SOFTWARE.
  30. */
  31. #ifndef Digital_Light_TSL2561_H
  32. #define Digital_Light_TSL2561_H
  33.  
  34. #include <Particle.h>
  35.  
  36. #define  TSL2561_Control  0x80
  37. #define  TSL2561_Timing   0x81
  38. #define  TSL2561_Interrupt 0x86
  39. #define  TSL2561_Channal0L 0x8C
  40. #define  TSL2561_Channal0H 0x8D
  41. #define  TSL2561_Channal1L 0x8E
  42. #define  TSL2561_Channal1H 0x8F
  43.  
  44. #define TSL2561_Address  0x29       //device address
  45.  
  46. #define LUX_SCALE 14           // scale by 2^14
  47. #define RATIO_SCALE 9          // scale ratio by 2^9
  48. #define CH_SCALE 10            // scale channel values by 2^10
  49. #define CHSCALE_TINT0 0x7517   // 322/11 * 2^CH_SCALE
  50. #define CHSCALE_TINT1 0x0fe7   // 322/81 * 2^CH_SCALE
  51.  
  52. #define K1T 0x0040   // 0.125 * 2^RATIO_SCALE
  53. #define B1T 0x01f2   // 0.0304 * 2^LUX_SCALE
  54. #define M1T 0x01be   // 0.0272 * 2^LUX_SCALE
  55. #define K2T 0x0080   // 0.250 * 2^RATIO_SCA
  56. #define B2T 0x0214   // 0.0325 * 2^LUX_SCALE
  57. #define M2T 0x02d1   // 0.0440 * 2^LUX_SCALE
  58. #define K3T 0x00c0   // 0.375 * 2^RATIO_SCALE
  59. #define B3T 0x023f   // 0.0351 * 2^LUX_SCALE
  60. #define M3T 0x037b   // 0.0544 * 2^LUX_SCALE
  61. #define K4T 0x0100   // 0.50 * 2^RATIO_SCALE
  62. #define B4T 0x0270   // 0.0381 * 2^LUX_SCALE
  63. #define M4T 0x03fe   // 0.0624 * 2^LUX_SCALE
  64. #define K5T 0x0138   // 0.61 * 2^RATIO_SCALE
  65. #define B5T 0x016f   // 0.0224 * 2^LUX_SCALE
  66. #define M5T 0x01fc   // 0.0310 * 2^LUX_SCALE
  67. #define K6T 0x019a   // 0.80 * 2^RATIO_SCALE
  68. #define B6T 0x00d2   // 0.0128 * 2^LUX_SCALE
  69. #define M6T 0x00fb   // 0.0153 * 2^LUX_SCALE
  70. #define K7T 0x029a   // 1.3 * 2^RATIO_SCALE
  71. #define B7T 0x0018   // 0.00146 * 2^LUX_SCALE
  72. #define M7T 0x0012   // 0.00112 * 2^LUX_SCALE
  73. #define K8T 0x029a   // 1.3 * 2^RATIO_SCALE
  74. #define B8T 0x0000   // 0.000 * 2^LUX_SCALE
  75. #define M8T 0x0000   // 0.000 * 2^LUX_SCALE
  76.  
  77.  
  78.  
  79. #define K1C 0x0043   // 0.130 * 2^RATIO_SCALE
  80. #define B1C 0x0204   // 0.0315 * 2^LUX_SCALE
  81. #define M1C 0x01ad   // 0.0262 * 2^LUX_SCALE
  82. #define K2C 0x0085   // 0.260 * 2^RATIO_SCALE
  83. #define B2C 0x0228   // 0.0337 * 2^LUX_SCALE
  84. #define M2C 0x02c1   // 0.0430 * 2^LUX_SCALE
  85. #define K3C 0x00c8   // 0.390 * 2^RATIO_SCALE
  86. #define B3C 0x0253   // 0.0363 * 2^LUX_SCALE
  87. #define M3C 0x0363   // 0.0529 * 2^LUX_SCALE
  88. #define K4C 0x010a   // 0.520 * 2^RATIO_SCALE
  89. #define B4C 0x0282   // 0.0392 * 2^LUX_SCALE
  90. #define M4C 0x03df   // 0.0605 * 2^LUX_SCALE
  91. #define K5C 0x014d   // 0.65 * 2^RATIO_SCALE
  92. #define B5C 0x0177   // 0.0229 * 2^LUX_SCALE
  93. #define M5C 0x01dd   // 0.0291 * 2^LUX_SCALE
  94. #define K6C 0x019a   // 0.80 * 2^RATIO_SCALE
  95. #define B6C 0x0101   // 0.0157 * 2^LUX_SCALE
  96. #define M6C 0x0127   // 0.0180 * 2^LUX_SCALE
  97. #define K7C 0x029a   // 1.3 * 2^RATIO_SCALE
  98. #define B7C 0x0037   // 0.00338 * 2^LUX_SCALE
  99. #define M7C 0x002b   // 0.00260 * 2^LUX_SCALE
  100. #define K8C 0x029a   // 1.3 * 2^RATIO_SCALE
  101. #define B8C 0x0000   // 0.000 * 2^LUX_SCALE
  102. #define M8C 0x0000   // 0.000 * 2^LUX_SCALE
  103. class TSL2561_CalculateLux {
  104.   public:
  105.     signed long readVisibleLux();
  106.     uint16_t readIRLuminosity();
  107.     uint16_t readFSpecLuminosity();
  108.     unsigned long calculateLux(unsigned int iGain, unsigned int tInt, int iType);
  109.     void getLux(void);
  110.     void init(void);
  111.     uint8_t readRegister(int deviceAddress, int address);
  112.     void writeRegister(int deviceAddress, int address, uint8_t val);
  113.   private:
  114.     uint8_t CH0_LOW, CH0_HIGH, CH1_LOW, CH1_HIGH;
  115.     uint16_t ch0, ch1;
  116.     unsigned long chScale;
  117.     unsigned long channel1;
  118.     unsigned long channel0;
  119.     unsigned long  ratio1;
  120.     unsigned int b;
  121.     unsigned int m;
  122.     unsigned long temp;
  123.     unsigned long lux;
  124.  
  125. };
  126. extern TSL2561_CalculateLux  TSL2561;
  127. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement