source: rtos_arduino/trunk/examples/CompositeExample/Adafruit_Sensor/Adafruit_Sensor.h@ 137

Last change on this file since 137 was 137, checked in by ertl-honda, 8 years ago

サンプルの追加.

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