diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index eb98f259..c2b7957b 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,5 +1,6 @@ add_executable (hmc5883l-example hmc5883l.cxx) add_executable (groveled-example groveled.cxx) +add_executable (groverelay-example groverelay.cxx) add_executable (grovelight-example grovelight.cxx) add_executable (grovetemp-example grovetemp.cxx) add_executable (grovebutton-example grovebutton.cxx) @@ -95,6 +96,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/enc03r) target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (groverelay-example grove ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (grovelight-example grove ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (grovetemp-example grove ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (grovebutton-example grove ${CMAKE_THREAD_LIBS_INIT}) diff --git a/examples/groverelay.cxx b/examples/groverelay.cxx new file mode 100644 index 00000000..4366dd66 --- /dev/null +++ b/examples/groverelay.cxx @@ -0,0 +1,58 @@ +/* + * Author: Sarah Knepper + * 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 "grove.h" + +int +main(int argc, char **argv) +{ + // This example uses GPIO 0 +//! [Interesting] + + // Create the relay switch object using GPIO pin 0 + upm::GroveRelay* relay = new upm::GroveRelay(0); + + // Close and then open the relay switch 3 times, + // waiting one second each time. The LED on the relay switch + // will light up when the switch is on (closed). + // The switch will also make a noise between transitions. + for ( int i = 0; i < 3; i++ ) { + relay->on(); + if ( relay->isOn() ) + std::cout << relay->name() << " is on" << std::endl; + sleep(1); + relay->off(); + if ( relay->isOff() ) + std::cout << relay->name() << " is off" << std::endl; + sleep(1); + } + + // Delete the relay switch object + delete relay; +//! [Interesting] + + return 0; +} diff --git a/examples/javascript/groverelay.js b/examples/javascript/groverelay.js new file mode 100644 index 00000000..a8fefe7b --- /dev/null +++ b/examples/javascript/groverelay.js @@ -0,0 +1,49 @@ +/* + * Author: Sarah Knepper + * 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. + */ + +// Load Grove module +var groveSensor = require('jsupm_grove'); + +// Create the relay switch object using GPIO pin 0 +var relay = new groveSensor.GroveRelay(0); + +// Close and then open the relay switch 3 times, +// waiting one second each time. The LED on the relay switch +// will light up when the switch is on (closed). +// The switch will also make a noise between transitions. +var i = 0; +var waiting = setInterval(function() { + if ( i % 2 == 0 ) { + relay.on(); + if ( relay.isOn() ) + console.log(relay.name() + " is on"); + } else { + relay.off(); + if ( relay.isOff() ) + console.log(relay.name() + " is off"); + } + i++; + if ( i == 6) clearInterval(waiting); + }, 1000); + diff --git a/examples/python/groverelay.py b/examples/python/groverelay.py new file mode 100644 index 00000000..44f033fa --- /dev/null +++ b/examples/python/groverelay.py @@ -0,0 +1,44 @@ +# Author: Sarah Knepper +# 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 +import pyupm_grove as grove + +# Create the relay switch object using GPIO pin 0 +relay = grove.GroveRelay(0) + +# Close and then open the relay switch 3 times, +# waiting one second each time. The LED on the relay switch +# will light up when the switch is on (closed). +# The switch will also make a noise between transitions. +for i in range (0,3): + relay.on() + if relay.isOn(): + print relay.name(), 'is on' + time.sleep(1) + relay.off() + if relay.isOff(): + print relay.name(), 'is off' + time.sleep(1) + +# Delete the relay switch object +del relay diff --git a/src/grove/grove.cxx b/src/grove/grove.cxx index 254867ca..1a240866 100644 --- a/src/grove/grove.cxx +++ b/src/grove/grove.cxx @@ -64,6 +64,41 @@ mraa_result_t GroveLed::off() return write(0); } +//// GroveRelay //// + +GroveRelay::GroveRelay(unsigned int pin) +{ + mraa_init(); + m_gpio = mraa_gpio_init(pin); + mraa_gpio_dir(m_gpio, MRAA_GPIO_OUT); + m_name = "Relay Switch"; +} + +GroveRelay::~GroveRelay() +{ + mraa_gpio_close(m_gpio); +} + +mraa_result_t GroveRelay::on() +{ + return mraa_gpio_write(m_gpio, 1); +} + +mraa_result_t GroveRelay::off() +{ + return mraa_gpio_write(m_gpio, 0); +} + +bool GroveRelay::isOn() +{ + return mraa_gpio_read(m_gpio) == 1; +} + +bool GroveRelay::isOff() +{ + return mraa_gpio_read(m_gpio) == 0; +} + //// GroveTemp //// GroveTemp::GroveTemp(unsigned int pin) diff --git a/src/grove/grove.h b/src/grove/grove.h index c4c7155f..925d1d7c 100644 --- a/src/grove/grove.h +++ b/src/grove/grove.h @@ -99,6 +99,59 @@ class GroveLed: public Grove { mraa_gpio_context m_gpio; }; +/** + * @brief C++ API for Grove Relay + * + * UPM module for Grove relay switch. The Grove relay is a + * digital normally-open switch that uses low voltage or current to + * control a higher voltage and/or higher current. When closed, + * the indicator LED will light up and current is allowed to flow. + * + * @ingroup grove gpio + * @snippet groverelay.cxx Interesting + */ +class GroveRelay: public Grove { + public: + /** + * Grove relay constructor + * + * @param gpio pin to use + */ + GroveRelay(unsigned int pin); + /** + * Grove relay destructor + */ + ~GroveRelay(); + /** + * Set the relay switch to on (close). This allows current + * to flow and lights up the indicator LED. + * + * @return 0 on success; non-zero otherwise + */ + mraa_result_t on(); + /** + * Set the relay switch to off (open). This stops current + * from flowing and the indicator LED will not be lit. + * + * @return 0 on success; non-zero otherwise + */ + mraa_result_t off(); + /** + * Returns whether or not the relay switch is closed. + * + * @return true if the switch is on (closed); false otherwise + */ + bool isOn(); + /** + * Returns whether or not the relay switch is open. + * + * @return true if the switch is off (open); false otherwise + */ + bool isOff(); + private: + mraa_gpio_context m_gpio; +}; + /** * @brief C++ API for Grove temperature sensor *