diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index bfbbb2c7..c174d10f 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,8 +1,10 @@ add_executable (compass compass.cxx) add_executable (groveled groveled.cxx) +add_executable (grovetemp grovetemp.cxx) include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) include_directories (${PROJECT_SOURCE_DIR}/src/grove) target_link_libraries (compass hmc5883l) target_link_libraries (groveled grove) +target_link_libraries (grovetemp grove) diff --git a/examples/grovetemp.cxx b/examples/grovetemp.cxx new file mode 100644 index 00000000..3053ed1c --- /dev/null +++ b/examples/grovetemp.cxx @@ -0,0 +1,41 @@ +/* + * Author: Brendan Le Foll + * 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 "grove.h" + +int +main(int argc, char **argv) +{ + // Use i2c device 0 all the time + upm::GroveTemp* s = new upm::GroveTemp(0); + std::cout << s->name() << std::endl; + for (int i=0; i < 10; i++) { + std::cout << s->value() << std::endl; + sleep(1); + } + + return 0; +} diff --git a/src/grove/grove.cxx b/src/grove/grove.cxx index 13c71cc6..72be7072 100644 --- a/src/grove/grove.cxx +++ b/src/grove/grove.cxx @@ -22,10 +22,15 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include + #include "grove.h" +#include "math.h" using namespace upm; +//// GroveLed //// + GroveLed::GroveLed(int pin) { maa_init(); @@ -56,3 +61,30 @@ maa_result_t GroveLed::off() { return write(0); } + +//// GroveTemp //// + +GroveTemp::GroveTemp(unsigned int pin) +{ + maa_init(); + m_aio = maa_aio_init(pin); + m_name = "Temperature Sensor"; +} + +GroveTemp::~GroveTemp() +{ + maa_aio_close(m_aio); +} + +int GroveTemp::value () +{ + int a = maa_aio_read_u16(m_aio); + float r = (float)(1023-a)*10000/a; + float t = 1/(logf(r/10000)/3975 + 1/298.15)-273.15; + return (int) t; +} + +float GroveTemp::raw_value() +{ + return (float) maa_aio_read_u16(m_aio); +} diff --git a/src/grove/grove.h b/src/grove/grove.h index 5df27b8c..d573787b 100644 --- a/src/grove/grove.h +++ b/src/grove/grove.h @@ -24,6 +24,7 @@ #pragma once #include +#include #include namespace upm { @@ -47,7 +48,17 @@ class GroveLed: public Grove { maa_result_t off(); maa_result_t on(); private: - maa_gpio_context * m_gpio; + maa_gpio_context* m_gpio; +}; + +class GroveTemp: public Grove { + public: + GroveTemp(unsigned int pin); + ~GroveTemp(); + float raw_value(); + int value(); + private: + maa_aio_context* m_aio; }; }