diff --git a/examples/c++/CMakeLists.txt b/examples/c++/CMakeLists.txt index 9976d25d..93dd8564 100644 --- a/examples/c++/CMakeLists.txt +++ b/examples/c++/CMakeLists.txt @@ -128,6 +128,7 @@ add_executable (rgbringcoder-example rgbringcoder.cxx) add_executable (hp20x-example hp20x.cxx) add_executable (pn532-example pn532.cxx) add_executable (pn532-writeurl-example pn532-writeurl.cxx) +add_executable (sainsmartks-example sainsmartks.cxx) include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) include_directories (${PROJECT_SOURCE_DIR}/src/grove) @@ -362,3 +363,4 @@ target_link_libraries (rgbringcoder-example rgbringcoder ${CMAKE_THREAD_LIBS_INI target_link_libraries (hp20x-example hp20x ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (pn532-example pn532 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (pn532-writeurl-example pn532 ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (sainsmartks-example i2clcd ${CMAKE_THREAD_LIBS_INIT}) diff --git a/examples/c++/sainsmartks.cxx b/examples/c++/sainsmartks.cxx new file mode 100644 index 00000000..19c8704c --- /dev/null +++ b/examples/c++/sainsmartks.cxx @@ -0,0 +1,66 @@ +/* + * 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 "sainsmartks.h" + +using namespace std; + +int shouldRun = true; + +void sig_handler(int signo) +{ + if (signo == SIGINT) + shouldRun = false; +} + + +int main(int argc, char **argv) +{ + signal(SIGINT, sig_handler); + +//! [Interesting] + // use default pins + upm::SAINSMARTKS* lcd = new upm::SAINSMARTKS(); + lcd->setCursor(0,0); + lcd->write("Sainsmart KS"); + lcd->setCursor(1,2); + lcd->write("Hello World"); + + // output current key value every second. + while (shouldRun) + { + cout << "Button value: " << lcd->getRawKeyValue() << endl; + sleep(1); + } + +//! [Interesting] + + delete lcd; + + return 0; +} diff --git a/examples/javascript/sainsmartks.js b/examples/javascript/sainsmartks.js new file mode 100644 index 00000000..f81168fc --- /dev/null +++ b/examples/javascript/sainsmartks.js @@ -0,0 +1,53 @@ +/*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 sainsmartObj = require('jsupm_i2clcd'); + +// Instantiate a Sainsmart LCD Keypad Shield using default pins +var lcd = new sainsmartObj.SAINSMARTKS(); + +lcd.setCursor(0,0); +lcd.write("Sainsmart KS"); +lcd.setCursor(1,2); +lcd.write("Hello World"); + +// output current key value every second. +setInterval(function() +{ + console.log("Button value: " + lcd.getRawKeyValue()); +}, 1000); + +// exit on ^C +process.on('SIGINT', function() +{ + lcd = null; + sainsmartObj.cleanUp(); + sainsmartObj = null; + console.log("Exiting."); + process.exit(0); +}); + diff --git a/examples/python/sainsmartks.py b/examples/python/sainsmartks.py new file mode 100644 index 00000000..7763de9b --- /dev/null +++ b/examples/python/sainsmartks.py @@ -0,0 +1,54 @@ +#!/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_i2clcd as sainsmartObj + +## Exit handlers ## +# This 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, +# including functions from ringCoder +def exitHandler(): + print "Exiting" + sys.exit(0) + +# Register exit handlers +atexit.register(exitHandler) +signal.signal(signal.SIGINT, SIGINTHandler) + +# Instantiate a Sainsmart LCD Keypad Shield using default pins +lcd = sainsmartObj.SAINSMARTKS() + +lcd.setCursor(0,0) +lcd.write("Sainsmart KS") +lcd.setCursor(1,2) +lcd.write("Hello World") + +# output current key value every second. +while(1): + print "Button value: ", lcd.getRawKeyValue() + time.sleep(1) + diff --git a/src/lcd/CMakeLists.txt b/src/lcd/CMakeLists.txt index f27b55a7..17d1d28a 100644 --- a/src/lcd/CMakeLists.txt +++ b/src/lcd/CMakeLists.txt @@ -1,5 +1,5 @@ set (libname "i2clcd") set (libdescription "upm lcd/oled displays") -set (module_src lcd.cxx lcm1602.cxx jhd1313m1.cxx ssd1308.cxx ssd1327.cxx) -set (module_h lcd.h lcm1602.h jhd1313m1.h ssd1308.h ssd1327.h ssd.h) +set (module_src lcd.cxx lcm1602.cxx jhd1313m1.cxx ssd1308.cxx ssd1327.cxx sainsmartks.cxx) +set (module_h lcd.h lcm1602.h jhd1313m1.h ssd1308.h ssd1327.h ssd.h sainsmartks.h) upm_module_init() diff --git a/src/lcd/jsupm_i2clcd.i b/src/lcd/jsupm_i2clcd.i index af0b4d07..2d1b9d8f 100644 --- a/src/lcd/jsupm_i2clcd.i +++ b/src/lcd/jsupm_i2clcd.i @@ -33,3 +33,8 @@ %{ #include "ssd1308.h" %} + +%include "sainsmartks.h" +%{ + #include "sainsmartks.h" +%} diff --git a/src/lcd/pyupm_i2clcd.i b/src/lcd/pyupm_i2clcd.i index 9e19722f..603e067a 100644 --- a/src/lcd/pyupm_i2clcd.i +++ b/src/lcd/pyupm_i2clcd.i @@ -36,3 +36,8 @@ %{ #include "ssd1308.h" %} + +%include "sainsmartks.h" +%{ + #include "sainsmartks.h" +%} diff --git a/src/lcd/sainsmartks.cxx b/src/lcd/sainsmartks.cxx new file mode 100644 index 00000000..5c1eb992 --- /dev/null +++ b/src/lcd/sainsmartks.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 + +#include "sainsmartks.h" + +using namespace upm; + +SAINSMARTKS::SAINSMARTKS(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t keypad) + : Lcm1602(rs, enable, d0, d1, d2, d3), + m_aioKeypad(keypad) +{ + m_name = "Sainsmart LCD Keypad Shield"; +} + +SAINSMARTKS::~SAINSMARTKS() +{ +} + +float SAINSMARTKS::getRawKeyValue() +{ + return m_aioKeypad.readFloat(); +} diff --git a/src/lcd/sainsmartks.h b/src/lcd/sainsmartks.h new file mode 100644 index 00000000..dd984319 --- /dev/null +++ b/src/lcd/sainsmartks.h @@ -0,0 +1,88 @@ +/* + * 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 "lcm1602.h" + +namespace upm +{ + /** + * @library i2clcd + * @sensor sainsmartks + * @comname SainSmart LCD Keypad Shield + * @type display + * @man sainsmart + * @web http://www.sainsmart.com/sainsmart-1602-lcd-keypad-shield-for-arduino-duemilanove-uno-mega2560-mega1280.html + * @con gpio analog + * + * @brief API for Sainsmart LCD Keypad Shield + * + * The Sainsmart LCD Keypad Shield uses 6 digital outputs and 1 + * analog input (for the keypad). The outputs are used to drive an + * attached LCM1602 LCD controller. + * + * @snippet sainsmartks.cxx Interesting + */ + class SAINSMARTKS : public Lcm1602 + { + public: + /** + * SAINSMARTKS constructor + * + * As this is a shield, you will not likely have any choice over + * the pins that are used. For this reason, we provide defaults + * for all of them -- of course they can be changed if your device + * is different. + * + * @param rs register select pin + * @param enable enable pin + * @param d0 data 0 pin + * @param d1 data 1 pin + * @param d2 data 2 pin + * @param d3 data 3 pin + * @param keypad analog pin of the keypad + */ + SAINSMARTKS(uint8_t rs=8, uint8_t enable=9, + uint8_t d0=4, uint8_t d1=5, uint8_t d2=6, uint8_t d3=7, + uint8_t keypad=0); + /** + * SAINSMARTKS destructor + */ + ~SAINSMARTKS(); + + /** + * returns the floating point representation of the key that is + * being pushed. Each key produces a different value between 0.0 + * and 1.0, and only one key can be read at a time. + * + * @return the floating point value representing a key + */ + float getRawKeyValue(); + + private: + mraa::Aio m_aioKeypad; + }; +}