diff --git a/examples/c++/CMakeLists.txt b/examples/c++/CMakeLists.txt index d645ee05..f621286e 100644 --- a/examples/c++/CMakeLists.txt +++ b/examples/c++/CMakeLists.txt @@ -59,7 +59,7 @@ add_executable (enc03r-example enc03r.cxx) add_executable (adc121c021-example adc121c021.cxx) add_executable (ds1307-example ds1307.cxx) add_executable (a110x-example a110x.cxx) -add_executable (gp2y0a21yk-example gp2y0a21yk.cxx) +add_executable (gp2y0a-example gp2y0a.cxx) add_executable (grovemoisture-example grovemoisture.cxx) add_executable (groveehr-example groveehr.cxx) add_executable (ta12200-example ta12200.cxx) @@ -151,7 +151,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/enc03r) include_directories (${PROJECT_SOURCE_DIR}/src/adc121c021) include_directories (${PROJECT_SOURCE_DIR}/src/ds1307) include_directories (${PROJECT_SOURCE_DIR}/src/a110x) -include_directories (${PROJECT_SOURCE_DIR}/src/gp2y0a21yk) +include_directories (${PROJECT_SOURCE_DIR}/src/gp2y0a) include_directories (${PROJECT_SOURCE_DIR}/src/grovemoisture) include_directories (${PROJECT_SOURCE_DIR}/src/groveehr) include_directories (${PROJECT_SOURCE_DIR}/src/ta12200) @@ -257,7 +257,7 @@ target_link_libraries (enc03r-example enc03r ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (adc121c021-example adc121c021 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (ds1307-example ds1307 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (a110x-example a110x ${CMAKE_THREAD_LIBS_INIT}) -target_link_libraries (gp2y0a21yk-example gp2y0a21yk ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (gp2y0a-example gp2y0a ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (grovemoisture-example grovemoisture ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (groveehr-example groveehr ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (ta12200-example ta12200 ${CMAKE_THREAD_LIBS_INIT}) diff --git a/examples/c++/gp2y0a21yk.cxx b/examples/c++/gp2y0a.cxx similarity index 81% rename from examples/c++/gp2y0a21yk.cxx rename to examples/c++/gp2y0a.cxx index 8469cbc0..0111b179 100644 --- a/examples/c++/gp2y0a21yk.cxx +++ b/examples/c++/gp2y0a.cxx @@ -25,14 +25,14 @@ #include #include #include -#include "gp2y0a21yk.h" +#include "gp2y0a.h" using namespace std; bool shouldRun = true; // analog voltage, usually 3.3 or 5.0 -#define GP2Y0A21YK_AREF 5.0 +#define GP2Y0A_AREF 5.0 #define SAMPLES_PER_QUERY 20 void sig_handler(int signo) @@ -46,21 +46,21 @@ int main() signal(SIGINT, sig_handler); //! [Interesting] - // Note, for the Grove version of this sensor, due to the way it is wired, - // you need to plug this into the A0 port, where it will use the available - // A1 pin for data. + // Note, for the Grove 80cm version of this sensor, due to the way + // it is wired, you need to plug this into the A0 port, where it + // will use the available A1 pin for data. - // Instantiate a GP2Y0A21YK on analog pin A1 - upm::GP2Y0A21YK *volts = new upm::GP2Y0A21YK(1); + // Instantiate a GP2Y0A on analog pin A1 + upm::GP2Y0A *volts = new upm::GP2Y0A(1); // The higher the voltage (closer to AREF) the closer the object is. NOTE: // the measured voltage will probably not exceed 3.3 volts. // Every second, print the averaged voltage value (averaged over 20 samples). while (shouldRun) { - cout << "AREF: " << GP2Y0A21YK_AREF + cout << "AREF: " << GP2Y0A_AREF << ", Voltage value (higher means closer): " - << volts->value(GP2Y0A21YK_AREF, SAMPLES_PER_QUERY) << endl; + << volts->value(GP2Y0A_AREF, SAMPLES_PER_QUERY) << endl; sleep(1); } diff --git a/examples/javascript/gp2y0a21yk.js b/examples/javascript/gp2y0a.js similarity index 73% rename from examples/javascript/gp2y0a21yk.js rename to examples/javascript/gp2y0a.js index 54e0dff9..3c0bc7b2 100644 --- a/examples/javascript/gp2y0a21yk.js +++ b/examples/javascript/gp2y0a.js @@ -1,6 +1,5 @@ /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ -/*global */ /* * Author: Zion Orent * Copyright (c) 2014 Intel Corporation. @@ -24,33 +23,38 @@ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -// JavaScript file for GP2Y0A21YK 80cm IR Proximity Sensor +// JavaScript file for GP2Y0A family of IR Proximity Sensors // analog voltage, usually 3.3 or 5.0 -var GP2Y0A21YK_AREF = 5.0; +var GP2Y0A_AREF = 5.0; var SAMPLES_PER_QUERY = 20; -var IRProximity = require('jsupm_gp2y0a21yk'); +var IRProximity = require('jsupm_gp2y0a'); -// Note, for the Grove version of this sensor, due to the way it is wired, +// Note, for the Grove 80cm version of this sensor, due to the way it is wired, // you need to plug this into the A0 port, where it will use the available // A1 pin for data. -// Instantiate a GP2Y0A21YK on analog pin A1 -var myVolts = new IRProximity.GP2Y0A21YK(1); +// Instantiate a GP2Y0A on analog pin A1 +var myVolts = new IRProximity.GP2Y0A(1); // The higher the voltage (closer to AREF) the closer the object is. // NOTE: The measured voltage will probably not exceed 3.3 volts. -// Every second, print the averaged voltage value (averaged over 20 samples). -setInterval(function() +// Every second, print the averaged voltage value +// (averaged over 20 samples). +var myInterval = setInterval(function() { - console.log("AREF: " + GP2Y0A21YK_AREF + + console.log("AREF: " + GP2Y0A_AREF + ", Voltage value (higher means closer): " + - myVolts.value(GP2Y0A21YK_AREF, SAMPLES_PER_QUERY)); + myVolts.value(GP2Y0A_AREF, SAMPLES_PER_QUERY)); }, 1000); // Print message when exiting process.on('SIGINT', function() { + clearInterval(myInterval); + myVolts = null; + IRProximity.cleanUp(); + IRProximity = null; console.log("Exiting..."); process.exit(0); }); diff --git a/examples/python/gp2y0a.py b/examples/python/gp2y0a.py new file mode 100644 index 00000000..f736d2cb --- /dev/null +++ b/examples/python/gp2y0a.py @@ -0,0 +1,62 @@ +#!/usr/bin/python +# Author: Zion Orent +# 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_gp2y0a as upmGp2y0a + +# Note, for the Grove 80cm version of this sensor, due to the way it is wired, +# you need to plug this into the A0 port, where it will use the available +# A1 pin for data. +# Instantiate a GP2Y0A on analog pin A1 +myIRProximity = upmGp2y0a.GP2Y0A(1) + + +## Exit handlers ## +# This stops python from printing a stacktrace when you hit control-C +def SIGINTHandler(signum, frame): + raise SystemExit + +# This lets you run code on exit, +# including functions from myIRProximity +def exitHandler(): + print "Exiting" + sys.exit(0) + +# Register exit handlers +atexit.register(exitHandler) +signal.signal(signal.SIGINT, SIGINTHandler) + + +# analog voltage, usually 3.3 or 5.0 +GP2Y0A_AREF = 5.0; +SAMPLES_PER_QUERY = 20; + +# The higher the voltage (closer to AREF) the closer the object is. +# NOTE: The measured voltage will probably not exceed 3.3 volts. +# Every second, print the averaged voltage value +# (averaged over 20 samples). +while (1): + print "AREF: {0}, Voltage value (higher means closer): {1}".format( + GP2Y0A_AREF, + myIRProximity.value(GP2Y0A_AREF, SAMPLES_PER_QUERY)) + time.sleep(1) diff --git a/src/gp2y0a/CMakeLists.txt b/src/gp2y0a/CMakeLists.txt new file mode 100644 index 00000000..ddb50a55 --- /dev/null +++ b/src/gp2y0a/CMakeLists.txt @@ -0,0 +1,5 @@ +set (libname "gp2y0a") +set (libdescription "upm gp2y0a family of IR distance detectors") +set (module_src ${libname}.cxx) +set (module_h ${libname}.h) +upm_module_init() diff --git a/src/gp2y0a21yk/gp2y0a21yk.cxx b/src/gp2y0a/gp2y0a.cxx similarity index 76% rename from src/gp2y0a21yk/gp2y0a21yk.cxx rename to src/gp2y0a/gp2y0a.cxx index cd15c26f..6943d0b9 100644 --- a/src/gp2y0a21yk/gp2y0a21yk.cxx +++ b/src/gp2y0a/gp2y0a.cxx @@ -1,6 +1,6 @@ /* * Author: Jon Trulson - * Copyright (c) 2014 Intel Corporation. + * 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 @@ -24,23 +24,29 @@ #include -#include "gp2y0a21yk.h" +#include "gp2y0a.h" +using namespace std; using namespace upm; -GP2Y0A21YK::GP2Y0A21YK(int pin) +GP2Y0A::GP2Y0A(int pin) { - mraa_init(); + if (!(m_aio = mraa_aio_init(pin))) + { + cerr << __FUNCTION__ << "mraa_aio_init() failed." << endl; + return; + } - m_aio = mraa_aio_init(pin); + // get the ADC resolution + m_aRes = (1 << mraa_aio_get_bit(m_aio)); } -GP2Y0A21YK::~GP2Y0A21YK() +GP2Y0A::~GP2Y0A() { mraa_aio_close(m_aio); } -float GP2Y0A21YK::value(float aref, uint8_t samples) +float GP2Y0A::value(float aref, uint8_t samples) { int val; int sum = 0; @@ -52,7 +58,7 @@ float GP2Y0A21YK::value(float aref, uint8_t samples) } val = sum / samples; - float volts = (float)val * aref / 1024.0; + float volts = float(val) * aref / float(m_aRes); return volts; } diff --git a/src/gp2y0a21yk/gp2y0a21yk.h b/src/gp2y0a/gp2y0a.h similarity index 68% rename from src/gp2y0a21yk/gp2y0a21yk.h rename to src/gp2y0a/gp2y0a.h index b8c8a351..1f5f137b 100644 --- a/src/gp2y0a21yk/gp2y0a21yk.h +++ b/src/gp2y0a/gp2y0a.h @@ -1,6 +1,6 @@ /* * Author: Jon Trulson - * Copyright (c) 2014 Intel Corporation. + * 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 @@ -23,36 +23,49 @@ */ #pragma once +#include #include #include namespace upm { + /** + * @brief UPM library for the GP2Y0A family of IR Proximity Sensors + * @defgroup gp2y0a libupm-gp2y0a + * @ingroup seeed analog light + */ /** - * @brief C++ API for the GP2Y0A21YK 80cm IR Proximity Sensor + * @sensor gp2y0a + * @library gp2y0a + * @name GP2Y0A family of IR Proximity Sensors + * @category light + * @manufacturer seeed + * @connection analog * - * UPM module for the GP2Y0A21YK 80cm IR Proximity Sensor. - * This sensor returns an analog voltage corresponding to the distance - * of an object from the sensor. The object may be 10 cm (4 inches) - * to 80 cm (30 inches) away. The voltage is low when objects + * @brief C++ API for the GP2Y0A family of IR Proximity Sensors + * + * This sensor family returns an analog voltage corresponding to the distance + * of an object from the sensor. The voltage is lower when objects * are far away; the voltage increases as objects get closer - * to the sensor. + * to the sensor. * - * @ingroup analog - * @snippet gp2y0a21yk.cxx Interesting + * @snippet gp2y0a.cxx Interesting */ - class GP2Y0A21YK { + class GP2Y0A { public: + /** - * GP2Y0A21YK sensor constructor + * GP2Y0A sensor constructor * * @param pin analog pin to use */ - GP2Y0A21YK(int pin); + GP2Y0A(int pin); + /** - * GP2Y0A21YK Destructor + * GP2Y0A Destructor */ - ~GP2Y0A21YK(); + ~GP2Y0A(); + /** * Get the averaged voltage value from the sensor * @@ -64,6 +77,8 @@ namespace upm { private: mraa_aio_context m_aio; + // ADC resolution + int m_aRes; }; } diff --git a/src/gp2y0a/jsupm_gp2y0a.i b/src/gp2y0a/jsupm_gp2y0a.i new file mode 100644 index 00000000..95eaad2d --- /dev/null +++ b/src/gp2y0a/jsupm_gp2y0a.i @@ -0,0 +1,8 @@ +%module jsupm_gp2y0a +%include "../upm.i" + +%{ + #include "gp2y0a.h" +%} + +%include "gp2y0a.h" diff --git a/src/gp2y0a/pyupm_gp2y0a.i b/src/gp2y0a/pyupm_gp2y0a.i new file mode 100644 index 00000000..aebb7b39 --- /dev/null +++ b/src/gp2y0a/pyupm_gp2y0a.i @@ -0,0 +1,9 @@ +%module pyupm_gp2y0a +%include "../upm.i" + +%feature("autodoc", "3"); + +%include "gp2y0a.h" +%{ + #include "gp2y0a.h" +%} diff --git a/src/gp2y0a21yk/CMakeLists.txt b/src/gp2y0a21yk/CMakeLists.txt deleted file mode 100644 index d2946cab..00000000 --- a/src/gp2y0a21yk/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -set (libname "gp2y0a21yk") -set (libdescription "upm gp2y0a21yk 80cm IR proximity sensor module") -set (module_src ${libname}.cxx) -set (module_h ${libname}.h) -upm_module_init() diff --git a/src/gp2y0a21yk/jsupm_gp2y0a21yk.i b/src/gp2y0a21yk/jsupm_gp2y0a21yk.i deleted file mode 100644 index f944f769..00000000 --- a/src/gp2y0a21yk/jsupm_gp2y0a21yk.i +++ /dev/null @@ -1,8 +0,0 @@ -%module jsupm_gp2y0a21yk -%include "../upm.i" - -%{ - #include "gp2y0a21yk.h" -%} - -%include "gp2y0a21yk.h" diff --git a/src/gp2y0a21yk/pyupm_gp2y0a21yk.i b/src/gp2y0a21yk/pyupm_gp2y0a21yk.i deleted file mode 100644 index 0037bf2b..00000000 --- a/src/gp2y0a21yk/pyupm_gp2y0a21yk.i +++ /dev/null @@ -1,9 +0,0 @@ -%module pyupm_gp2y0a21yk -%include "../upm.i" - -%feature("autodoc", "3"); - -%include "gp2y0a21yk.h" -%{ - #include "gp2y0a21yk.h" -%}