diff --git a/examples/c++/CMakeLists.txt b/examples/c++/CMakeLists.txt index 63d51688..692682cd 100644 --- a/examples/c++/CMakeLists.txt +++ b/examples/c++/CMakeLists.txt @@ -133,6 +133,7 @@ add_executable (mpu60x0-example mpu60x0.cxx) add_executable (ak8975-example ak8975.cxx) add_executable (lsm9ds0-example lsm9ds0.cxx) add_executable (eboled-example eboled.cxx) +add_executable (hyld9767-example hyld9767.cxx) include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) include_directories (${PROJECT_SOURCE_DIR}/src/grove) @@ -239,6 +240,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/rgbringcoder) include_directories (${PROJECT_SOURCE_DIR}/src/hp20x) include_directories (${PROJECT_SOURCE_DIR}/src/pn532) include_directories (${PROJECT_SOURCE_DIR}/src/lsm9ds0) +include_directories (${PROJECT_SOURCE_DIR}/src/hyld9767) target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT}) @@ -373,3 +375,4 @@ target_link_libraries (mpu60x0-example mpu9150 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (ak8975-example mpu9150 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (lsm9ds0-example lsm9ds0 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (eboled-example i2clcd ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (hyld9767-example hyld9767 ${CMAKE_THREAD_LIBS_INIT}) diff --git a/examples/c++/hyld9767.cxx b/examples/c++/hyld9767.cxx new file mode 100644 index 00000000..bd3122e8 --- /dev/null +++ b/examples/c++/hyld9767.cxx @@ -0,0 +1,68 @@ +/* + * Author: Jon Trulson + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include "hyld9767.h" + +using namespace std; + +bool shouldRun = true; + +#define HYLD9767_AREF 5.0 + +void sig_handler(int signo) +{ + if (signo == SIGINT) + shouldRun = false; +} + +int main() +{ + signal(SIGINT, sig_handler); + +//! [Interesting] + + // Instantiate a HYLD9767 on analog pin A0, with an analog + // reference voltage of HYLD9767_AREF + upm::HYLD9767 *loud = new upm::HYLD9767(0, HYLD9767_AREF); + + // Every tenth of a second, sample the loudness and output it's + // corresponding analog voltage. + + while (shouldRun) + { + cout << "Detected loudness (volts): " << loud->loudness() << endl; + + usleep(100000); + } + +//! [Interesting] + + cout << "Exiting" << endl; + + delete loud; + return 0; +} diff --git a/examples/javascript/hyld9767.js b/examples/javascript/hyld9767.js new file mode 100644 index 00000000..a79043c5 --- /dev/null +++ b/examples/javascript/hyld9767.js @@ -0,0 +1,52 @@ +/*jslint node:true, vars:true, bitwise:true, unparam:true */ +/*jshint unused:true */ + +/* + * Author: Jon Trulson + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +var sensorObj = require('jsupm_hyld9767'); + +// Instantiate a HYLD9767 on analog pin A0, with an analog +// reference voltage of 5.0 +var sensor = new sensorObj.HYLD9767(0, 5.0); + +// Every tenth of a second, sample the loudness and output it's +// corresponding analog voltage. + +setInterval(function() +{ + console.log("Detected loudness (volts): " + sensor.loudness()); +}, 100); + +// exit on ^C +process.on('SIGINT', function() +{ + sensor = null; + sensorObj.cleanUp(); + sensorObj = null; + console.log("Exiting."); + process.exit(0); +}); + diff --git a/examples/python/hyld9767.py b/examples/python/hyld9767.py new file mode 100644 index 00000000..bf21856f --- /dev/null +++ b/examples/python/hyld9767.py @@ -0,0 +1,50 @@ +#!/usr/bin/python +# Author: Jon Trulson +# Copyright (c) 2015 Intel Corporation. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import time, sys, signal, atexit +import pyupm_hyld9767 as sensorObj + +# Instantiate a HYLD9767 on analog pin A0, with an analog +# reference voltage of 5.0 +sensor = sensorObj.HYLD9767(0, 5.0) + +## Exit handlers ## +# This function stops python from printing a stacktrace when you hit control-C +def SIGINTHandler(signum, frame): + raise SystemExit + +# This function lets you run code on exit +def exitHandler(): + print "Exiting" + sys.exit(0) + +# Register exit handlers +atexit.register(exitHandler) +signal.signal(signal.SIGINT, SIGINTHandler) + +# Every tenth of a second, sample the loudness and output it's +# corresponding analog voltage. + +while (1): + print "Detected loudness (volts): ", sensor.loudness() + time.sleep(.1) diff --git a/src/hyld9767/CMakeLists.txt b/src/hyld9767/CMakeLists.txt new file mode 100644 index 00000000..a4efef07 --- /dev/null +++ b/src/hyld9767/CMakeLists.txt @@ -0,0 +1,5 @@ +set (libname "hyld9767") +set (libdescription "upm DFRobot loudness sensor") +set (module_src ${libname}.cxx) +set (module_h ${libname}.h) +upm_module_init() diff --git a/src/hyld9767/hyld9767.cxx b/src/hyld9767/hyld9767.cxx new file mode 100644 index 00000000..d1980445 --- /dev/null +++ b/src/hyld9767/hyld9767.cxx @@ -0,0 +1,48 @@ +/* + * Author: Jon Trulson + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include + +#include "hyld9767.h" + +using namespace std; +using namespace upm; + +HYLD9767::HYLD9767(int pin, float aref) : + m_aio(pin) +{ + m_aRes = m_aio.getBit(); + m_aref = aref; +} + +HYLD9767::~HYLD9767() +{ +} + +float HYLD9767::loudness() +{ + int val = m_aio.read(); + + return(val * (m_aref / float(1 << m_aRes))); +} diff --git a/src/hyld9767/hyld9767.h b/src/hyld9767/hyld9767.h new file mode 100644 index 00000000..c7e81b5e --- /dev/null +++ b/src/hyld9767/hyld9767.h @@ -0,0 +1,96 @@ +/* + * Author: Jon Trulson + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#pragma once + +#include +#include +#include + +// EZ series is volts/512 +#define HYLD9767_RES 512 + +namespace upm { + /** + * @brief DFRobot Loudness Sensor V2 + * @defgroup hyld9767 libupm-hyld9767 + * @ingroup dfrobot analog sound + */ + + /** + * @library hyld9767 + * @sensor hyld9767 + * @comname DFRobot Loudness Sensor V2 + * @altname HYLD9767 + * @type sound + * @man dfrobot + * @web http://www.dfrobot.com/index.php?route=product/product&product_id=83 + * @con analog + * + * @brief API for the DFRobot Loudness Sensor V2 + * + * This sensor returns an analog voltage proportional to the + * loudness of the ambient environment. It's output does not + * correspond to a particular sound level in decibels. + * + * This device uses an HYLD9767 electret microphone for sound input. + * + * This driver was developed using the DFRobot Loudness Sensor V2 + * + * @snippet hyld9767.cxx Interesting + */ + + class HYLD9767 { + public: + + /** + * HYLD9767 constructor + * + * @param pin Analog pin to use + * @param aref Analog reference voltage; default is 5.0 V + */ + HYLD9767(int pin, float aref=5.0); + + /** + * HYLD9767 destructor + */ + ~HYLD9767(); + + /** + * Returns the voltage detected on the analog pin + * + * @return The detected voltage + */ + float loudness(); + + protected: + mraa::Aio m_aio; + + private: + float m_aref; + // ADC resolution + int m_aRes; + }; +} + + diff --git a/src/hyld9767/javaupm_hyld9767.i b/src/hyld9767/javaupm_hyld9767.i new file mode 100644 index 00000000..b06bec0a --- /dev/null +++ b/src/hyld9767/javaupm_hyld9767.i @@ -0,0 +1,8 @@ +%module javaupm_hyld9767 +%include "../upm.i" + +%{ + #include "hyld9767.h" +%} + +%include "hyld9767.h" diff --git a/src/hyld9767/jsupm_hyld9767.i b/src/hyld9767/jsupm_hyld9767.i new file mode 100644 index 00000000..c9817309 --- /dev/null +++ b/src/hyld9767/jsupm_hyld9767.i @@ -0,0 +1,8 @@ +%module jsupm_hyld9767 +%include "../upm.i" + +%{ + #include "hyld9767.h" +%} + +%include "hyld9767.h" diff --git a/src/hyld9767/pyupm_hyld9767.i b/src/hyld9767/pyupm_hyld9767.i new file mode 100644 index 00000000..56f3e7c1 --- /dev/null +++ b/src/hyld9767/pyupm_hyld9767.i @@ -0,0 +1,9 @@ +%module pyupm_hyld9767 +%include "../upm.i" + +%feature("autodoc", "3"); + +%include "hyld9767.h" +%{ + #include "hyld9767.h" +%} diff --git a/src/upm.h b/src/upm.h index 5d94795b..03da7040 100644 --- a/src/upm.h +++ b/src/upm.h @@ -278,6 +278,12 @@ * @ingroup byman */ +/** + * @brief DFRobot + * @defgroup dfrobot DFRobot + * @ingroup byman + */ + /** * @brief EpicTinker * @defgroup epict EpicTinker @@ -358,4 +364,4 @@ * @brief Robotics Kit - Sensors for your robot * @defgroup robok Robotics Kit * @ingroup bykit - */ \ No newline at end of file + */