Luminosity sensor by Texas Advanced Optoelectronic Solutions Inc.. Device combines one broadband photodiode (visible plus infrared) and one infrared-responding photodiode. Sets Gain x1 and 402mS as default.

Dependents:   MusicBoxForFathersDay FTHR_SensorHub Affich_Lum_Moist Projetv0 ... more

Committer:
kenjiArai
Date:
Fri Sep 21 22:57:07 2018 +0000
Revision:
5:5b1b625fda6f
based on Adafruit program and keep interface functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 5:5b1b625fda6f 1 /*
kenjiArai 5:5b1b625fda6f 2 * Copyright (C) 2008 The Android Open Source Project
kenjiArai 5:5b1b625fda6f 3 *
kenjiArai 5:5b1b625fda6f 4 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 5:5b1b625fda6f 5 * you may not use this file except in compliance with the License.
kenjiArai 5:5b1b625fda6f 6 * You may obtain a copy of the License at
kenjiArai 5:5b1b625fda6f 7 *
kenjiArai 5:5b1b625fda6f 8 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 5:5b1b625fda6f 9 *
kenjiArai 5:5b1b625fda6f 10 * Unless required by applicable law or agreed to in writing, software< /span>
kenjiArai 5:5b1b625fda6f 11 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 5:5b1b625fda6f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 5:5b1b625fda6f 13 * See the License for the specific language governing permissions and
kenjiArai 5:5b1b625fda6f 14 * limitations under the License.
kenjiArai 5:5b1b625fda6f 15 */
kenjiArai 5:5b1b625fda6f 16
kenjiArai 5:5b1b625fda6f 17 /* Update by K. Townsend (Adafruit Industries) for lighter typedefs, and
kenjiArai 5:5b1b625fda6f 18 * extended sensor support to include color, voltage and current */
kenjiArai 5:5b1b625fda6f 19
kenjiArai 5:5b1b625fda6f 20 #ifndef _ADAFRUIT_SENSOR_H
kenjiArai 5:5b1b625fda6f 21 #define _ADAFRUIT_SENSOR_H
kenjiArai 5:5b1b625fda6f 22
kenjiArai 5:5b1b625fda6f 23 #if ARDUINO >= 100
kenjiArai 5:5b1b625fda6f 24 #include "Arduino.h"
kenjiArai 5:5b1b625fda6f 25 #include "Print.h"
kenjiArai 5:5b1b625fda6f 26 #else
kenjiArai 5:5b1b625fda6f 27 #include "WProgram.h"
kenjiArai 5:5b1b625fda6f 28 #endif
kenjiArai 5:5b1b625fda6f 29
kenjiArai 5:5b1b625fda6f 30 /* Intentionally modeled after sensors.h in the Android API:
kenjiArai 5:5b1b625fda6f 31 * https://github.com/android/platform_hardware_libhardware/blob/master/include/hardware/sensors.h */
kenjiArai 5:5b1b625fda6f 32
kenjiArai 5:5b1b625fda6f 33 /* Constants */
kenjiArai 5:5b1b625fda6f 34 #define SENSORS_GRAVITY_EARTH (9.80665F) /**< Earth's gravity in m/s^2 */
kenjiArai 5:5b1b625fda6f 35 #define SENSORS_GRAVITY_MOON (1.6F) /**< The moon's gravity in m/s^2 */
kenjiArai 5:5b1b625fda6f 36 #define SENSORS_GRAVITY_SUN (275.0F) /**< The sun's gravity in m/s^2 */
kenjiArai 5:5b1b625fda6f 37 #define SENSORS_GRAVITY_STANDARD (SENSORS_GRAVITY_EARTH)
kenjiArai 5:5b1b625fda6f 38 #define SENSORS_MAGFIELD_EARTH_MAX (60.0F) /**< Maximum magnetic field on Earth's surface */
kenjiArai 5:5b1b625fda6f 39 #define SENSORS_MAGFIELD_EARTH_MIN (30.0F) /**< Minimum magnetic field on Earth's surface */
kenjiArai 5:5b1b625fda6f 40 #define SENSORS_PRESSURE_SEALEVELHPA (1013.25F) /**< Average sea level pressure is 1013.25 hPa */
kenjiArai 5:5b1b625fda6f 41 #define SENSORS_DPS_TO_RADS (0.017453293F) /**< Degrees/s to rad/s multiplier */
kenjiArai 5:5b1b625fda6f 42 #define SENSORS_GAUSS_TO_MICROTESLA (100) /**< Gauss to micro-Tesla multiplier */
kenjiArai 5:5b1b625fda6f 43
kenjiArai 5:5b1b625fda6f 44 /** Sensor types */
kenjiArai 5:5b1b625fda6f 45 typedef enum
kenjiArai 5:5b1b625fda6f 46 {
kenjiArai 5:5b1b625fda6f 47 SENSOR_TYPE_ACCELEROMETER = (1), /**< Gravity + linear acceleration */
kenjiArai 5:5b1b625fda6f 48 SENSOR_TYPE_MAGNETIC_FIELD = (2),
kenjiArai 5:5b1b625fda6f 49 SENSOR_TYPE_ORIENTATION = (3),
kenjiArai 5:5b1b625fda6f 50 SENSOR_TYPE_GYROSCOPE = (4),
kenjiArai 5:5b1b625fda6f 51 SENSOR_TYPE_LIGHT = (5),
kenjiArai 5:5b1b625fda6f 52 SENSOR_TYPE_PRESSURE = (6),
kenjiArai 5:5b1b625fda6f 53 SENSOR_TYPE_PROXIMITY = (8),
kenjiArai 5:5b1b625fda6f 54 SENSOR_TYPE_GRAVITY = (9),
kenjiArai 5:5b1b625fda6f 55 SENSOR_TYPE_LINEAR_ACCELERATION = (10), /**< Acceleration not including gravity */
kenjiArai 5:5b1b625fda6f 56 SENSOR_TYPE_ROTATION_VECTOR = (11),
kenjiArai 5:5b1b625fda6f 57 SENSOR_TYPE_RELATIVE_HUMIDITY = (12),
kenjiArai 5:5b1b625fda6f 58 SENSOR_TYPE_AMBIENT_TEMPERATURE = (13),
kenjiArai 5:5b1b625fda6f 59 SENSOR_TYPE_VOLTAGE = (15),
kenjiArai 5:5b1b625fda6f 60 SENSOR_TYPE_CURRENT = (16),
kenjiArai 5:5b1b625fda6f 61 SENSOR_TYPE_COLOR = (17)
kenjiArai 5:5b1b625fda6f 62 } sensors_type_t;
kenjiArai 5:5b1b625fda6f 63
kenjiArai 5:5b1b625fda6f 64 /** struct sensors_vec_s is used to return a vector in a common format. */
kenjiArai 5:5b1b625fda6f 65 typedef struct {
kenjiArai 5:5b1b625fda6f 66 union {
kenjiArai 5:5b1b625fda6f 67 float v[3];
kenjiArai 5:5b1b625fda6f 68 struct {
kenjiArai 5:5b1b625fda6f 69 float x;
kenjiArai 5:5b1b625fda6f 70 float y;
kenjiArai 5:5b1b625fda6f 71 float z;
kenjiArai 5:5b1b625fda6f 72 };
kenjiArai 5:5b1b625fda6f 73 /* Orientation sensors */
kenjiArai 5:5b1b625fda6f 74 struct {
kenjiArai 5:5b1b625fda6f 75 float roll; /**< Rotation around the longitudinal axis (the plane body, 'X axis'). Roll is positive and increasing when moving downward. -90�<=roll<=90� */
kenjiArai 5:5b1b625fda6f 76 float pitch; /**< Rotation around the lateral axis (the wing span, 'Y axis'). Pitch is positive and increasing when moving upwards. -180�<=pitch<=180�) */
kenjiArai 5:5b1b625fda6f 77 float heading; /**< Angle between the longitudinal axis (the plane body) and magnetic north, measured clockwise when viewing from the top of the device. 0-359� */
kenjiArai 5:5b1b625fda6f 78 };
kenjiArai 5:5b1b625fda6f 79 };
kenjiArai 5:5b1b625fda6f 80 int8_t status;
kenjiArai 5:5b1b625fda6f 81 uint8_t reserved[3];
kenjiArai 5:5b1b625fda6f 82 } sensors_vec_t;
kenjiArai 5:5b1b625fda6f 83
kenjiArai 5:5b1b625fda6f 84 /** struct sensors_color_s is used to return color data in a common format. */
kenjiArai 5:5b1b625fda6f 85 typedef struct {
kenjiArai 5:5b1b625fda6f 86 union {
kenjiArai 5:5b1b625fda6f 87 float c[3];
kenjiArai 5:5b1b625fda6f 88 /* RGB color space */
kenjiArai 5:5b1b625fda6f 89 struct {
kenjiArai 5:5b1b625fda6f 90 float r; /**< Red component */
kenjiArai 5:5b1b625fda6f 91 float g; /**< Green component */
kenjiArai 5:5b1b625fda6f 92 float b; /**< Blue component */
kenjiArai 5:5b1b625fda6f 93 };
kenjiArai 5:5b1b625fda6f 94 };
kenjiArai 5:5b1b625fda6f 95 uint32_t rgba; /**< 24-bit RGBA value */
kenjiArai 5:5b1b625fda6f 96 } sensors_color_t;
kenjiArai 5:5b1b625fda6f 97
kenjiArai 5:5b1b625fda6f 98 /* Sensor event (36 bytes) */
kenjiArai 5:5b1b625fda6f 99 /** struct sensor_event_s is used to provide a single sensor event in a common format. */
kenjiArai 5:5b1b625fda6f 100 typedef struct
kenjiArai 5:5b1b625fda6f 101 {
kenjiArai 5:5b1b625fda6f 102 int32_t version; /**< must be sizeof(struct sensors_event_t) */
kenjiArai 5:5b1b625fda6f 103 int32_t sensor_id; /**< unique sensor identifier */
kenjiArai 5:5b1b625fda6f 104 int32_t type; /**< sensor type */
kenjiArai 5:5b1b625fda6f 105 int32_t reserved0; /**< reserved */
kenjiArai 5:5b1b625fda6f 106 int32_t timestamp; /**< time is in milliseconds */
kenjiArai 5:5b1b625fda6f 107 union
kenjiArai 5:5b1b625fda6f 108 {
kenjiArai 5:5b1b625fda6f 109 float data[4];
kenjiArai 5:5b1b625fda6f 110 sensors_vec_t acceleration; /**< acceleration values are in meter per second per second (m/s^2) */
kenjiArai 5:5b1b625fda6f 111 sensors_vec_t magnetic; /**< magnetic vector values are in micro-Tesla (uT) */
kenjiArai 5:5b1b625fda6f 112 sensors_vec_t orientation; /**< orientation values are in degrees */
kenjiArai 5:5b1b625fda6f 113 sensors_vec_t gyro; /**< gyroscope values are in rad/s */
kenjiArai 5:5b1b625fda6f 114 float temperature; /**< temperature is in degrees centigrade (Celsius) */
kenjiArai 5:5b1b625fda6f 115 float distance; /**< distance in centimeters */
kenjiArai 5:5b1b625fda6f 116 float light; /**< light in SI lux units */
kenjiArai 5:5b1b625fda6f 117 float pressure; /**< pressure in hectopascal (hPa) */
kenjiArai 5:5b1b625fda6f 118 float relative_humidity; /**< relative humidity in percent */
kenjiArai 5:5b1b625fda6f 119 float current; /**< current in milliamps (mA) */
kenjiArai 5:5b1b625fda6f 120 float voltage; /**< voltage in volts (V) */
kenjiArai 5:5b1b625fda6f 121 sensors_color_t color; /**< color in RGB component values */
kenjiArai 5:5b1b625fda6f 122 };
kenjiArai 5:5b1b625fda6f 123 } sensors_event_t;
kenjiArai 5:5b1b625fda6f 124
kenjiArai 5:5b1b625fda6f 125 /* Sensor details (40 bytes) */
kenjiArai 5:5b1b625fda6f 126 /** struct sensor_s is used to describe basic information about a specific sensor. */
kenjiArai 5:5b1b625fda6f 127 typedef struct
kenjiArai 5:5b1b625fda6f 128 {
kenjiArai 5:5b1b625fda6f 129 char name[12]; /**< sensor name */
kenjiArai 5:5b1b625fda6f 130 int32_t version; /**< version of the hardware + driver */
kenjiArai 5:5b1b625fda6f 131 int32_t sensor_id; /**< unique sensor identifier */
kenjiArai 5:5b1b625fda6f 132 int32_t type; /**< this sensor's type (ex. SENSOR_TYPE_LIGHT) */
kenjiArai 5:5b1b625fda6f 133 float max_value; /**< maximum value of this sensor's value in SI units */
kenjiArai 5:5b1b625fda6f 134 float min_value; /**< minimum value of this sensor's value in SI units */
kenjiArai 5:5b1b625fda6f 135 float resolution; /**< smallest difference between two values reported by this sensor */
kenjiArai 5:5b1b625fda6f 136 int32_t min_delay; /**< min delay in microseconds between events. zero = not a constant rate */
kenjiArai 5:5b1b625fda6f 137 } sensor_t;
kenjiArai 5:5b1b625fda6f 138
kenjiArai 5:5b1b625fda6f 139 class Adafruit_Sensor {
kenjiArai 5:5b1b625fda6f 140 public:
kenjiArai 5:5b1b625fda6f 141 // Constructor(s)
kenjiArai 5:5b1b625fda6f 142 Adafruit_Sensor() {}
kenjiArai 5:5b1b625fda6f 143 virtual ~Adafruit_Sensor() {}
kenjiArai 5:5b1b625fda6f 144
kenjiArai 5:5b1b625fda6f 145 // These must be defined by the subclass
kenjiArai 5:5b1b625fda6f 146 virtual void enableAutoRange(bool enabled) {};
kenjiArai 5:5b1b625fda6f 147 virtual bool getEvent(sensors_event_t*) = 0;
kenjiArai 5:5b1b625fda6f 148 virtual void getSensor(sensor_t*) = 0;
kenjiArai 5:5b1b625fda6f 149
kenjiArai 5:5b1b625fda6f 150 private:
kenjiArai 5:5b1b625fda6f 151 bool _autoRange;
kenjiArai 5:5b1b625fda6f 152 };
kenjiArai 5:5b1b625fda6f 153
kenjiArai 5:5b1b625fda6f 154 #endif