diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 909271c5..a68e7434 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -40,6 +40,7 @@ add_executable (mq9-example mq9.cxx) add_executable (tp401-example tp401.cxx) add_executable (tcs3414cs-example tcs3414cs.cxx) add_executable (th02-example th02.cxx) +add_executable (ttp223-example ttp223.cxx) add_executable (lsm303-example lsm303.cxx) add_executable (joystick12-example joystick12-example.cxx) add_executable (lol-example lol-example.cxx) @@ -79,6 +80,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/ecs1030) include_directories (${PROJECT_SOURCE_DIR}/src/gas) include_directories (${PROJECT_SOURCE_DIR}/src/tcs3414cs) include_directories (${PROJECT_SOURCE_DIR}/src/th02) +include_directories (${PROJECT_SOURCE_DIR}/src/ttp223) include_directories (${PROJECT_SOURCE_DIR}/src/lsm303) include_directories (${PROJECT_SOURCE_DIR}/src/joystick12) include_directories (${PROJECT_SOURCE_DIR}/src/lol) @@ -131,6 +133,7 @@ target_link_libraries (mq9-example gas ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (tp401-example gas ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (tcs3414cs-example tcs3414cs ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (th02-example th02 ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (ttp223-example ttp223 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (lsm303-example lsm303 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (joystick12-example joystick12 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (lol-example lol ${CMAKE_THREAD_LIBS_INIT}) diff --git a/examples/javascript/ttp223.js b/examples/javascript/ttp223.js new file mode 100644 index 00000000..88145566 --- /dev/null +++ b/examples/javascript/ttp223.js @@ -0,0 +1,40 @@ +/* + * 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 TTP223 touch sensor module +var sensorModule = require('jsupm_ttp223'); + +// Create the TTP223 touch sensor object using GPIO pin 0 +var touch = new sensorModule.TTP223(0); + +// Check whether or not a finger is near the touch sensor and +// print accordingly, waiting one second between readings +function readSensorValue() { + if ( touch.isPressed() ) { + console.log(touch.name() + " is pressed"); + } else { + console.log(touch.name() + " is not pressed"); + } +} +setInterval(readSensorValue, 1000); diff --git a/examples/python/ttp223.py b/examples/python/ttp223.py new file mode 100644 index 00000000..7d1c847e --- /dev/null +++ b/examples/python/ttp223.py @@ -0,0 +1,39 @@ +# 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_ttp223 as ttp223 + +# Create the TTP223 touch sensor object using GPIO pin 0 +touch = ttp223.TTP223(0) + +# Check whether or not a finger is near the touch sensor and +# print accordingly, waiting one second between readings +while 1: + if touch.isPressed(): + print touch.name(), 'is pressed' + else: + print touch.name(), 'is not pressed' + time.sleep(1) + +# Delete the touch sensor object +del touch diff --git a/examples/ttp223.cxx b/examples/ttp223.cxx new file mode 100644 index 00000000..1d155854 --- /dev/null +++ b/examples/ttp223.cxx @@ -0,0 +1,54 @@ +/* + * 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 "ttp223.h" + +int +main(int argc, char **argv) +{ + // This example uses GPIO 0 +//! [Interesting] + + // Create the TTP223 touch sensor object using GPIO pin 0 + upm::TTP223* touch = new upm::TTP223(0); + + // Check whether or not a finger is near the touch sensor and + // print accordingly, waiting one second between readings + while( 1 ) { + if ( touch->isPressed() ) { + std::cout << touch->name() << " is pressed" << std::endl; + } else { + std::cout << touch->name() << " is not pressed" << std::endl; + } + sleep(1); + } + + // Delete the touch sensor object + delete touch; +//! [Interesting] + + return 0; +} diff --git a/src/ttp223/CMakeLists.txt b/src/ttp223/CMakeLists.txt new file mode 100644 index 00000000..33341e13 --- /dev/null +++ b/src/ttp223/CMakeLists.txt @@ -0,0 +1,5 @@ +set (libname "ttp223") +set (libdescription "upm ttp223") +set (module_src ${libname}.cxx) +set (module_h ${libname}.h) +upm_module_init() diff --git a/src/ttp223/jsupm_ttp223.i b/src/ttp223/jsupm_ttp223.i new file mode 100644 index 00000000..f083dd8f --- /dev/null +++ b/src/ttp223/jsupm_ttp223.i @@ -0,0 +1,8 @@ +%module jsupm_ttp223 +%include "../upm.i" + +%{ + #include "ttp223.h" +%} + +%include "ttp223.h" diff --git a/src/ttp223/pyupm_ttp223.i b/src/ttp223/pyupm_ttp223.i new file mode 100644 index 00000000..7e018400 --- /dev/null +++ b/src/ttp223/pyupm_ttp223.i @@ -0,0 +1,10 @@ +%module pyupm_ttp223 +%include "../upm.i" + +%feature("autodoc", "3"); + +%include "ttp223.h" +%{ + #include "ttp223.h" +%} + diff --git a/src/ttp223/ttp223.cxx b/src/ttp223/ttp223.cxx new file mode 100644 index 00000000..a5928f18 --- /dev/null +++ b/src/ttp223/ttp223.cxx @@ -0,0 +1,52 @@ +/* + * 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 "ttp223.h" + +using namespace upm; + +TTP223::TTP223(unsigned int pin) { + // initialize gpio input + mraa_init(); + m_gpio = mraa_gpio_init(pin); + mraa_gpio_dir(m_gpio, MRAA_GPIO_IN); + m_name = "ttp223"; +} + +TTP223::~TTP223() { + // close gpio input + mraa_gpio_close(m_gpio); +} + +std::string TTP223::name() { + return m_name; +} + +int TTP223::value() { + return mraa_gpio_read(m_gpio); +} + +bool TTP223::isPressed() { + return this->value() == 1; +} diff --git a/src/ttp223/ttp223.h b/src/ttp223/ttp223.h new file mode 100644 index 00000000..23f47a1e --- /dev/null +++ b/src/ttp223/ttp223.h @@ -0,0 +1,88 @@ +/* + * 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. + */ +#pragma once + +#include +#include + +namespace upm { + +/** + * @brief TTP223 Touch Detector sensor library + * @defgroup ttp223 libupm-ttp223 + */ + +/** + * @brief C++ API for TTP223 touch detector-based sensors, + * such as the Grove Touch sensor + * + * This touch sensor detects when a finger is near the metallic pad + * by a change in capacitance. It can replace a more traditional push + * button. The touch sensor can still function when placed under a + * non-metallic surface like glass or plastic. + * + * @ingroup ttp223 gpio + * @snippet ttp223.cxx Interesting + */ +class TTP223 { + public: + /** + * TTP223 touch sensor constructor + * + * @param pin GPIO pin where sensor is connected + */ + TTP223(unsigned int pin); + + /** + * TTP223 destructor + */ + ~TTP223(); + + /** + * Return name of this sensor + * + * @return the name of this sensor + */ + std::string name(); + + /** + * Get value from GPIO pin + * + * @return the value from the GPIO pin + */ + int value(); + + /** + * Returns whether or not the touch sensor is being touched + * + * @return true if the touch sensor is being touched; false otherwise + */ + bool isPressed(); + + protected: + std::string m_name; //!< name of this sensor + mraa_gpio_context m_gpio; //!< GPIO pin +}; + +}