diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino index ebb583725..0b7d00dff 100644 --- a/sonoff/_releasenotes.ino +++ b/sonoff/_releasenotes.ino @@ -1,4 +1,5 @@ /* 6.0.0a + * Add support for APDS9960 proximity sensor (#3051) * Add increment and decrement value to command Counter (#2838) * Add option 0 to command Timers disarming all timers (#2962) * Add time in minutes to rule Time#Initialized, Time#set and Time#Minute (#2669) diff --git a/sonoff/user_config.h b/sonoff/user_config.h index 5e178aa60..4b03a47f3 100644 --- a/sonoff/user_config.h +++ b/sonoff/user_config.h @@ -276,6 +276,7 @@ // #define USE_INA219 // Add I2C code for INA219 Low voltage and current sensor (+1k code) // #define USE_MGS // Add I2C code for Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code) #define MGS_SENSOR_ADDR 0x04 // Default Mutichannel Gas sensor i2c address +// #define USE_APDS9960 // Add I2C code for APDS9960 Proximity Sensor. Disables SHT and VEML6070 (+4k7 code) #endif // USE_I2C // -- SPI sensors --------------------------------- diff --git a/sonoff/xdrv_91_apds9960.ino b/sonoff/xdrv_13_apds9960.ino similarity index 97% rename from sonoff/xdrv_91_apds9960.ino rename to sonoff/xdrv_13_apds9960.ino index f524995c0..d83892e9e 100644 --- a/sonoff/xdrv_91_apds9960.ino +++ b/sonoff/xdrv_13_apds9960.ino @@ -1,52 +1,52 @@ /* - Copyright (c) 2017 Shawn Hymel/Sparkfun and Theo Arends. All rights reserved. + xdrv_13_apds9960.ino - Support for I2C APDS9960 Proximity Sensor for Sonoff-Tasmota - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: + Copyright (C) 2018 Shawn Hymel/Sparkfun and Theo Arends - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ -//#define USE_APDS9960 // uncomment to enable the sensor -// !!!!!! turn off conflicting drivers !!!! -#if defined(USE_SHT) || defined(USE_VEML6070) - #warning I will turn off conflicting drivers (SHT and VEML6070) !!! - #undef USE_SHT // SHT-Driver blocks gesture sensor - #undef USE_VEML6070 // address conflict on the I2C-bus -#endif - #ifdef USE_I2C #ifdef USE_APDS9960 - -enum GestureCommands { - CMND_GESTURE }; - -const char kGestureCommands[] PROGMEM = - "Gesture" ; - /*********************************************************************************************\ - * APDS9960 + * APDS9960 - Digital Proximity Ambient Light RGB and Gesture Sensor * * Source: Shawn Hymel (SparkFun Electronics) * Adaption for TASMOTA: Christian Baars + * + * I2C Address: 0x39 \*********************************************************************************************/ +#if defined(USE_SHT) || defined(USE_VEML6070) + #warning **** Turned off conflicting drivers SHT and VEML6070 **** + #ifdef USE_SHT + #undef USE_SHT // SHT-Driver blocks gesture sensor + #endif + #ifdef USE_VEML6070 + #undef USE_VEML6070 // address conflict on the I2C-bus +#endif + +#endif + #define APDS9960_I2C_ADDR 0x39 #define APDS9960_CHIPID_1 0xAB @@ -57,7 +57,11 @@ const char kGestureCommands[] PROGMEM = #define GESTURE_SENSITIVITY_1 50 #define GESTURE_SENSITIVITY_2 20 +enum GestureCommands { + CMND_GESTURE }; +const char kGestureCommands[] PROGMEM = + "Gesture" ; uint8_t APDS9960addr; uint8_t APDS9960type = 0; @@ -65,7 +69,6 @@ char APDS9960stype[7]; char currentGesture[6]; bool gesture_mode = true; - volatile uint8_t recovery_loop_counter = 0; //count number of stateloops to switch the sensor off, if needed #define APDS9960_LONG_RECOVERY 50 //long pause after sensor overload in loops #define APDS9960_MAX_GESTURE_CYCLES 50 //how many FIFO-reads are allowed to prevent crash @@ -80,14 +83,12 @@ const char HTTP_APDS_9960_SNS[] PROGMEM = "%s" "{s}" "Proximity" "{m}%s{e}"; // {s} = , {m} = , {e} = #endif // USE_WEBSERVER - /*********************************************************************************************\ * APDS9960 * * Programmer : APDS9960 Datasheet and Sparkfun \*********************************************************************************************/ - /* Misc parameters */ #define FIFO_PAUSE_TIME 30 // Wait period (ms) between FIFO reads @@ -253,7 +254,6 @@ enum { APDS9960_ALL_STATE }; - /* Container for gesture data */ typedef struct gesture_data_type { uint8_t u_data[32]; @@ -275,8 +275,6 @@ typedef struct gesture_data_type { int16_t gesture_state_ = 0; int16_t gesture_motion_ = DIR_NONE; - - /******************************************************************************* * Helper functions ******************************************************************************/