From cebc339d91ed566f5a5c762c38217b475eedf93a Mon Sep 17 00:00:00 2001 From: Mihai Tudor Panu Date: Thu, 6 Nov 2014 10:24:56 -0800 Subject: [PATCH] grove: sliding potentiometer Signed-off-by: Mihai Tudor Panu Signed-off-by: Brendan Le Foll --- docs/images/groveslide.jpeg | Bin 0 -> 8936 bytes examples/CMakeLists.txt | 4 +++ examples/groveslide.cxx | 50 ++++++++++++++++++++++++++++++ examples/javascript/groveslide.js | 42 +++++++++++++++++++++++++ examples/python/groveslide.py | 39 +++++++++++++++++++++++ src/grove/grove.cxx | 33 ++++++++++++++++++++ src/grove/grove.h | 47 ++++++++++++++++++++++++++++ 7 files changed, 215 insertions(+) create mode 100644 docs/images/groveslide.jpeg create mode 100644 examples/groveslide.cxx create mode 100644 examples/javascript/groveslide.js create mode 100644 examples/python/groveslide.py diff --git a/docs/images/groveslide.jpeg b/docs/images/groveslide.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..70fb82d8c78e765f1722b8250d15d015f62dd71f GIT binary patch literal 8936 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 literal 0 HcmV?d00001 diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 185c6e3e..f021c46b 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,6 +1,8 @@ add_executable (hmc5883l-example hmc5883l.cxx) add_executable (groveled-example groveled.cxx) add_executable (grovetemp-example grovetemp.cxx) +add_executable (groverotary-example groverotary.cxx) +add_executable (groveslide-example groveslide.cxx) add_executable (lcm-lcd-example lcm-lcd.cxx) add_executable (rgb-lcd-example rgb-lcd.cxx) add_executable (buzzer-sound-example buzzer-sound.cxx) @@ -77,6 +79,8 @@ include_directories (${PROJECT_SOURCE_DIR}/src/tsl2561) target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (grovetemp-example grove ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (groverotary-example grove ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (groveslide-example grove ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (lcm-lcd-example i2clcd ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (rgb-lcd-example i2clcd ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (buzzer-sound-example buzzer ${CMAKE_THREAD_LIBS_INIT}) diff --git a/examples/groveslide.cxx b/examples/groveslide.cxx new file mode 100644 index 00000000..acc959ee --- /dev/null +++ b/examples/groveslide.cxx @@ -0,0 +1,50 @@ +/* + * Author: Mihai Tudor Panu + * Copyright (c) 2014 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 "grove.h" + +using namespace std; + +int main () +{ +//! [Interesting] + upm::GroveSlide* slide = new upm::GroveSlide(0); // Instantiate new grove slide potentiometer on analog pin A0 + + cout << slide->name() << endl; + + while(true) { + float adc_value = slide->raw_value(); // Read raw value + float volts = slide->voltage_value(); // Read voltage, board reference set at 5.0V + fprintf(stdout, "%4d = %.2f V\n", (uint16_t)adc_value, volts); + + usleep(2500000); // Sleep for 2.5s + } +//! [Interesting] + delete slide; + return 0; +} diff --git a/examples/javascript/groveslide.js b/examples/javascript/groveslide.js new file mode 100644 index 00000000..562bfc4b --- /dev/null +++ b/examples/javascript/groveslide.js @@ -0,0 +1,42 @@ +/* + * Author: Mihai Tudor Panu + * Copyright (c) 2014 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 upm_grove = require('jsupm_grove'); + +//setup access analog input Analog pin #0 (A0) +var groveSlide = new upm_grove.GroveSlide(0); + +loop(); + +function loop() +{ + var raw = groveSlide.raw_value(); + var volts = groveSlide.voltage_value(); + + //write the slider values to the console + console.log("Slider Value: " + raw + " = " + volts.toFixed(2) + " V"); + + //wait 2 s then call function again + setTimeout(loop, 2000); +} diff --git a/examples/python/groveslide.py b/examples/python/groveslide.py new file mode 100644 index 00000000..69a1f0a7 --- /dev/null +++ b/examples/python/groveslide.py @@ -0,0 +1,39 @@ +# Author: Mihai Tudor Panu +# Copyright (c) 2014 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. + +from time import sleep +import pyupm_grove as grove + +# New Grove Slider on AIO pin 0 +slider = grove.GroveSlide(0) + +# Loop indefinitely +while True: + + # Read values + raw = slider.raw_value() + volts = slider.voltage_value() + + print "Slider value: ", raw , " = %.2f" % volts , " V" + + # Sleep for 2.5 s + sleep(2.5) diff --git a/src/grove/grove.cxx b/src/grove/grove.cxx index 199aa6b6..e48ba1ba 100644 --- a/src/grove/grove.cxx +++ b/src/grove/grove.cxx @@ -160,3 +160,36 @@ float GroveRotary::rel_rad() { return GroveRotary::rel_deg() * M_PI / 180.0; } + +//// GroveSlide //// + +GroveSlide::GroveSlide(unsigned int pin, float ref_voltage) +{ + mraa_init(); + m_aio = mraa_aio_init(pin); + m_ref_voltage = ref_voltage; + m_name = "Slide Potentiometer"; +} + +GroveSlide::~GroveSlide() +{ + mraa_aio_close(m_aio); +} + +float GroveSlide::raw_value() +{ + return (float) mraa_aio_read(m_aio); +} + +float GroveSlide::voltage_value() +{ + // conversion to Volts + float a = GroveSlide::raw_value(); + a = m_ref_voltage * a / 1023.0 ; + return a; +} + +float GroveSlide::ref_voltage() +{ + return m_ref_voltage; +} diff --git a/src/grove/grove.h b/src/grove/grove.h index 2996b360..cbaa5ef8 100644 --- a/src/grove/grove.h +++ b/src/grove/grove.h @@ -200,4 +200,51 @@ class GroveRotary: public Grove { static const int m_max_angle = 300; }; +/** + * @brief C++ API for Grove Slide Potentiometer + * + * Very basic UPM module for Grove slide potentiometer on analog, + * returns either raw value or scaled voltage value. + * + * @ingroup grove analog + * @snippet groveslide.cxx Interesting + * @image html groveslide.jpeg + */ +class GroveSlide: public Grove { + public: + /** + * Grove analog slide potentiometer constructor + * + * @param pin number of analog pin to use + * + * @param ref_voltage the reference voltage the board is set to as float, e.g. 3.3 or 5.0 (default) + */ + GroveSlide(unsigned int pin, float ref_voltage = 5.0); + /** + * GroveSlide Destructor + */ + ~GroveSlide(); + /** + * Get raw value from AIO pin + * + * @return the raw value from the ADC + */ + float raw_value(); + /** + * Get the voltage value from the pin + * + * @return the voltage reading based on the reference voltage + */ + float voltage_value(); + /** + * Get the board's reference voltage passed on object initialization + * + * @return the reference voltage the class was set for + */ + float ref_voltage(); + private: + mraa_aio_context m_aio; + float m_ref_voltage; +}; + }