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
Original/Adafruit_Sensor_h.txt@5:5b1b625fda6f, 2018-09-21 (annotated)
- 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?
User | Revision | Line number | New 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 |