Compare commits

..

176 Commits

Author SHA1 Message Date
5a15daab1c travis.yml: Install mraa to /usr
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-22 23:06:33 +00:00
8734767a5c cmake: disable TGZ from builds when IPK used
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-22 18:42:31 +00:00
b4535a6403 curieimu: Adds examples for both JS and Python that load MRAA Firmata subplatform
Signed-off-by: deadprogram <ron@hybridgroup.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-22 17:05:13 +00:00
3d37f957bf cmake: add workaround for cmake 2.7
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-22 17:05:13 +00:00
3722dfc780 cmake: Fix issues with node v4/v5
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-22 17:05:13 +00:00
b113a46813 .travis.yml: Make travis test node4/node5 and node0.12
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-22 17:05:13 +00:00
aa30b59e44 cmake: add BUILDPYTHON3 flag
Use the same methodology as in mraa, by default build for python2, if requested
use python3 for everything

Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-22 17:05:13 +00:00
159d2eee07 FindNode.cmake: Improve FindNode cmake module
Use mraa's FindNode since it's alot more robus and can handle NVM better

Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-21 17:32:23 +00:00
7fd9f0c508 curieimu: Add WIP for Python example
Signed-off-by: deadprogram <ron@hybridgroup.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-21 17:13:25 +00:00
3ca9bfe80f Updates implementation and examples to use dynamic-friendly interface
Signed-off-by: deadprogram <ron@hybridgroup.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-21 17:13:25 +00:00
90983fde9d Complete accel and gyro implementations for new dynamic friendly interface
Signed-off-by: deadprogram <ron@hybridgroup.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-21 17:13:25 +00:00
ee19daedee curieimu: modify calls to use update methodology to fix python/java/js API
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-18 14:56:23 +00:00
61dbfe4f23 curieimu: Make compilation dependant on mraa_firmata_init
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-18 12:40:32 +00:00
224a915538 curieimu: Plugin to interface with the arduino101's IMU
Internal sensor onboard the Curie/Arduino101 can be accessed via Firmata using
this plugin. You will need mraa compiled with -DFIRMATA=ON for this to work and
be using Firmata with the CurieIMU firmata extension for ExtensibleFirmata

Signed-off-by: Ron Evans <ron@hybridgroup.com>
Signed-off-by: Justin Zemlyansky <jlstigman@live.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2016-03-18 12:40:32 +00:00
1aa445b74e Java:Added example for Flex Sensor and added newly added sensors to the CMakeLists.txt
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2016-03-10 15:55:21 -08:00
e6ad752a2c Example: gp2y0a, Grove - 80 cm Infrared Proximity Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2016-03-08 15:12:52 -08:00
144937995c ssd1351: Initial implementation
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-03-04 08:19:56 -08:00
0b49cbab9b Java: Exampled added for heart rate monitor and Grove temp and humidity sensor (high accuracy)
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2016-03-03 11:21:05 -08:00
f1f9d9ec2e upm: version 0.5.1
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 18:08:35 -08:00
74d625c797 a110x: trigger ISR on both edges
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 18:07:28 -08:00
2695ef3361 itg3200: fixed calibration off by one
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 18:00:45 -08:00
a9548f3ff4 adafruitms1438: stop RPATH being added in CMakeLists.txt
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 17:23:32 -08:00
3ed0e14487 h3lis331dl: Fix sensor init
Signed-off-by: Alexandru Palalau <alexandru.palalau@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 15:38:52 -08:00
1a80400fa9 my9221: java: CMakelists: remove MY9221* add GroveLEDBar
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:52:32 -08:00
9845b24dea my9221: java: rename example from MY9221_ledbarSample to GroveLEDBar
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:51:50 -08:00
af7f544387 my9221: fixup groveledbar java example
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:51:07 -08:00
ac5c20afad my9221: remove duplicate MY9221Sample.java example
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:50:26 -08:00
9f3557aa20 my9221: remove old grovecircularled driver
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:49:46 -08:00
d112266170 my9221: python: rename example from my9221 to groveledbar
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:49:00 -08:00
94fdd86896 my9221: fixup groveledbar python example
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:48:18 -08:00
c0c99fd87a my9221: fixup grovecircularled python example
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:47:37 -08:00
684919f069 my9221: fixup grovecircularled JS example
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:46:56 -08:00
37add7eb33 my9221: JS: rename example from my9221 to groveledbar
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:46:16 -08:00
e17dc9a22e my9221: fixup JS example and interface files
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:45:32 -08:00
84c3445412 my9221: fixup example CMakelists after upstream rebase
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:44:48 -08:00
6b2850557e my9221: remove old ledbar example
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:44:04 -08:00
f94ee6a388 my9221: rename my9221-updown example to groveledbar
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:43:18 -08:00
cbb289438e my9221: rewrite to include new functionality and serve as a base class
This driver has been rewritten to support some new functionality, be
more generic and fix up some old bugs.  Multiple MY9221's can now be
chained together and are supported by the MY9221 base class.

In addition, the Grove LED Bar and Grove Circular LED drivers have
been incoporated into the my9221 library, using the new MY9221 class
as their base class.  Examples have been fixed to work with the new
library, and renamed where needed.

The current grovecircularled driver has been removed as it is now a
part of the my9221 library.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 11:42:21 -08:00
71b0791239 java: Corrected Java button sample and added it to auto build examples
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 10:56:50 -08:00
757a2ce342 docs: Modified building_java_bindings guide to use Runnables instead of IsrCallbacks
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 10:49:35 -08:00
3fab5625c7 java: Updated install path for Java library file
Signed-off-by: Andrei Vasiliu <andrei.vasiliu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-16 10:35:45 -08:00
5324808e82 docs: minor doc, image and example fixes for some lcds
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-10 12:58:23 -08:00
7d64e5458f docs: added new sensor images
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-10 10:59:42 -08:00
ab15d1e98f ads1015: fixed sensor typo in doxygen tags
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-08 14:09:26 -08:00
d9b761469d jhd1313m1: renamed node and python examples to match class name
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-08 13:12:18 -08:00
2098449c56 upm: sync build requirements with new MRAA version
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-08 12:41:03 -08:00
63c75be370 docs: fixed manufacturer name for ak8975 & groveultrasonic
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-08 12:07:47 -08:00
03b4d24e64 upm: version 0.5.0
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 17:03:11 -08:00
9d1afd35f8 docs: minor adjustments to doxygen tag instructions
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 15:36:37 -08:00
022b546003 mic: changed doxygen @sensor tag to match class name
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 15:24:39 -08:00
1d085362d9 kxcjk1013: updated iio calls to match API and disabled Java ISR
ISR support for Java bindings needs iio.c Runnable implementation in MRAA. Might be possible to leverage working implementation for GPIO.

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 15:12:16 -08:00
3504dc7246 kxcjk1013: Initial implementation
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 15:12:09 -08:00
5b7522bec4 apds9930: updated java bindings and iio calls to match API
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 15:11:59 -08:00
828a9ce7d8 apds9930: Initial implementation
Signed-off-by: Lay, Kuan Loon <kuan.loon.lay@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 13:33:52 -08:00
8cec2ad473 knownlimitations: merged duplicate entry
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-02-01 11:37:44 -08:00
c3e3a6bb17 upm: bump MRAA dependency to 0.9.0
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 17:28:37 -08:00
11b5d3bc58 knownlimitations: updated list with JHD1313 and TSL2561
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 17:26:49 -08:00
3522e4ee8f eboled: updated python sample and function description for refresh()
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 16:56:07 -08:00
0f548d367b adxrs610: fixed typo in documentation
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 16:43:57 -08:00
1786017006 st7735: expose base class python wrappers too and avoid name collision
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 16:39:25 -08:00
2d68d707f6 ili9341: added java bindings plus minor fix on python wrap and GFX class collision
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 16:22:25 -08:00
d7f4b76ed0 ili9341: Initial implementation
This driver provides support for the ILI9341 LCD driver via SPI (e.g.
Adafruit 2.8" TFT LCD).

It was implemented and tested on the Edison.

Signed-off-by: Shawn Hymel
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 16:21:57 -08:00
4a1b4f1dd4 nlgpio16: C++11 incompatibility fixes
Signed-off-by: Eugene Bolshakov <pub@relvarsoft.com>

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 11:15:19 -08:00
ec75790516 sx1276 and adxrs610: C++11 incompatibility fixes
Signed-off-by: Eugene Bolshakov <pub@relvarsoft.com>

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 11:15:00 -08:00
fad4f72357 t3311: Added libmodbus linkage for Java build
Signed-off-by: Andrei Vasiliu <andrei.vasiliu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-29 11:14:42 -08:00
b3db180ffb doc: Added ds1307 to knownlimitations list
The Grove RTC (DS1307) does not work on the Intel Edison Arduino
board but will work with the mini-breakout.  Updated the list of
known limitations in docs.  Updated the ADXL345 to show 16g, and
fixed one line which went over 80 chars.

Signed-off-by: Noel Eck <noel.eck@intel.com>
2016-01-28 16:27:36 -08:00
a4f41c7cb5 java: In java examples build, changed path to needed jars, to not depend on build folder name.
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-28 16:13:47 -08:00
40f9135412 java: Added sanity checks and integrated them in CMake. Updated sample names and sample mapping.
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-28 16:13:37 -08:00
46996e5251 java: updated samples that use interrupts with Runnable implementation
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-28 15:37:31 -08:00
2cd043c2a1 java: Use Runnables instead of IsrCallbacks in Java
Signed-off-by: Petre Eftime <petre.p.eftime@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-28 13:42:38 -08:00
e1c66c351a rhusb: Initial implementation
The driver implements support for the Omega RH-USB Humidity Probe with
Temperature sensor.  It connects via an integrated USB cable, and
appears as a serial port.

It does not currently work with Edison (as of this date) due to
missing ftdi_sio and usbserial kernel support.

It was implemented and tested on the Galileo 2.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-28 13:31:01 -08:00
a5fd4a2c10 hwxpxx: Initial implementation
This module implements support for the Veris HWXPHTX Hardware Protocol
Humidity and Temperature Sensor family.  It uses MODBUS over an RS485
interface.

This module was developed using libmodbus 3.1.2, and the Veris HWXPHTX.

This sensor supports humidity, and optionally, temperature, slider
switch, and override switch reporting.  The HWXPHTX used to develop
this driver did not include the optional slider or override switches,
however support for them is provided.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-28 13:26:05 -08:00
fc7bfc113a hdxxvxta: Initial implementation
This driver was developed using the Veris HD2NVSTA1 humidity
transmitter.  The 'T' variant supports a temperature transmitter as
well.  Both signals are provided by the device as analog 0-5Vdc or
0-10Vdc outputs.

The A1 variant supports a temperature range of -40C-50C, while the A2
variant supports a range of 0C-50C.  Humidity ranges for all devices
in this device family range from 0% to 100% (non-condensing).

Temperature measurement can be disabled by passing -1 as the
temperature analog pin to the constructor.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-28 13:25:51 -08:00
bf82beaf9c t3311: Initial implementation
This module implements support for the Comet System T3311 Temperature
and Humidity transmitter.  It uses MODBUS over an RS232 serial port.

You must have libmodbus v3.1.2 (or greater) installed to compile and
use this driver.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-26 16:32:22 -08:00
5e37830bb7 pulsensor: updated header to include namespace and generate proper html/xml with doxygen
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-11 16:45:57 -08:00
4ff722ed2e ads1x15: changed description text to UTF-8 for compatibility with doxy2swig
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-04 12:56:45 -08:00
52b0ef4b28 nlgpio16: include documentation generated by doxy2swig for python
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-04 12:36:34 -08:00
930ff6734d ads1x15: include documentation generated by doxy2swig for python
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2016-01-04 11:21:24 -08:00
40be9b68a5 ads1x15: updated doxygen tags to match existing groups
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-23 17:03:33 -08:00
4259aeab7b ads1x15: initial commit for ads1x15 adc
Initial commit of ADS1x15 adc converter. Support for both ADS1015 12 bit
and ADS1115 16 bit  adc.
--signoff
Signed-off-by: Marc Graham <marc@m2ag.net>

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-23 16:47:52 -08:00
d0cb2a032c nlgpio16: Initial implementation
This is a USB device from Numato Labs that is accessed via a UART.  It
provides 16 GPIO's, 7 of which can be configured as analog inputs.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-23 16:02:19 -08:00
4dc679af70 stepmotor: made some small API changes for consistency and usability
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-22 15:24:11 -08:00
091bd9b381 stepmotor: clock_gettime needs lrt with older gcc/glib2 versions
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-22 14:08:11 -08:00
d04f93ffca mhz16: fixed JS/Python examples to match driver API
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:51:19 -08:00
66aaa97955 swig: rename funcs that caused overload errors in python for hmtrp, wt5001
Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:47:57 -08:00
387b2b86b0 swig: ensure that all uint*_t passed in have the correct type.
Otherwise, we generate an exception.  This should fix Issue #172:

https://github.com/intel-iot-devkit/upm/issues/172

Signed-off-by: Zion Orent <zorent@ics.com>
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:36:31 -08:00
e003a11723 cmake: added doxygen doc content to python sensor modules
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:20:15 -08:00
d0504bb65b cmake: Use include/lib paths from MRAA pkgconfig for cmake
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:10:02 -08:00
669fd317b6 README: added reference to "Creating Java Bindings Guide"
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:04:38 -08:00
af7d1d2611 java: Added "Creating Java Bindings guide" to docs
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:04:28 -08:00
1cbb486330 travis: added java examples to Travis CI
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:04:16 -08:00
9516e0720c java: added auto build java examples in cmake
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:04:05 -08:00
8273556539 java: fix Java IsrCallback crash
The director now uses a GlobalRef instead of a WeakRef to the IsrCallback object

Signed-off-by: Petre Eftime <petre.p.eftime@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 16:03:51 -08:00
5bc9353bb4 stepmotor: updated Java example, added python & node.js examples
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-21 14:57:04 -08:00
c8e80bf6a3 stepmotor: made significant changes to stepper driver
Fun to work on, I have maybe 3 different implementations for this one now.
Submitted version uses GPIOs only, no more PWM thus enhancing compatibility.
Fast writes and busy-wait delays ensure accuracy to a few μs when generating
the step pulses.

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-18 16:53:27 -08:00
74691914fb upm: version 0.4.1
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-07 16:24:52 -08:00
9bf184129e java: removed loadLibrary preamble from examples
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-04 17:41:26 -08:00
1667569560 java: Added "automatic load library" code for new sensors
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-04 17:40:56 -08:00
01119436a9 docs: Update knownlimitations.md
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-04 17:40:19 -08:00
344a52ae97 sx1276: changed function parameter name, so that predefined SWIG typemaps automatically apply. In the SWIG inerface, ignored some functions that have more user-friendly wrappers over them.
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-04 17:39:47 -08:00
1accafa145 hcsr04: Made ISR be used internally and not be exposed to the user. Changed access modifier to private. Removed passing ISR to constructor.
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-04 17:38:57 -08:00
e54f5e21c3 examples: synced c++ CMakeLists.txt file for examples in new format
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-04 17:01:20 -08:00
01700b0d49 c++ examples: cmake now honors MODULE_LIST
If MODULE_LIST is set, cmake will only create examples that can be built
with avaialble modules. There has been significant change to cmake file.
Comments show you how to add new examples.

Signed-off-by: Henry Bruce <henry.bruce@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-04 16:25:05 -08:00
a96a2ff44c travis: adding java builds to Travis CI
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-12-01 11:32:47 -08:00
cc7930caf3 mpu9250: propagated new constructor flag for i2c bypass
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-30 14:56:07 -08:00
ac21c9336b mpu9150: option to disable I2C bypass setting
The existing hardcoded logic enables i2c bypass mode for AK8975.
This can cause the accelerometer to disappear on I2C bus. We add
a new member as a switch that can be used to disable bypass.

Change-Id: I2c61f4910d46ffb5940bb3c14b58bc65984fd12e
Signed-off-by: Jianxun Zhang <jianxun.zhang@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-30 14:54:06 -08:00
fd509c7d79 ozw: Initial implementation
This module was developed using the OpenZWave library (v1.3):

http://www.openzwave.com/

It was developed using a collection of devices (switches and a
multi-sensor) connected via an Aeon Z-Stick Gen5 USB dongle.

It can be used to query (and, where appropriate, set) Values on Nodes
connected to the ZWave network.

Checks are made in src/ozw/CMakeLists.txt to ensure that the
libopenzwave library is installed (via pkg-config).  If not present,
then neither the module, nor the example will be built.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-25 13:55:19 -08:00
287250b32d hcsr04: Pass reference to current object to ISR.
This will allow users to call ackEdgeDetected() on the object passed into the function pointer, instead of requiring them to have a global reference to the object.

Signed-off-by: JJ Robertson <jjrob13@gmail.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-25 11:45:20 -08:00
758b49f51d sx1276: removed unused ISR and array typemaps from java interface
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 15:42:26 -08:00
2a1af1399a sx1276: Initial implementation
This driver was developed using an SX1276 based shield on the Galileo
G2.  It requires 3.3v of operation.  It does not work with Edison, due
to SPI issues.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
2015-11-24 14:58:40 -08:00
4de9734f0a hmtrp: Added functions that throw exceptions when failing to read from sensors, and added java exception handling.
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:36:29 -08:00
9bfda4219d groveButton: Corrected GroveButtonSample and GroveButton_intrSample
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:36:24 -08:00
dddba3e8a4 java: Added auto load library code in upm SWIG interfaces
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:36:17 -08:00
500e14663b lol: Added exception when invalid argument is passed to method
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:36:09 -08:00
fcb36276b7 wt5001: Added functions that throw exceptions when failing to read from sensors. Added java exception handling, and modified examples.
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:36:04 -08:00
7f7fdb8441 mhz16: Split the getData(int* gas, int *temp) function into two separate functions and updated the C++ an Java examples
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:35:59 -08:00
f8a105adbf java: removed commented code in SWIG interface files
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:35:55 -08:00
ba43986f82 java: converted all int16_t* to short[] and updated examples
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:35:50 -08:00
6e2355ce9a cmake: use cmake libdir
Signed-off-by: Kevron Rees <kevron.m.rees@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:35:45 -08:00
4a90e2c4be cmake: more robust swig version checking based on build options
Python and Java bindings will build with SWIG 2.x but Node requires at least SWIG 3.0.5. Subject to change when SWIG 3 becomes standard in all major distros.

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 14:35:28 -08:00
1adea8ecf1 cmake: changes for nodejs 4.1.1 - resubmit
Signed-off-by: Eugene Bolshakov <pub@relvarsoft.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-24 11:31:55 -08:00
011013e800 travis: updated travis.yml to reflect new .pc file location
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-23 18:12:33 -08:00
b4d4a215a2 groveultrasonic: made a few changes to code, example and documentation
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-23 17:49:35 -08:00
2eb6ebd3bd groveultrasonic: Initial implementation
This module was developed and tested on a Grove Ultrasonic Ranger module.

http://www.seeedstudio.com/wiki/Grove_-_Ultrasonic_Ranger

Signed-off-by: Jun Kato <i@junkato.jp>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-11-23 15:47:55 -08:00
dc97adf578 eboled: Call refresh() to actually put the text on the display. Use
reasonable coordinates for text.

Signed-off-by: Sergey Kiselev <sergey.kiselev@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-29 10:33:34 -07:00
181b5f17ea grovecircularled: fix up a missing mraa::DATA_OUT and formatting
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-29 10:15:31 -07:00
90bf469245 mcp9808: updated doxygen tags and formatted sources
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-29 09:57:11 -07:00
85b5c8a64e mcp9808: Initial commit for MCP9808 precision temperature sensor.
Add support for MCP9808 precision temp sensor. Implements all features
except for TCrit and TUpper and TLower locking. Functionality includes
alert, interrupt, resolution and hysteresis control.

Signed-off-by: Marc Graham <marc@m2ag.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-29 09:38:46 -07:00
422592f993 Grove O2 Sensor: Correcting Sensor Voltage Calculation
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:42 -07:00
fa1c1f3aa4 Java: Adding example for Grove O2 Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:37 -07:00
b11ad2d170 Java: Adding example for Grove Barometer (High Accuracy)
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:32 -07:00
d62d9f22cd Java: Adding example for Grove Luminance Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:27 -07:00
dec976e971 Java: Adding an example for Grove GSR Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:22 -07:00
fcf2278553 Java: Adding an example for Grove EMG Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:17 -07:00
b3300d5724 Java: Adding example for Water Level Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:12 -07:00
003ca2169f Java: Added missing header comment for MQ3 and MQ9 Gas Sensors
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:06 -07:00
0586775ffc Java: Adding example for Grove MQ9 Gas Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:09:02 -07:00
053cf15495 Java: Adding example for MQ3 Gas Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:57 -07:00
3d8b732158 Cleaned up code.
Removed some unneeded calls in update function. Changed call in
micsv89.js sample file to use update instead of start.

Tested with UPM. 4.0. The micsv89 is sensitive to other devices pulling
the I2c bus up, so it is not likely to work on the Arduino breakout.
I2c 1 on mini breakout works fine.

—Signed-off-by Marc Graham <marc@m2ag.net>

Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:52 -07:00
db3b0c39bf Fixing an incorrect accelerometer address
Signed-off-by: Eugene Bolshakov <pub@relvarsoft.com>

Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:47 -07:00
d2c4747251 Java: Adding an example for the Grove Q-Touch sensor (v 1.0)
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:42 -07:00
8b5cdae4ca Java: Adding an example for the Grove Collision Sensor
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:37 -07:00
2384fbb218 java: Corrected mistake in RotaryEncoderSample comments
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:32 -07:00
212c67fdd0 java: Corrected mistake in sample
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:28 -07:00
ca15860cc3 java: Added sample for Pulsensor
Signed-off-by: Andrei Vasiliu <andrei.vasiliu@intel.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:22 -07:00
cce8ab43e6 naming.md: updated e-mail addresses
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-27 17:08:18 -07:00
255d6cbe86 dfrph: Initial implementation
The driver implements support for the DFRobot pH sensors.  It was
tested with both the standard and Pro versions, calibrated with
standard buffer solutions at pH 4.01 and pH 7.0.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:13 -07:00
db721845db bma220: Initial implementation
This driver was developed based on the DFRobot Triple Axis
accelerometer BMA220 (Tiny):

http://www.dfrobot.com/index.php?route=product/product&product_id=1085

This device can only run at 3.3v DC.  Do not connect to 5v.

Added a private function definition for the installISR function. Done because C++
wasn't able to find the function definition for the java bindings.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:08:08 -07:00
53bc249b75 adxrs610: Initial implementation
This module was developed and tested on a ADXRS610 Gyro Beakout
board.

http://www.dfrobot.com/index.php?route=product/product&product_id=642

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:07:51 -07:00
639f99691b urm37: Initial implementation
This driver was tested with the DFRobot URM37 Ultrasonic Ranger, V4.
Both UART and analog access modes are supported.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:02:47 -07:00
6e095826d3 xbee: Initial implementation
This is a basic serial module that allows access to various XBee
devices via a UART port.  It was tested with the XBee S6B WiFi Module
and the XBee S1 802.14.4 module.

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Abhishek Malik <abhishek.malik@intel.com>
2015-10-27 17:02:10 -07:00
0d2541270e java: Modified path of javac and jar
Signed-off-by: Andrei Vasiliu <andrei.vasiliu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-08 12:32:54 -07:00
e34863f223 java: Added java samples and applied coding style rules to all previous samples
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-08 12:31:50 -07:00
27f34face1 st7735: removed unused variables and updated initialization list
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-07 14:26:27 -07:00
563c72be2c bmpx8x: initialize i2c address in constructor
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-07 14:26:13 -07:00
9bd5e78472 micsv89: updated to new mraa I2C API and added exceptions
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-06 13:05:24 -07:00
81c5962220 micsv89: made few aesthetic formatting changes and renamed update function
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-06 12:13:18 -07:00
bf856c5fca micsv89: Initial support for MICSV89
Signed off by: Marc Graham <marc@m2ag.net>

Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-06 11:32:19 -07:00
1040b4e51f lcm1602: small patches to comments and examples
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 17:18:32 -07:00
1713d44a4b lcm1602: Add support for various LCD configurations / sizes
Signed-off-by: Sergey Kiselev <sergey.kiselev@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 14:47:52 -07:00
5ff625eaf4 java: Added java examples for some sensors
Signed-off-by: Stefan Andritoiu <stefan.andritoiu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:52:09 -07:00
9d63545d44 zfm20: fix clang compiler warnings regarding |/& precedence
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:51:56 -07:00
06b9e7b6f2 xfm20: remove unused setTtyFd() call causing compiler warnings
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:51:45 -07:00
45773fac80 wt5001: remove unused setTtyFd() call causing compiler warnings
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:51:32 -07:00
ee4efb3d6a ublox6: remove unused setTtyFd() call causing compiler warnings
Fixes Issue #276

Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:51:21 -07:00
abced2fdbb mhz16: remove unused setTtyFd() call causing compiler warnings
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:51:10 -07:00
537f7e111d hm11: remove unused setTtyFd() call causing compiler warnings
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:50:58 -07:00
8b49943025 grovescam: remove unused setTtyFd() call causing compiler warnings
Signed-off-by: Jon Trulson <jtrulson@ics.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-10-05 10:50:49 -07:00
a6f517d2c1 java: Enabled directors feature where needed
Signed-off-by: Andrei Vasiliu <andrei.vasiliu@intel.com>
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-09-30 10:45:57 -07:00
d26bde1825 docs: Sync sensor library names in documentation with the actual library names
Signed-off-by: Mircea Bardac <mircea.bardac@intel.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
2015-09-30 09:55:48 +01:00
ef30ab6fb2 docs: changed libmraa references to MRAA
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-09-24 17:00:37 -07:00
9206480b9c docs: few more typos and links fixed
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-09-24 16:39:53 -07:00
d81639d715 docs: fixed links and minor typos in index files
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-09-24 16:19:03 -07:00
08451d98cd docs: updated some links in index files
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-09-24 15:38:26 -07:00
ad81ea55e1 docs: increased heading sizes for changelog and known limitations
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-09-24 15:31:58 -07:00
bd8e22f125 docs: updated IDE sections in index pages
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
2015-09-24 15:30:37 -07:00
679 changed files with 31800 additions and 2383 deletions

View File

@ -1,17 +1,34 @@
language: cpp language: cpp
compiler: env:
- gcc - CC=gcc CXX=gcc
- clang - CC=clang CXX=clang++
- NODE4=true
- NODE5=true
- NODE012=true
install: install:
- if [ "${NODE4}" ]; then export CC=gcc-4.8 CXX=g++-4.8; fi
- sudo add-apt-repository --yes ppa:kalakris/cmake - sudo add-apt-repository --yes ppa:kalakris/cmake
- sudo add-apt-repository --yes ppa:fenics-packages/fenics-exp/swig - sudo add-apt-repository --yes ppa:fenics-packages/fenics-exp/swig
- sudo apt-get update -qq - sudo apt-get update -qq
- sudo apt-get install -y -qq swig3.0 python git cmake - sudo apt-get install -y -qq swig3.0 python git cmake
- sudo ln -s /usr/bin/swig3.0 /usr/bin/swig - sudo ln -s /usr/bin/swig3.0 /usr/bin/swig
- sudo update-java-alternatives -s java-8-oracle
before_script:
- export NODE_ROOT_DIR="/home/travis/.nvm/v0.10.36"
- if [ "$CC" = "gcc" ]; then export BUILDJAVA=ON; else export BUILDJAVA=OFF; fi
- export JAVA_HOME=/usr/lib/jvm/java-8-oracle
- if [ "${NODE4}" ]; then nvm install 4.1; export CC=gcc-4.8; export CXX=g++-4.8; export NODE_ROOT_DIR="/home/travis/.nvm/versions/node/`nvm version`"; fi
- if [ "${NODE5}" ]; then nvm install 5; export CC=gcc-4.8; export CXX=g++-4.8; export NODE_ROOT_DIR="/home/travis/.nvm/versions/node/`nvm version`"; fi
- if [ "${NODE012}" ]; then nvm install 0.12; export NODE_ROOT_DIR="/home/travis/.nvm/versions/node/`nvm version`"; fi
script: script:
- git clone --branch=master https://github.com/intel-iot-devkit/mraa.git - git clone https://github.com/intel-iot-devkit/mraa.git
- cd mraa && mkdir build && cd build && cmake -DENABLEEXAMPLES=OFF -DCMAKE_INSTALL_PREFIX:PATH=. -DNODE_ROOT_DIR:PATH=/home/travis/.nvm/v0.10.36/include .. && make && make install - cd mraa && mkdir build && cd build && cmake -DBUILDSWIGJAVA=$BUILDJAVA -DBUILDSWIGNODE=OFF -DBUILDSWIGPYTHON=OFF -DFIRMATA=ON -DENABLEEXAMPLES=OFF -DCMAKE_INSTALL_PREFIX:PATH=/usr .. && make && sudo make install
- export PKG_CONFIG_PATH=$PWD/lib/pkgconfig - cd ../.. && mkdir build && cd build && cmake -DNODE_ROOT_DIR:PATH="${NODE_ROOT_DIR}" -DBUILDSWIGJAVA=$BUILDJAVA -DBUILDEXAMPLES=ON -DBUILDJAVAEXAMPLES=$BUILDJAVA .. && make
- export CPLUS_INCLUDE_PATH=$PWD/include addons:
- export LIBRARY_PATH=$PWD/lib:$PWD/lib/x86_64-linux-gnu apt:
- cd ../.. && mkdir build && cd build && cmake -DNODE_ROOT_DIR:PATH=/home/travis/.nvm/v0.10.36/include -DBUILDEXAMPLES=ON .. && make sources:
- llvm-toolchain-precise-3.6
- ubuntu-toolchain-r-test
packages:
- clang-3.6
- g++-4.8

View File

@ -5,22 +5,17 @@ if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
message("WARNING: building into sources dir can be risky, prefer other directory") message("WARNING: building into sources dir can be risky, prefer other directory")
endif () endif ()
find_package (SWIG)
if (SWIG_FOUND)
include (${SWIG_USE_FILE})
endif ()
find_package (Threads REQUIRED) find_package (Threads REQUIRED)
find_package (PkgConfig REQUIRED) find_package (PkgConfig REQUIRED)
# force a libmraa search and minimum required version every time a config is generated # Force a libmraa search and minimum required version every time a config is generated
unset(MRAA_FOUND CACHE) unset(MRAA_FOUND CACHE)
pkg_check_modules (MRAA REQUIRED mraa>=0.8.0) pkg_check_modules (MRAA REQUIRED mraa>=0.9.1)
message (INFO " found mraa version: ${MRAA_VERSION}") message (INFO " found mraa version: ${MRAA_VERSION}")
# Appends the cmake/modules path to MAKE_MODULE_PATH variable. # Appends the cmake/modules path to MAKE_MODULE_PATH variable.
set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH}) set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries") set (LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Installation path for libraries")
# Set CMAKE_LIB_INSTALL_DIR if not defined # Set CMAKE_LIB_INSTALL_DIR if not defined
include(GNUInstallDirs) include(GNUInstallDirs)
@ -28,14 +23,14 @@ include(GNUInstallDirs)
# Make a version file containing the current version from git. # Make a version file containing the current version from git.
include (GetGitRevisionDescription) include (GetGitRevisionDescription)
git_describe (VERSION "--tags") git_describe (VERSION "--tags")
if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND") if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_-128-NOTFOUND")
message (WARNING " - Install git to compile a production UPM!") message (WARNING " - Install git to compile a production UPM!")
set (VERSION "v0.4.0-dirty") set (VERSION "v0.5.1-dirty")
endif () endif ()
message (INFO " - UPM Version ${VERSION}") message (INFO " - UPM Version ${VERSION}")
#parse the version information into pieces. # Parse the version information into pieces.
string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}") string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
string (REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}") string (REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}") string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
@ -56,19 +51,34 @@ set (CMAKE_SWIG_FLAGS "")
option (BUILDDOC "Build all doc." OFF) option (BUILDDOC "Build all doc." OFF)
option (BUILDSWIG "Build swig modules." ON) option (BUILDSWIG "Build swig modules." ON)
option (BUILDSWIGPYTHON "Build swig python modules." ON) option (BUILDSWIGPYTHON "Build swig python modules." ON)
option (BUILDPYTHON3 "Use python3 for building/installing/testing" OFF)
option (BUILDSWIGNODE "Build swig node modules." ON) option (BUILDSWIGNODE "Build swig node modules." ON)
option (BUILDEXAMPLES "Build C++ example binaries" OFF) option (BUILDEXAMPLES "Build C++ example binaries" OFF)
option (BUILDJAVAEXAMPLES "Build java example jars" OFF)
option (BUILDSWIGJAVA "Build swig java modules" OFF) option (BUILDSWIGJAVA "Build swig java modules" OFF)
option (IPK "Generate IPK using CPack" OFF) option (IPK "Generate IPK using CPack" OFF)
option (RPM "Generate RPM using CPack" OFF) option (RPM "Generate RPM using CPack" OFF)
option (BUILDTESTS "Generate check-ups for upm" OFF)
# detect arch # Find swig
if (BUILDSWIG)
if (BUILDSWIGNODE)
find_package (SWIG 3.0.5 REQUIRED)
else ()
find_package (SWIG REQUIRED)
endif ()
if (SWIG_FOUND)
include (${SWIG_USE_FILE})
endif ()
endif ()
# Detect arch
include (TargetArch) include (TargetArch)
target_architecture (DETECTED_ARCH) target_architecture (DETECTED_ARCH)
message( INFO " - Target arch is ${DETECTED_ARCH}") message( INFO " - Target arch is ${DETECTED_ARCH}")
if (BUILDDOC) if (BUILDDOC)
# add a target to generate API documentation with Doxygen # Add a target to generate API documentation with Doxygen
find_package (Doxygen) find_package (Doxygen)
if (DOXYGEN_FOUND) if (DOXYGEN_FOUND)
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) configure_file (${CMAKE_CURRENT_SOURCE_DIR}/doxy/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
@ -86,10 +96,10 @@ if (BUILDDOC)
COMMENT "Generating API documentation with Doxygen" VERBATIM COMMENT "Generating API documentation with Doxygen" VERBATIM
) )
endif (DOXYGEN_FOUND) endif (DOXYGEN_FOUND)
# check if Sphinx is installed and add target to generate API documentation # Check if Sphinx is installed and add target to generate API documentation
find_package (Sphinx) find_package (Sphinx)
if(SPHINX_FOUND AND BUILDSWIG AND BUILDSWIGPYTHON) if(SPHINX_FOUND AND BUILDSWIG AND BUILDSWIGPYTHON)
# python required for Sphinx build # Python required for Sphinx build
find_package (PythonLibs) find_package (PythonLibs)
string (REPLACE "." ";" PYTHON_VERSION_LIST ${PYTHONLIBS_VERSION_STRING}) string (REPLACE "." ";" PYTHON_VERSION_LIST ${PYTHONLIBS_VERSION_STRING})
list (GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR) list (GET PYTHON_VERSION_LIST 0 PYTHON_VERSION_MAJOR)
@ -102,7 +112,7 @@ if (BUILDDOC)
COMMAND find ${CMAKE_BINARY_DIR}/src -name "_pyupm_*.so" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \; COMMAND find ${CMAKE_BINARY_DIR}/src -name "_pyupm_*.so" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \;
COMMAND find ${CMAKE_BINARY_DIR}/src -name "pyupm_*.py" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \; COMMAND find ${CMAKE_BINARY_DIR}/src -name "pyupm_*.py" -exec cp {} ${CMAKE_BINARY_DIR}/pyupm \;
COMMAND ${SPHINX_API_EXECUTABLE} -f -o pydoc ${CMAKE_BINARY_DIR}/pyupm COMMAND ${SPHINX_API_EXECUTABLE} -f -o pydoc ${CMAKE_BINARY_DIR}/pyupm
# todo: use a separate cmake FILE module for string replacement instead # TODO: use a separate cmake FILE module for string replacement instead
COMMAND ${SPHINX_EXECUTABLE} -b html pydoc html/python COMMAND ${SPHINX_EXECUTABLE} -b html pydoc html/python
COMMAND sed -i.bak s|\">pyupm_|\">|g html/python/index.html html/python/modules.html COMMAND sed -i.bak s|\">pyupm_|\">|g html/python/index.html html/python/modules.html
COMMAND sed -i.bak s|[[:space:]][mM]odule</a>|</a>|g html/python/index.html html/python/modules.html COMMAND sed -i.bak s|[[:space:]][mM]odule</a>|</a>|g html/python/index.html html/python/modules.html
@ -111,10 +121,10 @@ if (BUILDDOC)
COMMENT "Generating API documentation with Sphinx" VERBATIM COMMENT "Generating API documentation with Sphinx" VERBATIM
) )
endif () endif ()
# check if Yuidoc is installed and add target for API documentation # Check if Yuidoc is installed and add target for API documentation
find_package(Yuidoc) find_package(Yuidoc)
if(YUIDOC_FOUND AND BUILDSWIGNODE) if(YUIDOC_FOUND AND BUILDSWIGNODE)
# node required for Yuidoc documentation # Node required for Yuidoc documentation
find_package(Node) find_package(Node)
file(GLOB_RECURSE JSDOC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/doxy/node doxy/node/*) file(GLOB_RECURSE JSDOC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/doxy/node doxy/node/*)
foreach(JSDOC_FILE ${JSDOC_FILES}) foreach(JSDOC_FILE ${JSDOC_FILES})
@ -138,7 +148,7 @@ if (IPK)
GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME) GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}") string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
else () else ()
# debian uses amd64 to denote x86_64 # Debian uses amd64 to denote x86_64
if (DETECTED_ARCH STREQUAL "x86_64") if (DETECTED_ARCH STREQUAL "x86_64")
set (TARGET_ARCH "amd64") set (TARGET_ARCH "amd64")
else () else ()
@ -147,7 +157,7 @@ if (IPK)
endif () endif ()
message (INFO " - Package arch is ${TARGET_ARCH}") message (INFO " - Package arch is ${TARGET_ARCH}")
set(CPACK_GENERATOR "DEB" "TGZ") set(CPACK_GENERATOR "DEB")
set(OPKG_ARCH ${TARGET_ARCH}) set(OPKG_ARCH ${TARGET_ARCH})
set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR}) set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
@ -196,3 +206,23 @@ add_subdirectory (src)
if(BUILDEXAMPLES) if(BUILDEXAMPLES)
add_subdirectory (examples/c++) add_subdirectory (examples/c++)
endif() endif()
if(BUILDJAVAEXAMPLES)
add_subdirectory (examples/java)
endif()
if (BUILDSWIGPYTHON OR BUILDTESTS)
if (BUILDPYTHON3)
set (PYTHONBUILD_VERSION 3)
else ()
set (PYTHONBUILD_VERSION 2.7)
endif ()
find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
find_package (PythonLibs ${PYTHONBUILD_VERSION} REQUIRED)
include_directories(${PYTHON_INCLUDE_PATH})
endif ()
if (BUILDTESTS)
enable_testing ()
add_subdirectory (tests)
endif()

View File

@ -1,8 +1,8 @@
UPM (Useful Packages & Modules) Sensor/Actuator repository for libmraa UPM (Useful Packages & Modules) Sensor/Actuator repository for MRAA
============== ==============
UPM is a high level repository for sensors that use libmraa. Each sensor links UPM is a high level repository for sensors that use MRAA. Each sensor links
to libmraa and are not meant to be interlinked although some groups of sensors to MRAA and are not meant to be interlinked although some groups of sensors
may be. Each sensor contains a header which allows to interface with it. may be. Each sensor contains a header which allows to interface with it.
Typically a sensor is represented as a class and instantiated. Typically a sensor is represented as a class and instantiated.
@ -68,9 +68,10 @@ You can also refer to the [Intel® IoT Developer Zone](https://software.intel.co
### IDE Integration ### IDE Integration
If you would like to create Eclipse IDE projects using the UPM C++ samples, If you would like to create projects and run the UPM samples using an Intel recommended IDE,
please follow the instructions posted [here](https://software.intel.com/en-us/node/551014). please refer to the Intel Developer Zone IDE page.
This will show you how to import the code and configure your project.
<a href="https://software.intel.com/iot/software/ide"><img src="docs/icons/allides.png"/></a>
### Building UPM ### Building UPM
@ -82,6 +83,8 @@ Porting [link](docs/porting.md) has more information on making new UPM modules.
There is also an example available for max31855 [sensor](docs/max31855.md). There is also an example available for max31855 [sensor](docs/max31855.md).
Guide on creating Java [bindings](docs/creating_java_bindings.md).
### Naming conventions and rules for new UPM contributions ### Naming conventions and rules for new UPM contributions
Before you begin development, take a look at our naming [conventions](docs/naming.md). Before you begin development, take a look at our naming [conventions](docs/naming.md).
@ -97,13 +100,13 @@ as a contributor. Signing-off your commits is mandatory.
API Documentation API Documentation
============== ==============
<a href="http://iotdk.intel.com/docs/master/upm/modules.html"><img src="docs/icons/c++.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm"><img src="docs/icons/c++.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="docs/icons/java.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/java"><img src="docs/icons/java.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="docs/icons/python.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/python"><img src="docs/icons/python.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="docs/icons/node.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/node"><img src="docs/icons/node.png"/></a>
##### Changelog ### Changelog
Version changelog [here](docs/changelog.md). Version changelog [here](docs/changelog.md).
##### Known Limitations ### Known Limitations
List of known limitations [here](docs/knownlimitations.md). List of known limitations [here](docs/knownlimitations.md).

View File

@ -1,4 +1,12 @@
find_program (NODE_EXECUTABLE NAMES node # Macro to add directory to NODEJS_INCLUDE_DIRS if it exists and is not /usr/include
macro(add_include_dir dir)
if (IS_DIRECTORY ${dir} AND NOT ${dir} STREQUAL "/usr/include")
set(NODEJS_INCLUDE_DIRS ${NODEJS_INCLUDE_DIRS} ${dir})
endif()
endmacro()
find_program (NODEJS_EXECUTABLE NAMES node nodejs
HINTS HINTS
$ENV{NODE_DIR} $ENV{NODE_DIR}
PATH_SUFFIXES bin PATH_SUFFIXES bin
@ -7,26 +15,50 @@ find_program (NODE_EXECUTABLE NAMES node
include (FindPackageHandleStandardArgs) include (FindPackageHandleStandardArgs)
find_path (NODE_ROOT_DIR "node/node.h" "src/node.h" # If compat-libuv package exists, it must be at start of include path
PATHS /usr/include/nodejs /usr/local/include/nodejs) find_path (UV_ROOT_DIR "uv.h" PATHS /usr/include/compat-libuv010 NO_DEFAULT_PATH)
if (UV_ROOT_DIR)
# set (NODEJS_INCLUDE_DIRS ${UV_ROOT_DIR})
add_include_dir(${UV_ROOT_DIR})
endif()
set (NODE_INCLUDE_DIRS # Now look for node. Flag an error if not found
${NODE_ROOT_DIR}/src find_path (NODE_ROOT_DIR "include/node/node.h" "include/src/node.h"
${NODE_ROOT_DIR}/node PATHS /usr/include/nodejs /usr/local/include/nodejs /usr/local/include)
${NODE_ROOT_DIR}/deps/v8/include if (NODE_ROOT_DIR)
${NODE_ROOT_DIR}/deps/uv/include add_include_dir(${NODE_ROOT_DIR}/include/src)
add_include_dir(${NODE_ROOT_DIR}/include/node)
add_include_dir(${NODE_ROOT_DIR}/include/deps/v8/include)
add_include_dir(${NODE_ROOT_DIR}/include/deps/uv/include)
else()
unset(NODEJS_INCLUDE_DIRS)
message(ERROR " - node.h not found")
endif()
# Check that v8.h is in NODEJS_INCLUDE_DIRS
find_path (V8_ROOT_DIR "v8.h" PATHS ${NODEJS_INCLUDE_DIRS})
if (NOT V8_ROOT_DIR)
unset(NODEJS_INCLUDE_DIRS)
message(ERROR " - v8.h not found")
endif()
# Check that uv.h is in NODEJS_INCLUDE_DIRS
find_path (UV_ROOT_DIR "uv.h" PATHS ${NODEJS_INCLUDE_DIRS})
if (NOT UV_ROOT_DIR)
unset(NODEJS_INCLUDE_DIRS)
message(ERROR " - uv.h not found")
endif()
find_package_handle_standard_args (Nodejs DEFAULT_MSG
NODEJS_EXECUTABLE
NODEJS_INCLUDE_DIRS
) )
find_package_handle_standard_args (Node DEFAULT_MSG if (NODEJS_EXECUTABLE)
NODE_EXECUTABLE execute_process(COMMAND ${NODEJS_EXECUTABLE} --version
NODE_INCLUDE_DIRS
)
if (NODE_EXECUTABLE)
execute_process(COMMAND ${NODE_EXECUTABLE} --version
OUTPUT_VARIABLE _VERSION OUTPUT_VARIABLE _VERSION
RESULT_VARIABLE _NODE_VERSION_RESULT) RESULT_VARIABLE _NODE_VERSION_RESULT)
execute_process(COMMAND ${NODE_EXECUTABLE} -e "console.log(process.versions.v8)" execute_process(COMMAND ${NODEJS_EXECUTABLE} -e "console.log(process.versions.v8)"
OUTPUT_VARIABLE _V8_VERSION OUTPUT_VARIABLE _V8_VERSION
RESULT_VARIABLE _V8_RESULT) RESULT_VARIABLE _V8_RESULT)
if (NOT _NODE_VERSION_RESULT AND NOT _V8_RESULT) if (NOT _NODE_VERSION_RESULT AND NOT _V8_RESULT)
@ -55,7 +87,11 @@ if (NODE_EXECUTABLE)
set (V8_VERSION_STRING "3.28.72") set (V8_VERSION_STRING "3.28.72")
message ("defaulted to node 0.10.30") message ("defaulted to node 0.10.30")
endif () endif ()
message ("INFO - Node version is " ${NODE_VERSION_STRING} "INFO - Node using v8 " ${V8_VERSION_STRING}) string (REGEX REPLACE "\n" "" NODE_VERSION_STRING ${NODE_VERSION_STRING})
string (REGEX REPLACE "\n" "" V8_VERSION_STRING ${V8_VERSION_STRING})
message ("INFO - Node version is " ${NODE_VERSION_STRING})
message ("INFO - Node using v8 " ${V8_VERSION_STRING})
mark_as_advanced (NODEJS_EXECUTABLE)
endif () endif ()
mark_as_advanced (NODE_EXECUTABLE) mark_as_advanced (NODE_EXECUTABLE)

View File

@ -5,12 +5,10 @@ UPM uses cmake in order to make compilation relatively painless. Cmake runs
build out of tree so the recommended way is to clone from git and make a build/ build out of tree so the recommended way is to clone from git and make a build/
directory. directory.
This project depends on libmraa, so that needs to be installed first. Use the This project depends on libmraa, so that needs to be installed first. Append
following environment variables to configure the paths: the install location of mraa pkgconfig to the following environment variable:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:.../mraa/build/lib/pkgconfig PKG_CONFIG_PATH=$PKG_CONFIG_PATH:.../mraa/build/lib/pkgconfig
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:.../mraa/build/include
LIBRARY_PATH=$LIBRARY_PATH:.../mraa/build/lib
UPM will attempt to build all directories inside src/ and they must contain UPM will attempt to build all directories inside src/ and they must contain
individual CMakeLists.txt files. individual CMakeLists.txt files.

View File

@ -4,6 +4,45 @@ Changelog {#changelog}
Here's a list summarizing some of the key undergoing changes to our library Here's a list summarizing some of the key undergoing changes to our library
from earlier versions: from earlier versions:
### v0.5.1
* Updated the API and added new functionality for the MY9221 class and derived
sensors: grovecircularled and groveledbar, along with new code samples that
show these changes
* Provided a fix for one JAVA example that uses interrupts and updated library
install paths
* Several documentation improvements and pictures were added for new sensors
* A few other sensors received minor patches
### v0.5.0
* First implementations for industrial grade Modbus sensors, along with first
sensor examples that use the new iio system driver in MRAA
* Significant improvements to the stepmotor driver that will now allow precise
control using any GPIO pin and extended the API with new functionality
* Further improved JAVA bindings and sensor ISRs have been modified to
implement Runnable objects
* Improved Python typemaps and error checking, documentation now includes
detailed function descriptions
* Simplified the build process by eliminating the need to define redundant
MRAA related environment variables
* New sensors: nlgpio16, ads1x15, t3311, hdxxvxta, hwxpxx, rhusb, ili9341,
apds9930, kxcjk1013
### v0.4.1
* Over 150 supported sensor drivers including some industrial grade devices
* Improved the JAVA bindings, added a large number of examples for sensors,
enabled JAVA builds in Travis CI, and introduced automatic loading for the
JAVA shared libraries
* Continued to improve existing sensor drivers and to enhance them with the
new C++ coding style and exception types
* Several cmake improvements to allow building on various Linux distributions
and with a newer version of Node.JS
* Simplified adding and building of C++ sensor examples via cmake
* New sensors: micsv89, xbee, urm37, adxrs610, bma220, dfrph, mcp9808, sx1276,
groveultrasonic, ozw
### v0.4.0 ### v0.4.0
* Fully functional and documented JAVA language bindings for sensors with * Fully functional and documented JAVA language bindings for sensors with
@ -26,7 +65,7 @@ from earlier versions:
includes last remaining images and grouping sensors by kits includes last remaining images and grouping sensors by kits
* Added support for Sparkfun Sensor Blocks (OLED & IMU) * Added support for Sparkfun Sensor Blocks (OLED & IMU)
* Fully reworked API for at42qt1070, mpu9150 and lcd classes, while * Fully reworked API for at42qt1070, mpu9150 and lcd classes, while
maintaining backwards compatibility for existing lcd displays. maintaining backwards compatibility for existing lcd displays
* Extended doxygen tags for better integration with automated documentation * Extended doxygen tags for better integration with automated documentation
generators generators
* New sensors: rgbringcoder, hp20x, pn532, sainsmartks, lsm9ds0, eboled * New sensors: rgbringcoder, hp20x, pn532, sainsmartks, lsm9ds0, eboled

View File

@ -0,0 +1,353 @@
Creating Java Bindings Guide
==============
* [Overview](#overview)
* [Tools of trade](#tools-of-trade)
* [Recommendations for the native API](#recommendations-for-the-native-api)
* [Pointers](#pointers)
* [Throwing Exceptions in Java](#throwing-exceptions-in-java)
* [Caveats & Challenges](#caveats--challenges)
* [Wrapping C arrays with Java arrays](#wrapping-c-arrays-with-java-arrays)
* [Wrapping unbound C arrays with Java arrays if array is output](#wrapping-unbound-c-arrays-with-java-arrays-if-array-is-output)
* [Wrapping unbound C arrays with Java arrays if array is input](#wrapping-unbound-c-arrays-with-java-arrays-if-array-is-input)
* [Implementing callbacks in Java](#implementing-callbacks-in-java)
##Overview
The "Creating Java Bindings Guide" serves as a basic tutorial for using the SWIG software development tool to create 'glue code' required for Java to call into C/C++ code. It contains: guides for dealing with type conversions, exception handling, callbacks; recommendations on how to write/modify the native API to avoid issues on the Java side, and also workarounds for those issues that can't be avoided.
This guide was created with the [upm](https://github.com/intel-iot-devkit/upm/) and [mraa](https://github.com/intel-iot-devkit/mraa) libraries in mind, and uses examples taken from these sources, but its usage can be extended to any project of creating Java bindings for C/C++ libraries.
##Tools of trade
[SWIG General Documentation](http://www.swig.org/Doc3.0/SWIGDocumentation.html)
[SWIG Java-specific Documentation](http://www.swig.org/Doc3.0/Java.html)
##Recommendations for the native API
###Pointers
As much as possible, avoid passing values/returning values through pointers given as as arguments to methods. As the Java language does not have pointers, SWIG provides a [workaround](http://www.swig.org/Doc3.0/Java.html#Java_tips_techniques) in the typemaps.i library.
####Alternatives:
1. Functions that read data from a driver, return it through a pointer given as argument, and return a bool value, should be __replaced by__ functions that return the value directly and throw a std::runtime_error if a read error occurs. E.g.:
```c++
/*
* Function reads from sensor, places read value in variable bar and
* returns true if succesful. Function returns false if read failed.
*/
bool func(int *bar);
```
__Replaced by:__
```c++
/*
* Function reads from sensor and returns read value.
* Or throws std::runtime_error if a read error occurs
*/
int func();
```
2. Functions that return multiple values through pointers, that make sense to be grouped together into an array<sup>1</sup> (e.g. speed values, acceleration values), should be __replaced by__ functions that return a pointer to an array in which the elements are the returned values. Afterwards, [wrap the C array with a Java array](#wrapping-unbound-c-arrays-with-java-arrays-if-array-is-output). E.g.:
```c++
/*
* Function returns the acceleration on the three
* axis in the given variables.
*/
void getAccel(int *accelX, int *accelY, int *accelZ);
```
__Replaced by:__
```c++
/*
* Function returns the acceleration on the three
* axis as elements of a 3-element array.
*/
int *getAccel();
```
3. Functions that return N values through pointers, that do not make sense to grouped together (e.g. a general purpose function that returns both the light intensity and air pollution), should be __replaced by__ N functions (one for each value) that read only one specific value. E.g.:
```c++
/*
* Function returns the light intensity and air pollution
*/
void getData(int *light, int *air);
```
__Replaced by:__
```c++
int getLight();
int getAir();
```
4. Functions that return N values through pointers; values that do not make sense to be grouped together, but are time dependent, and make sense to be read at the same time. For example, a sensor that reads air humidity and temperature. A user may want to know the temperature value _temp_ read at the exact moment the humidity value _humid_ was read. These should be __replaced by__ N+1 functions: a _getData()_ function that reads all values at the same time and stores them in global variables; and N getter functions, one for each value. E.g.
```c++
/*
* Function returns the light intensity and air pollution
*/
void getData(int *temp, int *humid);
```
__Replaced by:__
```c++
void getData();
int getTemp();
int getHumid();
```
<sup>1</sup>this depends on the interpretation of the returned data. For example, arguments that return the temperature and light intensity, don't make sense to be grouped into an array of size 2. But acceleration on the three axis can be grouped together in an array of size 3. where accelX is accel[0], accelY is accel[1], accelZ is accel[2].
__Notice:__
Sometimes, you may be required to write JNI code. Be aware of the difference between the C JNI calling syntax and the C++ JNI calling syntax.The C++ calling syntax will not compile as C and also vice versa. It is however possible to write JNI calls which will compile under both C and C++ and is covered in the [Typemaps for both C and C++ compilation](http://www.swig.org/Doc3.0/Java.html#Java_typemaps_for_c_and_cpp) section of the SWIG Documentation.
###Throwing Exceptions in Java
####Language independent:
The %exception directive allows you to define a general purpose exception handler. For example, you can specify the following:
```c++
%exception [method_name] {
try {
$action
}
catch (std::invalid_argument& e) {
... handle error ...
}
}
```
If [method_name] is not specified then the directive is applied to all methods in its scope.
The usual thing you'd want to do is catch the C++ exception and throw an equivalent exception in your language.
The exception.i library file provides support for creating language independent exceptions in your interfaces. To use it, simply put an "%include exception.i" in your interface file. This provides a function SWIG_exception() that can be used to raise common language exceptions in a portable manner. For example :
```c++
// Language independent exception handler
%include exception.i
%exception {
try {
$action
} catch(OutOfMemory) {
SWIG_exception(SWIG_MemoryError, "Out of memory");
} catch(...) {
SWIG_exception(SWIG_RuntimeError,"Unknown exception");
}
}
```
In the upm library, the upm_exception.i interface file provides the functionality to catch common exceptions and propagate them through SWIG. It uses the exception.i library file and is language independent.
The upm_exception.i interface file is included in the upm.i file, therefor SWIG wraps all generated methods' body in a try-catch statement for the following exceptions:
* std::invalid_argument
* std::domain_error
* std::overflow_error
* std::out_of_range
* std::length_error
* std::logic_error
* std::bad_alloc
* std::runtime_error
* std::exception
####Java specific:
To throw a specific Java exception:
```c++
%exception {
try {
$action
} catch (std::out_of_range &e) {
jclass clazz = jenv->FindClass("java/lang/Exception");
jenv->ThrowNew(clazz, "Range error");
return $null;
}
}
```
Where FindClass and ThrowNew are [JNI functions](http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html).
Java defines two tipes of exceptions: checked exception and unchecked exceptions (errors and runtime exceptions). Checked exceptions are subject to the [Catch or Specify Requirement](https://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html).
The C++ compiler does not force the code to catch any exception.
The %exception directive does not specify if a method throws a checked exception (does not add classes to the throws clause). For this, the %javaexception(classes) directive is used; where classes is a string containing one or more comma separated Java classes.
```c++
%javaexception("java.lang.Exception") {
try {
$action
} catch (std::out_of_range &e) {
jclass clazz = jenv->FindClass("java/lang/Exception");
jenv->ThrowNew(clazz, "Range error");
return $null;
}
}
```
In the upm library, the java_exceptions.i library file provides the functionality to catch exceptions and propagate them through SWIG as Java checked exceptions. The file provides SWIG wrappers, in the form of macros, that can be applied to methods.E.g. use the __READDATA_EXCEPTION(function)__ macro for functions that read data from a sensor and throw a std::runtime_error in case of a read failure. This will result in:
```java
void function throws IOException ();
```
##Caveats & Challenges
###Wrapping C arrays with Java arrays
SWIG can wrap arrays in a more natural Java manner than the default by using the arrays_java.i library file. Just include this file into your SWIG interface file.
###Wrapping unbound C arrays with Java arrays if array is output
Functions that return arrays, return a pointer to that array. E.g.:
```c++
/*
* Function returns the acceleration on the three
* axis as elements of a 3-element array.
*/
int *getAccel();
```
__SWIG:__
```c++
%typemap(jni) int* "jintArray"
%typemap(jstype) int* "int[]"
%typemap(jtype) int* "int[]"
%typemap(javaout) int* {
return $jnicall;
}
%typemap(out) int *getAccel {
$result = JCALL1(NewIntArray, jenv, 3);
JCALL4(SetIntArrayRegion, jenv, $result, 0, 3, (const signed int*)$1);
}
```
###Wrapping unbound C arrays with Java arrays if array is input
In C, arrays are tipically passed as pointers, with an integer value representig the length of the array. In Java, the length of an array is always known, so the length argument is redundant. This example shows how to wrap the C array and also get rid the length argument. E.g.:
```c++
void func(uint8_t *buffer, int length);
```
__SWIG:__
```c++
%typemap(jtype) (uint8_t *buffer, int length) "byte[]"
%typemap(jstype) (uint8_t *buffer, int length) "byte[]"
%typemap(jni) (uint8_t *buffer, int length) "jbyteArray"
%typemap(javain) (uint8_t *buffer, int length) "$javainput"
%typemap(in,numinputs=1) (uint8_t *buffer, int length) {
$1 = JCALL2(GetByteArrayElements, jenv, $input, NULL);
$2 = JCALL1(GetArrayLength, jenv, $input);
}
```
!!!! There is a difference between TYPE *name and TYPE * name in typemaps!!!!!
###Implementing callbacks in Java
Callbacks in the UPM Java library (as well as the MRAA Java library) make use of the _void mraa\_java\_isr\_callback(void\* data\)_ method from MRAA.
__Callbacks in the UPM Java library are implemented as follows (we use the a110x Hall Effect sensors as example):__
We extend the sensor class with another method, _installISR\(jobject runnable\)_, which is a wrapper over the original _installISR\(void \(\*isr\)\(void \*\), void \*arg\)_ method. This will install the _mraa\_java\_isr\_callback\(\)_ method as the interrupt service routine \(ISR\) to be called, with _jobject runnable_ as argument.
SWIGJAVA is a symbol that is always defined by SWIG when using Java. We enclose the _installISR\(jobject runnable\)_ method in a _\#if defined(SWIGJAVA)_ check, to ensure the code only exists when creating a wrapper for Java.
```c++
#if defined(SWIGJAVA)
void A110X::installISR(jobject runnable)
{
installISR(mraa_java_isr_callback, runnable);
}
#endif
```
We hide the underlying method, _installISR\(void \(\*isr\)\(void \*\), void \*arg\)_ , and expose only the _installISR\(jobject runnable\)_ to SWIG, through the use of the SWIGJAVA symbol. When SWIGJAVA is defined, we change the access modifier of the underlying method to private.
```c++
public:
#if defined(SWIGJAVA)
void installISR(jobject runnable);
#else
void installISR(void (*isr)(void *), void *arg);
#endif
private:
#if defined(SWIGJAVA)
void installISR(void (*isr)(void *), void *arg);
#endif
```
To use callback in java, we create a ISR class, which implements the Java Runnable interface, and we override the _run\(\)_ method with the code to be executed when the interrupt is received. An example for the a110x Hall sensor that increments a counter each time an interrupt is received:
```java
public class A110X_intrSample {
public static int counter=0;
public static void main(String[] args) throws InterruptedException {
upm_a110x.A110X hall = new upm_a110x.A110X(2);
A110XISR callback = new A110XISR();
hall.installISR(callback);
while(true){
System.out.println("Counter: " + counter);
Thread.sleep(1000);
}
}
}
class A110XISR implements Runnable {
public A110XISR(){
super();
}
public void run(){
A110X_intrSample.counter++;
}
}
```
####Issues with java callbacks and workarounds
__SWIGJAVA not defined at compile time__
Consider the following files:
* example.h - Header file for our source file
* example.cxx - Source file containing the class Example, for which we build java bindings
* example.i - The SWIG interface, that includes the example.h header file
The build process of a java module using SWIG is split into two steps:
1. Generating the intermediate files, from the SWIG interface file. This will produce the java class file (Example.java), the JNI file (exampleJNI.java) and wrapper file (example_wrap.cxx). The source file (example.cxx) is not needed in the first step.
```
swig -c++ -java example.i
```
2. Generating the shared library from the C++ sources and wrapper file
```
g++ -fPIC -c example.cxx example_wrap.cxx -I/usr/lib/jvm/java-1.8.0/include -I/usr/lib/jvm/java-1.8.0/include/linux
g++ -shared example_wrap.o sensor.o -o libexample.so
```
SWIGJAVA is always defined when SWIG parses the interface file, meaning it will be defined when it parses the header file (example.h) that is included in the interface file (example.i).
SWIG also adds the "#define SWIGJAVA" directive in the wrapper file (example_wrap.cxx).
However, in generating the shared library the SWIGJAVA symbol is only defined in the example_wrap.cxx file, because of the added "#define SWIGJAVA" directive. But we have also used the "#if defined(SWIGJAVA)" check in the source file (example.cxx), and thus need to define SWIGJAVA for it too. If we define the SWIGJAVA symbol as a compile flag, when compiling the source code to object code, the SWIGJAVA compile flag and #define SWIGJAVA" directive will clash and give a double definition warning (only a warning).
In this example it is simple to compile the two source codes separately, one with the compile flag, the other without, and then create the shared library (libexample.so).
But in a big automatic build like the java upm libraries, this may prove too hard or too complicated to do. A workaround to this would be to define a custom symbol (e.q. JAVACALLBACK in the upm library) and also test for it. In short, replace:
```c++
#if defined(SWIGJAVA)
```
by
```c++
#if defined(SWIGJAVA) || defined(JAVACALLBACK)
```

View File

@ -50,10 +50,12 @@ Here's an example (disregard the "@verbatim" tags in your actual code):
library's "@defgroup", otherwise this is a new library name, generally the library's "@defgroup", otherwise this is a new library name, generally the
same as chip id. *Mandatory* same as chip id. *Mandatory*
- `<chip-id>` Usually the chip number used by the sensor. When this is not - `<chip-id>` Usually the chip number used by the sensor. When this is not
available or relevant, use a unique descriptor that makes sense. *Mandatory* available or relevant, use a unique descriptor that makes sense. Must match
- `<component-name>` A short name for your sensor, can include manufacturer class name. *Mandatory*
name. *Mandatory* - `<component-name>` A short name for your sensor, try to avoid including the
- `<alt-name>` Alternative names that your sensor driver might have. *Optional* manufacturer's name here. *Mandatory*
- `<alt-name>` Alternative names that your sensor driver might have. This may
include manufacturer's name. *Optional*
- `<alt-id>` Alternative chip-ids that your sensor driver supports. *Optional* - `<alt-id>` Alternative chip-ids that your sensor driver supports. *Optional*
- `<component-category>` Mention one or more categories the sensor fits in. Can - `<component-category>` Mention one or more categories the sensor fits in. Can
be 'other'. *Mandatory* be 'other'. *Mandatory*

BIN
docs/icons/allides.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
docs/icons/eclipse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
docs/icons/wyliodrin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
docs/icons/xdk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
docs/images/ads1015.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
docs/images/ads1115.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
docs/images/adxrs610.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
docs/images/bma220.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
docs/images/dfrph.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
docs/images/eboled.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
docs/images/ili9341.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

BIN
docs/images/keypadlcd.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
docs/images/lm35.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
docs/images/lsm9ds0.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
docs/images/mcp9808.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
docs/images/mg811.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
docs/images/micsv89.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
docs/images/mpu60x0.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
docs/images/mpu9250.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
docs/images/pn532.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
docs/images/ssd1351.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 198 KiB

BIN
docs/images/urm37.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
docs/images/xbee.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -7,6 +7,11 @@ such sensors and known workarounds if they exist.
#### Grove Sensors #### Grove Sensors
* **Grove LCD RGB Backlit** (JHD1313M1) requires 5V and should be used with an
external power supply connected to the board to function properly. Although
some high powered USB ports might be enough, in most cases you will encounter
dropped characters, washed out text and/or failed I2C writes while using USB
power alone.
* **Grove I2C Touch Sensor** (MPR121) v1.3 is incompatible with the Intel * **Grove I2C Touch Sensor** (MPR121) v1.3 is incompatible with the Intel
Edison using the Arduino board, but will work with the Mini-breakout if Edison using the Arduino board, but will work with the Mini-breakout if
supplied with at least 4V. Revision v1.2 works well on all Intel boards. supplied with at least 4V. Revision v1.2 works well on all Intel boards.
@ -14,8 +19,8 @@ such sensors and known workarounds if they exist.
on the Intel Edison boards. on the Intel Edison boards.
* **Grove 3-Axis Digital Gyroscope** (ITG-3200) is not compatible with the * **Grove 3-Axis Digital Gyroscope** (ITG-3200) is not compatible with the
Intel Edison Arduino board but will work with the Mini-breakout. Intel Edison Arduino board but will work with the Mini-breakout.
* **Grove 3-Axis Digital Accelerometer** (ADXL345) only works with the Intel * **Grove 3-Axis Digital Accelerometer +/-16g** (ADXL345) only works with the
Edison Arduino board when powered from the 3.3V line. Intel Edison Arduino board when powered from the 3.3V line.
* **Grove 3-Axis Digital Compass** (HMC5883L) reports inaccurate values at 5V * **Grove 3-Axis Digital Compass** (HMC5883L) reports inaccurate values at 5V
on the Intel Edison Arduino board and newer revisions might not work at all. on the Intel Edison Arduino board and newer revisions might not work at all.
Use 3.3V or the Mini-breakout. Use 3.3V or the Mini-breakout.
@ -26,19 +31,24 @@ such sensors and known workarounds if they exist.
* **Grove Barometer** (BMP085) has an unstable connection on the Intel Edison * **Grove Barometer** (BMP085) has an unstable connection on the Intel Edison
using the Arduino breakout and may drop read data. The Xadow version of this using the Arduino breakout and may drop read data. The Xadow version of this
sensor (BMP180) is also dropping data packets occasionally. sensor (BMP180) is also dropping data packets occasionally.
* **Grove Digital Light Sensor** (TSL2561) occasionally drops I2C reads on the
Intel Edison with the Arduino breakout. This might cause the sensor not to
initialize properly. Works as expected with the Mini-breakout.
* **Grove 6-Axis Accelerometer & Compass** (LSM303) fails to write to the * **Grove 6-Axis Accelerometer & Compass** (LSM303) fails to write to the
configuration register properly and returns invalid data. configuration register properly and returns invalid data.
* **Grove I2C ADC Converter** does not show up on the I2C bus on the Intel * **Grove I2C ADC Converter** does not show up on the I2C bus on the Intel
Edison with the Arduino board. Edison with the Arduino board.
* **Grove I2C Motor Driver** is not compatible with the Intel Galileo due to * **Grove I2C Motor Driver** is not compatible with the Intel Galileo due to
the inability to change the I2C bus speed to 100 KHz. the inability to change the I2C bus speed to 100 KHz.
* **Grove Digital Light Sensor** (TSL2561) may have an unstable connection on
the Intel Edison using the Arduino breakout that results in missed I2C reads.
This is usually applicable when the I2C lines are pulled-up to 5V. Works as
expected with the Mini-breakout.
* **Grove CO2 Sensor** will return zeroed data and is unusable on the Intel * **Grove CO2 Sensor** will return zeroed data and is unusable on the Intel
Galileo. Galileo.
* **Grove BLE** (HM-11) does not return data on the Intel Galileo board due to * **Grove BLE** (HM-11) does not return data on the Intel Galileo board due to
known UART limitation. known UART limitation.
* **Grove Hall Sensor** (A11X) if the base shield is set to 3V on Intel Edison,
it will trigger continous callbacks when the sensor is not reading anything.
* **Grove RTC** (DS1307) is not compatible with the Intel Edison Arduino board
but will work with the Mini-breakout.
#### Adafruit Sensors #### Adafruit Sensors

View File

@ -26,8 +26,5 @@ sensor can inherit your class if they only have minor changes.
### Doubt ### Doubt
If ever, give either of us a ping via email: If ever, give either of us a ping via email:
mihai.tudor.panu@intel.com mihai.tudor.panu@intel.com or brendan.le.foll@intel.com
john.r.van.drasek@intel.com
brendan.le.foll@intel.com
and we'll try suggest decent names for your module. and we'll try suggest decent names for your module.

View File

@ -1,8 +1,8 @@
UPM (Useful Packages & Modules) Sensor/Actuator repository for libmraa UPM (Useful Packages & Modules) Sensor/Actuator repository for MRAA
============== ==============
UPM is a high level repository for sensors that use libmraa. Each sensor links UPM is a high level repository for sensors that use MRAA. Each sensor links
to libmraa and are not meant to be interlinked although some groups of sensors to MRAA and are not meant to be interlinked although some groups of sensors
may be. Each sensor contains a header which allows to interface with it. may be. Each sensor contains a header which allows to interface with it.
Typically a sensor is represented as a class and instantiated. Typically a sensor is represented as a class and instantiated.
@ -21,7 +21,7 @@ However implementation and API design is completely up to the developer, some
enumerable sensors for example may provide much clever instantiation. Displays enumerable sensors for example may provide much clever instantiation. Displays
may also create more complex structures in order to interface with them. may also create more complex structures in order to interface with them.
Browse through the list of all [examples](https://github.com/intel-iot-devkit/upm/tree/master/examples). Browse through the list of all [examples](https://github.com/intel-iot-devkit/upm/tree/master/examples/c%2B%2B).
Multi-sensor samples for the starter and specialized kits can be found in the Multi-sensor samples for the starter and specialized kits can be found in the
[iot-devkit-samples](https://github.com/intel-iot-devkit/iot-devkit-samples) repository. [iot-devkit-samples](https://github.com/intel-iot-devkit/iot-devkit-samples) repository.
@ -30,31 +30,34 @@ Multi-sensor samples for the starter and specialized kits can be found in the
Supported [sensor list](http://iotdk.intel.com/docs/master/upm/modules.html) from API documentation. Supported [sensor list](http://iotdk.intel.com/docs/master/upm/modules.html) from API documentation.
You can also refer to the [Intel® IoT Developer Zone](https://software.intel.com/iot/sensors). You can also refer to the [Intel IoT Developer Zone](https://software.intel.com/iot/sensors).
### IDE Integration ### IDE Compatibility
If you would like to create Eclipse IDE projects using the UPM C++ samples, If you would like to create Eclipse IDE projects using the UPM C++ samples,
please follow the instructions posted [here](https://software.intel.com/en-us/node/551014). please follow the instructions provided on the Intel Developer Zone IDE page.
This will show you how to import the code and configure your project.
@htmlonly
<a href="https://software.intel.com/iot/software/ide"><img src="docs/icons/eclipse.png"/></a>
@endhtmlonly
### Building UPM ### Building UPM
See @ref building [here](docs/building.md). See @ref building here.
### Making your own UPM module ### Making your own UPM module
@ref porting [link](docs/porting.md) has more information on making new UPM modules. @ref porting link has more information on making new UPM modules.
There is also an example available for @ref max31855 [sensor](docs/max31855.md). There is also an example available for @ref max31855 sensor.
### Naming conventions and rules for new UPM contributions ### Naming conventions and rules for new UPM contributions
Before you begin development, take a look at our @ref naming [conventions](docs/naming.md). Before you begin development, take a look at our @ref naming conventions.
Also, please read the guidelines for @ref contributions [to UPM](docs/contributions.md). Also, please read the guidelines for @ref contributions to UPM.
Don't forget to check the @ref documentation [section](docs/documentation.md). Don't forget to check the @ref documentation section.
Make sure you add yourself as an author on every new code file submitted. Make sure you add yourself as an author on every new code file submitted.
If you are providing a fix with significant changes, feel free to add yourself If you are providing a fix with significant changes, feel free to add yourself
@ -65,15 +68,15 @@ API Documentation
@htmlonly @htmlonly
<a href="http://iotdk.intel.com/docs/master/upm/modules.html"><img src="docs/icons/c++.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm"><img src="docs/icons/c++.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="docs/icons/java.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/java"><img src="docs/icons/java.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="docs/icons/python.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/python"><img src="docs/icons/python.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="docs/icons/node.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/node"><img src="docs/icons/node.png"/></a>
@endhtmlonly @endhtmlonly
##### Changelog ### Changelog
Version @ref changelog [here](docs/changelog.md). Version @ref changelog here.
##### Known Limitations ### Known Limitations
List of @ref knownlimitations [here](docs/knownlimitations.md). List of @ref knownlimitations here.

View File

@ -1,8 +1,7 @@
UPM (Useful Packages & Modules) Sensor/Actuator repository for libmraa UPM (Useful Packages & Modules) Sensor/Actuator repository for MRAA
==============
UPM is a high level repository for sensors that use libmraa. Each sensor links UPM is a high level repository for sensors that use MRAA. Each sensor links
to libmraa and are not meant to be interlinked although some groups of sensors to MRAA and are not meant to be interlinked although some groups of sensors
may be. Each sensor contains a header which allows to interface with it. may be. Each sensor contains a header which allows to interface with it.
Typically a sensor is represented as a class and instantiated. Typically a sensor is represented as a class and instantiated.
@ -21,7 +20,7 @@ However implementation and API design is completely up to the developer, some
enumerable sensors for example may provide much clever instantiation. Displays enumerable sensors for example may provide much clever instantiation. Displays
may also create more complex structures in order to interface with them. may also create more complex structures in order to interface with them.
Browse through the list of all [examples](https://github.com/intel-iot-devkit/upm/tree/master/examples). Browse through the list of all [examples](https://github.com/intel-iot-devkit/upm/tree/master/examples/java).
Multi-sensor samples for the starter and specialized kits can be found in the Multi-sensor samples for the starter and specialized kits can be found in the
[iot-devkit-samples](https://github.com/intel-iot-devkit/iot-devkit-samples) repository. [iot-devkit-samples](https://github.com/intel-iot-devkit/iot-devkit-samples) repository.
@ -32,29 +31,32 @@ Supported [sensor list](http://iotdk.intel.com/docs/master/upm/java/modules.html
You can also refer to the [Intel® IoT Developer Zone](https://software.intel.com/iot/sensors). You can also refer to the [Intel® IoT Developer Zone](https://software.intel.com/iot/sensors).
### IDE Integration ### IDE Compatibility
If you would like to create Eclipse IDE projects using the UPM C++ samples, If you would like to create Eclipse IDE projects using the UPM Java samples,
please follow the instructions posted [here](https://software.intel.com/en-us/node/551014). please follow the instructions provided on the Intel Developer Zone IDE page.
This will show you how to import the code and configure your project.
@htmlonly
<a href="https://software.intel.com/iot/software/ide"><img src="../docs/icons/eclipse.png"/></a>
@endhtmlonly
### Building UPM ### Building UPM
See @ref building [here](docs/building.md). See @ref building here.
### Making your own UPM module ### Making your own UPM module
@ref porting [link](docs/porting.md) has more information on making new UPM modules. @ref porting link has more information on making new UPM modules.
There is also an example available for @ref max31855 [sensor](docs/max31855.md). There is also an example available for @ref max31855 sensor.
### Naming conventions and rules for new UPM contributions ### Naming conventions and rules for new UPM contributions
Before you begin development, take a look at our @ref naming [conventions](docs/naming.md). Before you begin development, take a look at our @ref naming conventions.
Also, please read the guidelines for @ref contributions [to UPM](docs/contributions.md). Also, please read the guidelines for @ref contributions to UPM.
Don't forget to check the @ref documentation [section](docs/documentation.md). Don't forget to check the @ref documentation section.
Make sure you add yourself as an author on every new code file submitted. Make sure you add yourself as an author on every new code file submitted.
If you are providing a fix with significant changes, feel free to add yourself If you are providing a fix with significant changes, feel free to add yourself
@ -65,13 +67,15 @@ API Documentation
@htmlonly @htmlonly
<a href="http://iotdk.intel.com/docs/master/upm/modules.html"><img src="../docs/icons/c++.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm"><img src="../docs/icons/c++.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="../docs/icons/java.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/java"><img src="../docs/icons/java.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="../docs/icons/python.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/python"><img src="../docs/icons/python.png"/></a>
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="../docs/icons/node.png"/></a> <a href="http://iotdk.intel.com/docs/master/upm/node"><img src="../docs/icons/node.png"/></a>
@endhtmlonly @endhtmlonly
Version @ref changelog [here](docs/changelog.md). ### Changelog
Version @ref changelog here.
List of @ref knownlimitations [here](docs/knownlimitations.md). ### Known Limitations
List of @ref knownlimitations here.

View File

@ -21,7 +21,16 @@ For building UPM, please follow this `link <https://github.com/intel-iot-devkit/
Multi-sensor samples for the starter and specialized kits can be found in the `iot-devkit-samples <https://github.com/intel-iot-devkit/iot-devkit-samples>`_ Multi-sensor samples for the starter and specialized kits can be found in the `iot-devkit-samples <https://github.com/intel-iot-devkit/iot-devkit-samples>`_
repository. repository.
Individual sensor usage examples for python are available `here <https://github.com/intel-iot-devkit/upm/tree/master/examples/python>`_. Individual sensor usage examples for Python are available `here <https://github.com/intel-iot-devkit/upm/tree/master/examples/python>`_.
``IDE Compatibility``
################
While there is no official IDE provided with our Python libraries, we do recommend the web-based IDE Wyliodrin. It can be used with multiple programming
languages, including Python. More information can be found on the Intel Developer Zone IDE page.
.. image:: ../docs/icons/wyliodrin.png
:target: https://software.intel.com/iot/software/ide
``Making your own UPM Module`` ``Making your own UPM Module``
############################## ##############################
@ -48,8 +57,10 @@ Don't forget to check the documentation `section <https://github.com/intel-iot-d
``List of Available Sensors Drivers`` ``List of Available Sensors Drivers``
###################################### ######################################
Click on the library prefix below to expand the full list of sensors:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 1
modules modules
@ -57,7 +68,7 @@ Don't forget to check the documentation `section <https://github.com/intel-iot-d
########################### ###########################
.. image:: ../docs/icons/c++.png .. image:: ../docs/icons/c++.png
:target: http://iotdk.intel.com/docs/master/upm/modules.html :target: http://iotdk.intel.com/docs/master/upm
.. image:: ../docs/icons/java.png .. image:: ../docs/icons/java.png
:target: http://iotdk.intel.com/docs/master/upm/java :target: http://iotdk.intel.com/docs/master/upm/java
.. image:: ../docs/icons/python.png .. image:: ../docs/icons/python.png

View File

@ -7,8 +7,8 @@
<p>Browse to a module or class using the sidebar to view its API <p>Browse to a module or class using the sidebar to view its API
documentation.</p> documentation.</p>
<p>UPM is a high level repository for sensors that use libmraa. Each <p>UPM is a high level repository for sensors that use MRAA. Each
sensor links to libmraa and are not meant to be interlinked although sensor links to MRAA and are not meant to be interlinked although
some groups of sensors may be. Each sensor contains a header which some groups of sensors may be. Each sensor contains a header which
allows to interface with it. Typically a sensor is represented as a allows to interface with it. Typically a sensor is represented as a
class and instantiated.</p> class and instantiated.</p>
@ -36,6 +36,19 @@
href="https://github.com/intel-iot-devkit/upm/tree/master/examples/javascript">here</a>.</p> href="https://github.com/intel-iot-devkit/upm/tree/master/examples/javascript">here</a>.</p>
</div> </div>
<div class="section" id="ide">
<h3><tt class="docutils literal"><span class="pre">IDE Compatibility</span>
<span class="pre">UPM</span></tt><a class="headerlink"
href="#ide"
title="Permalink to this headline">*</a></h3>
<p>Intel&reg; XDK IoT Edition is the recommended IDE for Node.js development.
Visit the Intel&reg; Developer Zone IDE page for more information on how to get
started.<br>
<a href="https://software.intel.com/iot/software/ide"><img src="../docs/icons/xdk.png"/></a>
</p>
</div>
<div class="section" id="building-upm"> <div class="section" id="building-upm">
<h3><tt class="docutils literal"><span class="pre">Building</span> <h3><tt class="docutils literal"><span class="pre">Building</span>
<span class="pre">UPM</span></tt><a class="headerlink" <span class="pre">UPM</span></tt><a class="headerlink"
@ -109,7 +122,7 @@
title="Permalink to this headline"></a></h1> title="Permalink to this headline"></a></h1>
<p><a href="http://iotdk.intel.com/docs/master/upm/modules.html"><img src="../docs/icons/c++.png" /></a> <p><a href="http://iotdk.intel.com/docs/master/upm"><img src="../docs/icons/c++.png" /></a>
<a href="http://iotdk.intel.com/docs/master/upm/java"><img src="../docs/icons/java.png" /></a> <a href="http://iotdk.intel.com/docs/master/upm/java"><img src="../docs/icons/java.png" /></a>
<a href="http://iotdk.intel.com/docs/master/upm/python"><img src="../docs/icons/python.png" /></a> <a href="http://iotdk.intel.com/docs/master/upm/python"><img src="../docs/icons/python.png" /></a>
<a href="http://iotdk.intel.com/docs/master/upm/node"><img src="../docs/icons/node.png" /></a> <a href="http://iotdk.intel.com/docs/master/upm/node"><img src="../docs/icons/node.png" /></a>

View File

@ -1,40 +1,21 @@
# Mapping C++ sample files to Java sample files # Mapping C++ sample files to Java sample files
a110x-intr.cxx A110X_intrSample.java a110x-intr.cxx A110X_intrSample.java
a110x.cxx A110XSample.java a110x.cxx A110XSample.java
ad8232.cxx AD8232Sample.java
adc121c021.cxx ADC121C021Sample.java adc121c021.cxx ADC121C021Sample.java
adis16448.cxx ADIS16448Sample.java
adxl335.cxx ADXL335Sample.java
adxl345.cxx Adxl345Sample.java adxl345.cxx Adxl345Sample.java
ak8975.cxx AK8975Sample.java
am2315.cxx AM2315Sample.java
apds9002.cxx APDS9002Sample.java
biss0001.cxx BISS0001Sample.java biss0001.cxx BISS0001Sample.java
bmpx8x.cxx BMPX8XSample.java bmpx8x.cxx BMPX8XSample.java
buzzer-sound.cxx Buzzer_soundSample.java buzzer-sound.cxx Buzzer_soundSample.java
cjq4435.cxx CJQ4435Sample.java cjq4435.cxx CJQ4435Sample.java
ds1307.cxx DS1307Sample.java ds1307.cxx DS1307Sample.java
eboled.cxx EBOLEDSample.java
ecs1030.cxx ECS1030Sample.java
enc03r.cxx ENC03RSample.java enc03r.cxx ENC03RSample.java
es08a.cxx ES08ASample.java es08a.cxx ES08ASample.java
flex.cxx FlexSample.java
gp2y0a.cxx GP2Y0ASample.java
grovebutton.cxx GroveButtonSample.java grovebutton.cxx GroveButtonSample.java
grovecircularled.cxx GroveCircularLEDSample.java
grovecollision.cxx GroveCollisionSample.java
groveehr.cxx GroveEHRSample.java groveehr.cxx GroveEHRSample.java
groveeldriver.cxx GroveElDriverSample.java
groveelectromagnet.cxx GroveElectromagnetSample.java
groveemg.cxx GroveEMGSample.java
grovegprs.cxx GroveGPRSSample.java
grovegsr.cxx GroveGSRSample.java
groveled.cxx GroveLEDSample.java groveled.cxx GroveLEDSample.java
grovelinefinder.cxx GroveLineFinderSample.java grovelinefinder.cxx GroveLineFinderSample.java
grovelight.cxx GroveLightSample.java grovelight.cxx GroveLightSample.java
groveloudness.cxx GroveLoudnessSample.java
grovemoisture.cxx GroveMoistureSample.java grovemoisture.cxx GroveMoistureSample.java
groveo2.cxx GroveO2Sample.java
groverelay.cxx GroveRelaySample.java groverelay.cxx GroveRelaySample.java
groverotary.cxx GroveRotarySample.java groverotary.cxx GroveRotarySample.java
grovescam.cxx GROVESCAMSample.java grovescam.cxx GROVESCAMSample.java
@ -48,75 +29,45 @@ h3lis331dl.cxx H3LIS331DLSample.java
hcsr04.cxx HCSR04Sample.java hcsr04.cxx HCSR04Sample.java
hm11.cxx HM11Sample.java hm11.cxx HM11Sample.java
hmc5883l.cxx Hmc5883lSample.java hmc5883l.cxx Hmc5883lSample.java
hp20x.cxx HP20XSample.java
ht9170.cxx HT9170Sample.java
htu21d.cxx HTU21DSample.java htu21d.cxx HTU21DSample.java
hx711.cxx HX711Sample.java
hyld9767.cxx HYLD9767Sample.java
ina132.cxx INA132Sample.java
itg3200.cxx Itg3200Sample.java itg3200.cxx Itg3200Sample.java
jhd1313m1-lcd.cxx Jhd1313m1_lcdSample.java jhd1313m1-lcd.cxx Jhd1313m1_lcdSample.java
joystick12-example.cxx Joystick12_exampleSample.java joystick12.cxx Joystick12Sample.java
l298-stepper.cxx L298_stepperSample.java lcm1602-i2c.cxx Lcm1602_i2cSample.java
l298.cxx L298Sample.java
lcm1602-lcd.cxx Lcm1602_lcdSample.java
ldt0028.cxx LDT0028Sample.java ldt0028.cxx LDT0028Sample.java
lol-example.cxx LoL_exampleSample.java lol.cxx LoLSample.java
lpd8806.cxx LPD8806Sample.java
lsm303.cxx LSM303Sample.java lsm303.cxx LSM303Sample.java
lsm9ds0.cxx LSM9DS0Sample.java
m24lr64e.cxx M24LR64ESample.java m24lr64e.cxx M24LR64ESample.java
max31723.cxx MAX31723Sample.java
max31855.cxx MAX31855Sample.java
max44000.cxx MAX44000Sample.java max44000.cxx MAX44000Sample.java
max5487.cxx MAX5487Sample.java
maxds3231m.cxx MAXDS3231MSample.java
mg811.cxx MG811Sample.java
mic.cxx MicrophoneSample.java mic.cxx MicrophoneSample.java
mlx90614.cxx MLX90614Sample.java
mma7455.cxx MMA7455Sample.java mma7455.cxx MMA7455Sample.java
mma7660.cxx MMA7660Sample.java mma7660.cxx MMA7660Sample.java
mpl3115a2.cxx MPL3115A2Sample.java mpl3115a2.cxx MPL3115A2Sample.java
mpr121.cxx MPR121Sample.java mpr121.cxx MPR121Sample.java
mpu60x0.cxx MPU60X0Sample.java
mpu9150.cxx MPU9150Sample.java mpu9150.cxx MPU9150Sample.java
mpu9250.cxx MPU9250Sample.java
mq2.cxx MQ2Sample.java mq2.cxx MQ2Sample.java
mq3.cxx MQ3Sample.java
mq303a.cxx MQ303ASample.java mq303a.cxx MQ303ASample.java
mq5.cxx MQ5Sample.java mq5.cxx MQ5Sample.java
mq9.cxx MQ9Sample.java
my9221-ledbar.cxx MY9221_ledbarSample.java my9221-ledbar.cxx MY9221_ledbarSample.java
my9221-updown.cxx MY9221_updownSample.java
nrf24l01-broadcast.cxx NRF24L01_broadcastSample.java
nrf24l01-receiver.cxx NRF24L01_receiverSample.java nrf24l01-receiver.cxx NRF24L01_receiverSample.java
nrf24l01-transmitter.cxx NRF24L01_transmitterSample.java nrf24l01-transmitter.cxx NRF24L01_transmitterSample.java
nunchuck.cxx NUNCHUCKSample.java nunchuck.cxx NUNCHUCKSample.java
otp538u.cxx OTP538USample.java otp538u.cxx OTP538USample.java
pca9685.cxx PCA9685Sample.java
pn532-writeurl.cxx PN532_writeurlSample.java
pn532.cxx PN532Sample.java
ppd42ns.cxx PPD42NSSample.java ppd42ns.cxx PPD42NSSample.java
pulsensor.cxx PulsensorSample.java pulsensor.cxx PulsensorSample.java
rfr359f.cxx RFR359FSample.java rfr359f.cxx RFR359FSample.java
rgbringcoder.cxx RGBRingCoderSample.java
rotaryencoder.cxx RotaryEncoderSample.java rotaryencoder.cxx RotaryEncoderSample.java
rpr220-intr.cxx RPR220_intrSample.java rpr220-intr.cxx RPR220_intrSample.java
rpr220.cxx RPR220Sample.java rpr220.cxx RPR220Sample.java
sainsmartks.cxx SAINSMARTKSSample.java
sm130.cxx SM130Sample.java
ssd1306-oled.cxx SSD1306_oledSample.java
ssd1308-oled.cxx SSD1308_oledSample.java ssd1308-oled.cxx SSD1308_oledSample.java
ssd1327-oled.cxx SSD1327_oledSample.java ssd1327-oled.cxx SSD1327_oledSample.java
st7735.cxx ST7735Sample.java st7735.cxx ST7735Sample.java
stepmotor.cxx StepMotorSample.java stepmotor.cxx StepMotorSample.java
ta12200.cxx TA12200Sample.java
tm1637.cxx TM1637Sample.java tm1637.cxx TM1637Sample.java
tp401.cxx TP401Sample.java tp401.cxx TP401Sample.java
tsl2561.cxx TSL2561Sample.java tsl2561.cxx TSL2561Sample.java
ttp223.cxx TTP223Sample.java ttp223.cxx TTP223Sample.java
ublox6.cxx Ublox6Sample.java ublox6.cxx Ublox6Sample.java
uln200xa.cxx ULN200XASample.java uln200xa.cxx ULN200XASample.java
waterlevel.cxx WaterLevelSample.java
wt5001.cxx WT5001Sample.java wt5001.cxx WT5001Sample.java
yg1006.cxx YG1006Sample.java yg1006.cxx YG1006Sample.java

View File

@ -1,404 +1,263 @@
# Extract module name from non-standard example name
macro(get_module_name example_name module_name)
string(LENGTH ${example_name} length)
string(FIND ${example_name} "-" index)
if (${index} GREATER 1)
string(SUBSTRING ${example_name} 0 ${index} substr)
set(${module_name} ${substr})
elseif (${example_name} MATCHES "^grove")
set (${module_name} "grove")
elseif ((${example_name} MATCHES "^mq" AND ${length} EQUAL 3) OR ${example_name} STREQUAL "tp401")
set (${module_name} "gas")
else()
set(${module_name} ${example_name})
endif()
endmacro()
# Set source file, include and linker settings for an example
# If example cannot be built, example_bin is cleared
macro(add_custom_example example_bin example_src example_module_list)
set(found_all_modules TRUE)
foreach (module ${example_module_list})
if (NOT EXISTS "${PROJECT_SOURCE_DIR}/src/${module}")
set(found_all_modules FALSE)
endif()
if (MODULE_LIST)
list(FIND MODULE_LIST ${module} index)
if (${index} EQUAL -1)
set(found_all_modules FALSE)
endif()
endif()
endforeach()
if (found_all_modules)
add_executable (${example_bin} ${example_src})
target_link_libraries (${example_bin} ${CMAKE_THREAD_LIBS_INIT})
foreach (module ${example_module_list})
set(module_dir "${PROJECT_SOURCE_DIR}/src/${module}")
include_directories (${module_dir})
if (${module} STREQUAL "lcd")
set(module "i2clcd")
endif()
target_link_libraries (${example_bin} ${module})
endforeach()
else()
MESSAGE(INFO " Ignored ${example_bin}")
set (example_bin "")
endif()
endmacro()
# Add specified example by name
# Note special case for grove based examples
macro(add_example example_name)
set(example_src "${example_name}.cxx")
set(example_bin "${example_name}-example")
get_module_name(${example_name} module_name)
set(module_dir "${PROJECT_SOURCE_DIR}/src/${module_name}")
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${example_src}"
AND EXISTS ${module_dir}
AND IS_DIRECTORY ${module_dir})
add_custom_example(${example_bin} ${example_src} ${module_name})
if ((NOT ${example_bin} STREQUAL "") AND (${module_name} STREQUAL "grove"))
set(grove_module_path "${PROJECT_SOURCE_DIR}/src/${example_name}")
if (EXISTS ${grove_module_path})
include_directories(${grove_module_path})
target_link_libraries (${example_bin} ${example_name})
endif()
endif()
else()
MESSAGE(INFO " Ignored ${example_bin}")
endif()
endmacro()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples)
add_executable (hmc5883l-example hmc5883l.cxx) # Set the mraa include and link directories prior to adding examples
add_executable (groveled-example groveled.cxx) include_directories (${MRAA_INCLUDE_DIRS})
add_executable (groveled-multi-example groveled-multi.cxx) link_directories (${MRAA_LIBDIR})
add_executable (groverelay-example groverelay.cxx)
add_executable (grovelight-example grovelight.cxx)
add_executable (grovetemp-example grovetemp.cxx)
add_executable (grovebutton-example grovebutton.cxx)
add_executable (groverotary-example groverotary.cxx)
add_executable (groveslide-example groveslide.cxx)
add_executable (lcm1602-lcd-example lcm1602-lcd.cxx)
add_executable (jhd1313m1-lcd-example jhd1313m1-lcd.cxx)
add_executable (buzzer-sound-example buzzer-sound.cxx)
add_executable (my9221-ledbar-example my9221-ledbar.cxx)
add_executable (my9221-updown-example my9221-updown.cxx)
add_executable (nrf24l01-transmitter-example nrf24l01-transmitter.cxx)
add_executable (nrf24l01-receiver-example nrf24l01-receiver.cxx)
add_executable (nrf24l01-broadcast-example nrf24l01-broadcast.cxx)
add_executable (es08a-example es08a.cxx)
add_executable (hcsr04-example hcsr04.cxx)
add_executable (ssd1306-oled-example ssd1306-oled.cxx)
add_executable (ssd1308-oled-example ssd1308-oled.cxx)
add_executable (ssd1327-oled-example ssd1327-oled.cxx)
add_executable (max44000-example max44000.cxx)
add_executable (mma7455-example mma7455.cxx)
add_executable (st7735-example st7735.cxx)
add_executable (max31855-example max31855.cxx)
add_executable (bmpx8x-example bmpx8x.cxx)
add_executable (stepmotor-example stepmotor.cxx)
add_executable (pulsensor-example pulsensor.cxx)
add_executable (mic-example mic.cxx)
add_executable (mpu9150-example mpu9150.cxx)
add_executable (maxds3231m-example maxds3231m.cxx)
add_executable (max31723-example max31723.cxx)
add_executable (max5487-example max5487.cxx)
add_executable (nrf8001-broadcast-example nrf8001-broadcast.cxx)
add_executable (nrf8001-helloworld-example nrf8001-helloworld.cxx)
add_executable (lpd8806-example lpd8806.cxx)
add_executable (mlx90614-example mlx90614.cxx)
add_executable (ecs1030-example ecs1030.cxx)
add_executable (mq2-example mq2.cxx)
add_executable (mq3-example mq3.cxx)
add_executable (mq4-example mq4.cxx)
add_executable (mq5-example mq5.cxx)
add_executable (mq6-example mq6.cxx)
add_executable (mq7-example mq7.cxx)
add_executable (mq8-example mq8.cxx)
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)
add_executable (tsl2561-example tsl2561.cxx)
add_executable (htu21d-example htu21d.cxx)
add_executable (mpl3115a2-example mpl3115a2.cxx)
add_executable (ldt0028-example ldt0028.cxx)
add_executable (am2315-example am2315.cxx)
add_executable (itg3200-example itg3200.cxx)
add_executable (enc03r-example enc03r.cxx)
add_executable (adc121c021-example adc121c021.cxx)
add_executable (ds1307-example ds1307.cxx)
add_executable (a110x-example a110x.cxx)
add_executable (gp2y0a-example gp2y0a.cxx)
add_executable (grovemoisture-example grovemoisture.cxx)
add_executable (groveehr-example groveehr.cxx)
add_executable (ta12200-example ta12200.cxx)
add_executable (grovelinefinder-example grovelinefinder.cxx)
add_executable (grovevdiv-example grovevdiv.cxx)
add_executable (grovewater-example grovewater.cxx)
add_executable (guvas12d-example guvas12d.cxx)
add_executable (mpr121-example mpr121.cxx)
add_executable (ublox6-example ublox6.cxx)
add_executable (yg1006-example yg1006.cxx)
add_executable (wt5001-example wt5001.cxx)
add_executable (ppd42ns-example ppd42ns.cxx)
add_executable (mq303a-example mq303a.cxx)
add_executable (grovespeaker-example grovespeaker.cxx)
add_executable (rfr359f-example rfr359f.cxx)
add_executable (biss0001-example biss0001.cxx)
add_executable (rotaryencoder-example rotaryencoder.cxx)
add_executable (adxl345-example adxl345.cxx)
add_executable (rpr220-example rpr220.cxx)
add_executable (rpr220-intr-example rpr220-intr.cxx)
add_executable (mma7660-example mma7660.cxx)
add_executable (cjq4435-example cjq4435.cxx)
add_executable (adxl335-example adxl335.cxx)
add_executable (hmtrp-example hmtrp.cxx)
add_executable (nunchuck-example nunchuck.cxx)
add_executable (otp538u-example otp538u.cxx)
add_executable (grovecollision-example grovecollision.cxx)
add_executable (groveelectromagnet-example groveelectromagnet.cxx)
add_executable (groveemg-example groveemg.cxx)
add_executable (groveo2-example groveo2.cxx)
add_executable (grovegsr-example grovegsr.cxx)
add_executable (ina132-example ina132.cxx)
add_executable (l298-example l298.cxx)
add_executable (l298-stepper-example l298-stepper.cxx)
add_executable (at42qt1070-example at42qt1070.cxx)
add_executable (grovemd-example grovemd.cxx)
add_executable (grovemd-stepper-example grovemd-stepper.cxx)
add_executable (pca9685-example pca9685.cxx)
add_executable (groveeldriver-example groveeldriver.cxx)
add_executable (adafruitss-example adafruitss.cxx)
add_executable (adafruitms1438-example adafruitms1438.cxx)
add_executable (adafruitms1438-stepper-example adafruitms1438-stepper.cxx)
add_executable (hx711-example hx711.cxx)
add_executable (flex-example flex.cxx)
add_executable (a110x-intr-example a110x-intr.cxx)
add_executable (mhz16-example mhz16.cxx)
add_executable (apds9002-example apds9002.cxx)
add_executable (waterlevel-example waterlevel.cxx)
add_executable (tm1637-example tm1637.cxx)
add_executable (zfm20-example zfm20.cxx)
add_executable (zfm20-register-example zfm20-register.cxx)
add_executable (uln200xa-example uln200xa.cxx)
add_executable (grovewfs-example grovewfs.cxx)
add_executable (isd1820-example isd1820.cxx)
add_executable (sx6119-example sx6119.cxx)
add_executable (si114x-example si114x.cxx)
add_executable (maxsonarez-example maxsonarez.cxx)
add_executable (hm11-example hm11.cxx)
add_executable (ht9170-example ht9170.cxx)
add_executable (h3lis331dl-example h3lis331dl.cxx)
add_executable (ad8232-example ad8232.cxx)
add_executable (grovescam-example grovescam.cxx)
add_executable (m24lr64e-example m24lr64e.cxx)
add_executable (grovecircularled-example grovecircularled.cxx)
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)
add_executable (mpu60x0-example mpu60x0.cxx)
add_executable (ak8975-example ak8975.cxx)
add_executable (lsm9ds0-example lsm9ds0.cxx)
add_executable (eboled-example eboled.cxx)
add_executable (mpu9250-example mpu9250.cxx)
add_executable (loudness-example loudness.cxx)
add_executable (mg811-example mg811.cxx)
add_executable (wheelencoder-example wheelencoder.cxx)
add_executable (sm130-example sm130.cxx)
add_executable (grovegprs-example grovegprs.cxx)
add_executable (lm35-example lm35.cxx)
include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) # If your sample source file matches the name of the module it tests, add it here
include_directories (${PROJECT_SOURCE_DIR}/src/grove) # Exceptions are as follows:
include_directories (${PROJECT_SOURCE_DIR}/src/lcd) # string after first '-' is ignored (e.g. nrf24l01-transmitter maps to nrf24l01)
include_directories (${PROJECT_SOURCE_DIR}/src/buzzer) # mq? will use module gas
include_directories (${PROJECT_SOURCE_DIR}/src/my9221) # grove* will use module grove
include_directories (${PROJECT_SOURCE_DIR}/src/nrf24l01) add_example (hmc5883l)
include_directories (${PROJECT_SOURCE_DIR}/src/servo) add_example (groveled)
include_directories (${PROJECT_SOURCE_DIR}/src/hcsr04) add_example (groverelay)
include_directories (${PROJECT_SOURCE_DIR}/src/max44000) add_example (grovelight)
include_directories (${PROJECT_SOURCE_DIR}/src/mma7455) add_example (grovetemp)
include_directories (${PROJECT_SOURCE_DIR}/src/st7735) add_example (grovebutton)
include_directories (${PROJECT_SOURCE_DIR}/src/max31855) add_example (groverotary)
include_directories (${PROJECT_SOURCE_DIR}/src/bmpx8x) add_example (groveslide)
include_directories (${PROJECT_SOURCE_DIR}/src/stepmotor) add_example (buzzer-sound)
include_directories (${PROJECT_SOURCE_DIR}/src/pulsensor) add_example (nrf24l01-transmitter)
include_directories (${PROJECT_SOURCE_DIR}/src/mic) add_example (nrf24l01-receiver)
include_directories (${PROJECT_SOURCE_DIR}/src/mpu9150) add_example (nrf24l01-broadcast)
include_directories (${PROJECT_SOURCE_DIR}/src/maxds3231m) add_example (hcsr04)
include_directories (${PROJECT_SOURCE_DIR}/src/max31723) add_example (max44000)
include_directories (${PROJECT_SOURCE_DIR}/src/max5487) add_example (mma7455)
include_directories (${PROJECT_SOURCE_DIR}/src/nrf8001) add_example (st7735)
include_directories (${PROJECT_SOURCE_DIR}/src/lpd8806) add_example (max31855)
include_directories (${PROJECT_SOURCE_DIR}/src/mlx90614) add_example (bmpx8x)
include_directories (${PROJECT_SOURCE_DIR}/src/ecs1030) add_example (stepmotor)
include_directories (${PROJECT_SOURCE_DIR}/src/gas) add_example (pulsensor)
include_directories (${PROJECT_SOURCE_DIR}/src/tcs3414cs) add_example (mic)
include_directories (${PROJECT_SOURCE_DIR}/src/th02) add_example (mpu9150)
include_directories (${PROJECT_SOURCE_DIR}/src/ttp223) add_example (maxds3231m)
include_directories (${PROJECT_SOURCE_DIR}/src/lsm303) add_example (max31723)
include_directories (${PROJECT_SOURCE_DIR}/src/joystick12) add_example (max5487)
include_directories (${PROJECT_SOURCE_DIR}/src/lol) add_example (nrf8001-broadcast)
include_directories (${PROJECT_SOURCE_DIR}/src/tsl2561) add_example (nrf8001-helloworld)
include_directories (${PROJECT_SOURCE_DIR}/src/htu21d) add_example (lpd8806)
include_directories (${PROJECT_SOURCE_DIR}/src/mpl3115a2) add_example (mlx90614)
include_directories (${PROJECT_SOURCE_DIR}/src/ldt0028) add_example (ecs1030)
include_directories (${PROJECT_SOURCE_DIR}/src/am2315) add_example (mq2)
include_directories (${PROJECT_SOURCE_DIR}/src/itg3200) add_example (mq3)
include_directories (${PROJECT_SOURCE_DIR}/src/enc03r) add_example (mq4)
include_directories (${PROJECT_SOURCE_DIR}/src/adc121c021) add_example (mq5)
include_directories (${PROJECT_SOURCE_DIR}/src/ds1307) add_example (mq6)
include_directories (${PROJECT_SOURCE_DIR}/src/a110x) add_example (mq7)
include_directories (${PROJECT_SOURCE_DIR}/src/gp2y0a) add_example (mq8)
include_directories (${PROJECT_SOURCE_DIR}/src/grovemoisture) add_example (mq9)
include_directories (${PROJECT_SOURCE_DIR}/src/groveehr) add_example (tp401)
include_directories (${PROJECT_SOURCE_DIR}/src/ta12200) add_example (tcs3414cs)
include_directories (${PROJECT_SOURCE_DIR}/src/grovelinefinder) add_example (th02)
include_directories (${PROJECT_SOURCE_DIR}/src/grovevdiv) add_example (ttp223)
include_directories (${PROJECT_SOURCE_DIR}/src/grovewater) add_example (lsm303)
include_directories (${PROJECT_SOURCE_DIR}/src/guvas12d) add_example (joystick12)
include_directories (${PROJECT_SOURCE_DIR}/src/mpr121) add_example (lol)
include_directories (${PROJECT_SOURCE_DIR}/src/ublox6) add_example (tsl2561)
include_directories (${PROJECT_SOURCE_DIR}/src/yg1006) add_example (htu21d)
include_directories (${PROJECT_SOURCE_DIR}/src/wt5001) add_example (mpl3115a2)
include_directories (${PROJECT_SOURCE_DIR}/src/ppd42ns) add_example (ldt0028)
include_directories (${PROJECT_SOURCE_DIR}/src/mq303a) add_example (am2315)
include_directories (${PROJECT_SOURCE_DIR}/src/grovespeaker) add_example (itg3200)
include_directories (${PROJECT_SOURCE_DIR}/src/rfr359f) add_example (enc03r)
include_directories (${PROJECT_SOURCE_DIR}/src/biss0001) add_example (adc121c021)
include_directories (${PROJECT_SOURCE_DIR}/src/rotaryencoder) add_example (ds1307)
include_directories (${PROJECT_SOURCE_DIR}/src/adxl345) add_example (a110x)
include_directories (${PROJECT_SOURCE_DIR}/src/rpr220) add_example (gp2y0a)
include_directories (${PROJECT_SOURCE_DIR}/src/mma7660) add_example (grovemoisture)
include_directories (${PROJECT_SOURCE_DIR}/src/cjq4435) add_example (groveehr)
include_directories (${PROJECT_SOURCE_DIR}/src/adxl335) add_example (ta12200)
include_directories (${PROJECT_SOURCE_DIR}/src/hmtrp) add_example (grovelinefinder)
include_directories (${PROJECT_SOURCE_DIR}/src/nunchuck) add_example (grovevdiv)
include_directories (${PROJECT_SOURCE_DIR}/src/otp538u) add_example (grovewater)
include_directories (${PROJECT_SOURCE_DIR}/src/grovecollision) add_example (guvas12d)
include_directories (${PROJECT_SOURCE_DIR}/src/groveelectromagnet) add_example (mpr121)
include_directories (${PROJECT_SOURCE_DIR}/src/groveemg) add_example (ublox6)
include_directories (${PROJECT_SOURCE_DIR}/src/groveo2) add_example (yg1006)
include_directories (${PROJECT_SOURCE_DIR}/src/grovegsr) add_example (wt5001)
include_directories (${PROJECT_SOURCE_DIR}/src/ina132) add_example (ppd42ns)
include_directories (${PROJECT_SOURCE_DIR}/src/l298) add_example (mq303a)
include_directories (${PROJECT_SOURCE_DIR}/src/at42qt1070) add_example (grovespeaker)
include_directories (${PROJECT_SOURCE_DIR}/src/grovemd) add_example (rfr359f)
include_directories (${PROJECT_SOURCE_DIR}/src/pca9685) add_example (biss0001)
include_directories (${PROJECT_SOURCE_DIR}/src/groveeldriver) add_example (rotaryencoder)
include_directories (${PROJECT_SOURCE_DIR}/src/adafruitss) add_example (adxl345)
include_directories (${PROJECT_SOURCE_DIR}/src/adafruitms1438) add_example (rpr220)
include_directories (${PROJECT_SOURCE_DIR}/src/hx711) add_example (rpr220-intr)
include_directories (${PROJECT_SOURCE_DIR}/src/flex) add_example (mma7660)
include_directories (${PROJECT_SOURCE_DIR}/src/mhz16) add_example (cjq4435)
include_directories (${PROJECT_SOURCE_DIR}/src/apds9002) add_example (adxl335)
include_directories (${PROJECT_SOURCE_DIR}/src/waterlevel) add_example (hmtrp)
include_directories (${PROJECT_SOURCE_DIR}/src/tm1637) add_example (nunchuck)
include_directories (${PROJECT_SOURCE_DIR}/src/zfm20) add_example (otp538u)
include_directories (${PROJECT_SOURCE_DIR}/src/uln200xa) add_example (grovecollision)
include_directories (${PROJECT_SOURCE_DIR}/src/grovewfs) add_example (groveelectromagnet)
include_directories (${PROJECT_SOURCE_DIR}/src/isd1820) add_example (groveemg)
include_directories (${PROJECT_SOURCE_DIR}/src/sx6119) add_example (groveo2)
include_directories (${PROJECT_SOURCE_DIR}/src/si114x) add_example (grovegsr)
include_directories (${PROJECT_SOURCE_DIR}/src/maxsonarez) add_example (ina132)
include_directories (${PROJECT_SOURCE_DIR}/src/hm11) add_example (l298)
include_directories (${PROJECT_SOURCE_DIR}/src/ht9170) add_example (l298-stepper)
include_directories (${PROJECT_SOURCE_DIR}/src/h3lis331dl) add_example (at42qt1070)
include_directories (${PROJECT_SOURCE_DIR}/src/ad8232) add_example (grovemd)
include_directories (${PROJECT_SOURCE_DIR}/src/grovescam) add_example (grovemd-stepper)
include_directories (${PROJECT_SOURCE_DIR}/src/m24lr64e) add_example (pca9685)
include_directories (${PROJECT_SOURCE_DIR}/src/grovecircularled) add_example (groveeldriver)
include_directories (${PROJECT_SOURCE_DIR}/src/rgbringcoder) add_example (adafruitss)
include_directories (${PROJECT_SOURCE_DIR}/src/hp20x) add_example (adafruitms1438)
include_directories (${PROJECT_SOURCE_DIR}/src/pn532) add_example (adafruitms1438-stepper)
include_directories (${PROJECT_SOURCE_DIR}/src/lsm9ds0) add_example (hx711)
include_directories (${PROJECT_SOURCE_DIR}/src/loudness) add_example (flex)
include_directories (${PROJECT_SOURCE_DIR}/src/mg811) add_example (a110x-intr)
include_directories (${PROJECT_SOURCE_DIR}/src/wheelencoder) add_example (mhz16)
include_directories (${PROJECT_SOURCE_DIR}/src/sm130) add_example (apds9002)
include_directories (${PROJECT_SOURCE_DIR}/src/grovegprs) add_example (waterlevel)
include_directories (${PROJECT_SOURCE_DIR}/src/lm35) add_example (tm1637)
add_example (zfm20)
add_example (zfm20-register)
add_example (uln200xa)
add_example (grovewfs)
add_example (isd1820)
add_example (sx6119)
add_example (si114x)
add_example (maxsonarez)
add_example (hm11)
add_example (ht9170)
add_example (h3lis331dl)
add_example (ad8232)
add_example (grovescam)
add_example (m24lr64e)
add_example (rgbringcoder)
add_example (hp20x)
add_example (pn532)
add_example (pn532-writeurl)
add_example (lsm9ds0)
add_example (loudness)
add_example (mg811)
add_example (wheelencoder)
add_example (sm130)
add_example (grovegprs)
add_example (lm35)
add_example (micsv89)
add_example (xbee)
add_example (urm37)
add_example (urm37-uart)
add_example (adxrs610)
add_example (bma220)
add_example (dfrph)
add_example (mcp9808)
add_example (groveultrasonic)
add_example (sx1276-lora)
add_example (sx1276-fsk)
add_example (ili9341)
if (OPENZWAVE_FOUND)
include_directories(${OPENZWAVE_INCLUDE_DIRS})
add_example (ozw)
endif()
add_example (nlgpio16)
add_example (ads1x15)
if (MODBUS_FOUND)
include_directories(${MODBUS_INCLUDE_DIRS})
add_example (t3311)
add_example (hwxpxx)
endif()
add_example (hdxxvxta)
add_example (rhusb)
add_example (apds9930)
add_example (kxcjk1013)
add_example (ssd1351)
if (HAVE_FIRMATA)
add_example (curieimu)
endif ()
target_link_libraries (hmc5883l-example hmc5883l ${CMAKE_THREAD_LIBS_INIT}) # These are special cases where you specify example binary, source file and module(s)
target_link_libraries (groveled-example grove ${CMAKE_THREAD_LIBS_INIT}) include_directories (${PROJECT_SOURCE_DIR}/src)
target_link_libraries (groveled-multi-example grove ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (groveled-multi-example groveled-multi.cxx grove)
target_link_libraries (groverelay-example grove ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (lcm1602-i2c-example lcm1602-i2c.cxx lcd)
target_link_libraries (grovelight-example grove ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (lcm1602-parallel-example lcm1602-parallel.cxx lcd)
target_link_libraries (grovetemp-example grove ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (jhd1313m1-lcd-example jhd1313m1-lcd.cxx lcd)
target_link_libraries (grovebutton-example grove ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (es08a-example es08a.cxx servo)
target_link_libraries (groverotary-example grove ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (ssd1306-oled-example ssd1306-oled.cxx lcd)
target_link_libraries (groveslide-example grove ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (ssd1308-oled-example ssd1308-oled.cxx lcd)
target_link_libraries (lcm1602-lcd-example i2clcd ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (ssd1327-oled-example ssd1327-oled.cxx lcd)
target_link_libraries (jhd1313m1-lcd-example i2clcd ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (sainsmartks-example sainsmartks.cxx lcd)
target_link_libraries (buzzer-sound-example buzzer ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (eboled-example eboled.cxx lcd)
target_link_libraries (my9221-ledbar-example my9221 ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (mpu60x0-example mpu60x0.cxx mpu9150)
target_link_libraries (my9221-updown-example my9221 ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (ak8975-example ak8975.cxx mpu9150)
target_link_libraries (nrf24l01-transmitter-example nrf24l01 ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (mpu9250-example mpu9250.cxx mpu9150)
target_link_libraries (nrf24l01-receiver-example nrf24l01 ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (groveledbar-example groveledbar.cxx my9221)
target_link_libraries (nrf24l01-broadcast-example nrf24l01 ${CMAKE_THREAD_LIBS_INIT}) add_custom_example (grovecircularled-example grovecircularled.cxx my9221)
target_link_libraries (es08a-example servo ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (hcsr04-example hcsr04 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ssd1306-oled-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ssd1308-oled-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ssd1327-oled-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (max44000-example max44000 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mma7455-example mma7455 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (st7735-example st7735 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (max31855-example max31855 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (bmpx8x-example bmpx8x ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (stepmotor-example stepmotor ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (pulsensor-example pulsensor ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mic-example mic ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mpu9150-example mpu9150 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (maxds3231m-example maxds3231m ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (max31723-example max31723 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (max5487-example max5487 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (nrf8001-broadcast-example nrf8001 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (nrf8001-helloworld-example nrf8001 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (lpd8806-example lpd8806 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mlx90614-example mlx90614 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ecs1030-example ecs1030 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq2-example gas ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq3-example gas ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq4-example gas ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq5-example gas ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq6-example gas ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq7-example gas ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq8-example gas ${CMAKE_THREAD_LIBS_INIT})
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})
target_link_libraries (tsl2561-example tsl2561 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (htu21d-example htu21d ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mpl3115a2-example mpl3115a2 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ldt0028-example ldt0028 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (am2315-example am2315 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (itg3200-example itg3200 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (enc03r-example enc03r ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (adc121c021-example adc121c021 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ds1307-example ds1307 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (a110x-example a110x ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (gp2y0a-example gp2y0a ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovemoisture-example grovemoisture ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (groveehr-example groveehr ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ta12200-example ta12200 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovelinefinder-example grovelinefinder ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovevdiv-example grovevdiv ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovewater-example grovewater ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (guvas12d-example guvas12d ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mpr121-example mpr121 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ublox6-example ublox6 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (yg1006-example yg1006 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (wt5001-example wt5001 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ppd42ns-example ppd42ns ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mq303a-example mq303a ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovespeaker-example grovespeaker ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (rfr359f-example rfr359f ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (biss0001-example biss0001 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (rotaryencoder-example rotaryencoder ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (adxl345-example adxl345 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (rpr220-example rpr220 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (rpr220-intr-example rpr220 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mma7660-example mma7660 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (cjq4435-example cjq4435 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (adxl335-example adxl335 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (hmtrp-example hmtrp ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (nunchuck-example nunchuck ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (otp538u-example otp538u ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovecollision-example grovecollision ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (groveelectromagnet-example groveelectromagnet ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (groveemg-example groveemg ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (groveo2-example groveo2 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovegsr-example grovegsr ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ina132-example ina132 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (l298-example l298 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (l298-stepper-example l298 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (at42qt1070-example at42qt1070 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovemd-example grovemd ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovemd-stepper-example grovemd ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (pca9685-example pca9685 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (groveeldriver-example groveeldriver ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (adafruitss-example adafruitss ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (adafruitms1438-example adafruitms1438 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (adafruitms1438-stepper-example adafruitms1438 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (hx711-example hx711 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (flex-example flex ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (a110x-intr-example a110x ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mhz16-example mhz16 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (apds9002-example apds9002 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (waterlevel-example waterlevel ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (tm1637-example tm1637 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (zfm20-example zfm20 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (zfm20-register-example zfm20 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (uln200xa-example uln200xa ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovewfs-example grovewfs ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (isd1820-example isd1820 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (sx6119-example sx6119 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (si114x-example si114x ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (maxsonarez-example maxsonarez ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (hm11-example hm11 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ht9170-example ht9170 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (h3lis331dl-example h3lis331dl ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ad8232-example ad8232 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovescam-example grovescam ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (m24lr64e-example m24lr64e ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovecircularled-example grovecircularled ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (rgbringcoder-example rgbringcoder ${CMAKE_THREAD_LIBS_INIT})
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})
target_link_libraries (mpu60x0-example mpu9150 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (ak8975-example mpu9150 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (lsm9ds0-example lsm9ds0 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (eboled-example i2clcd ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mpu9250-example mpu9150 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (loudness-example loudness ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (mg811-example mg811 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (wheelencoder-example wheelencoder ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (sm130-example sm130 ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (grovegprs-example grovegprs ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries (lm35-example lm35 ${CMAKE_THREAD_LIBS_INIT})

320
examples/c++/ads1x15.cxx Normal file
View File

@ -0,0 +1,320 @@
/*
* Author: Marc Graham <marc@m2ag.net>
* 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 "mraa.hpp"
#include <iostream>
#include <unistd.h>
#include "ads1015.h"
#include "ads1115.h"
int main()
{
using namespace std;
using namespace upm;
int command;
//Select the device you are testing here and adjust case 6 for the correct sample rates.
//upm::ADS1015 *ads = new upm::ADS1015(1);
upm::ADS1115 *ads = new upm::ADS1115(1, 0x49);
float inputVoltage;
int ans;
do
{
cout << endl;
cout << "1 - get Conversion \t" ;
cout << "2 - get last conversion" << endl;
cout << "3 - get Gain \t\t";
cout << "4 - set Gain" << endl;;
cout << "5 - get Data Rate \t";
cout << "6 - set Data Rate" << endl;
cout << "7 - Set Upper Threshold \t" ;
cout << "8 - Set Lower Threshold \t";
cout << "9 - Display Thresholds \t";
cout << "10 - Set Default Thresholds \t";
cout << "11 - Set conversion ready" << endl;
cout << "12 - get Comp Que \t" ;
cout << "13 - set Comp Que" << endl;
cout << "14 - get Comp Pol \t";
cout << "15 - set Comp Pol" << endl;
cout << "16 - get Comp mode \t";
cout << "17 - set Comp mode " << endl;
cout << "18 - get Comp Latch\t";
cout << "19 - set Comp Latch " << endl;
cout << "20 - get Continuous \t";
cout << "21 - set Continuous \t" << endl;
cout << "-1 - exit" << endl;
cout << "Enter a command: ";
cin >> command;
switch(command)
{
case 2:
cout << ads->getLastSample() << endl;
break;
case 3:
cout << std::hex << ads->getGain() << endl;
break;
case 5:
cout << std::hex << ads->getSPS() << endl;
break;
case 4:
int gain;
ADS1015::ADSGAIN set_gain;
cout << "select one of the following:" << endl;
cout << "1 -> gain 2/3 \t 2 -> gain1 \t 3 -> gain 2" << endl;
cout << "4 -> gain 4 \t 5 -> gain 8 \t 6 -> gain 15" << endl;
cin >> gain;
switch(gain){
case 1:
set_gain = ADS1X15::GAIN_TWOTHIRDS;
break;
case 2:
set_gain = ADS1X15::GAIN_ONE;
break;
case 3:
set_gain = ADS1X15::GAIN_TWO;
break;
case 4:
set_gain = ADS1X15::GAIN_FOUR;
break;
case 5:
set_gain = ADS1X15::GAIN_EIGHT;
break;
case 6:
set_gain = ADS1X15::GAIN_SIXTEEN;
break;
default:
set_gain = ADS1X15::GAIN_ONE;
}
ads->setGain(set_gain);
break;
case 6:
int rate;
/*ADS1015::ADSDATARATE set_rate;
cout << "select one of the following:" << endl;
cout << "1 -> SPS_120 \t 2 -> SPS_250 \t 3 -> SPS_490 \t 4 -> SPS_920" << endl;
cout << "5 -> SPS_1600 \t 6 -> SPS_2400 \t 7 -> SPS_3300" << endl;
cin >> rate;
switch(rate){
case 1:
set_rate = ADS1015::SPS_128;
break;
case 2:
set_rate = ADS1015::SPS_250;
break;
case 3:
set_rate = ADS1015::SPS_490;
break;
case 4:
set_rate = ADS1015::SPS_920;
break;
case 5:
set_rate = ADS1015::SPS_1600;
break;
case 6:
set_rate = ADS1015::SPS_2400;
break;
case 7:
set_rate = ADS1015::SPS_3300;
break;
default:
set_rate = ADS1015::SPS_1600;
} */
ADS1115::ADSDATARATE set_rate;
cout << "select one of the following:" << endl;
cout << "1 -> SPS_8 \t 2 -> SPS_16 \t 3 -> SPS_32 \t 4 -> SPS_64" << endl;
cout << "5 -> SPS_128 \t 6 -> SPS_250 \t 7 -> SPS_475 \t 8-> SPS_860" << endl;
cin >> rate;
switch(rate){
case 1:
set_rate = ADS1115::SPS_8;
break;
case 2:
set_rate = ADS1115::SPS_16;
break;
case 3:
set_rate = ADS1115::SPS_32;
break;
case 4:
set_rate = ADS1115::SPS_64;
break;
case 5:
set_rate = ADS1115::SPS_128;
break;
case 6:
set_rate = ADS1115::SPS_250;
break;
case 7:
set_rate = ADS1115::SPS_475;
break;
case 8:
set_rate = ADS1115::SPS_860;
break;
default:
set_rate = ADS1115::SPS_128;
}
ads->setSPS(set_rate);
break;
case 1:
int mode;
ADS1X15::ADSMUXMODE set_mode;
cout << "select one of the following:" << endl;
cout << "1 -> MUX_0_1 \t 2 -> MUX_0_3 \t 3 -> MUX_1_3 \t 4 -> MUX_2_3" << endl;
cout << "5 -> SINGLE_0 \t 6 -> SINGLE_1 \t 7 -> SINGLE_2 \t 8 -> SINGLE_3" << endl;
cin >> mode;
switch(mode){
case 1:
set_mode = ADS1X15::DIFF_0_1;
break;
case 2:
set_mode = ADS1X15::DIFF_0_3;
break;
case 3:
set_mode = ADS1X15::DIFF_1_3;
break;
case 4:
set_mode = ADS1X15::DIFF_2_3;
break;
case 5:
set_mode = ADS1X15::SINGLE_0;
break;
case 6:
set_mode = ADS1X15::SINGLE_1;
break;
case 7:
set_mode = ADS1X15::SINGLE_2;
break;
case 8:
set_mode = ADS1X15::SINGLE_3;
break;
default:
set_mode = ADS1X15::DIFF_0_1;
break;
}
cout << ads->getSample(set_mode) << endl;
break;
case 7:
cout << " enter a float value: " ;
cin >> inputVoltage;
ads->setThresh(ADS1115::THRESH_HIGH, inputVoltage);
break;
case 8:
cout << " enter a float value: " ;
cin >> inputVoltage;
ads->setThresh(ADS1115::THRESH_LOW, inputVoltage);
break;
case 9:
cout << "Upper " << ads->getThresh(ADS1X15::THRESH_HIGH) << endl;
cout << "Lower " << ads->getThresh(ADS1X15::THRESH_LOW) << endl;
break;
case 10:
ads->setThresh(ADS1115::THRESH_DEFAULT);
break;
case 11:
ads->setThresh(ADS1015::CONVERSION_RDY);
break;
case 12:
cout << ads->getCompQue() << endl;
break;
case 13:
int que;
cout << "select one of the following:" << endl;
cout << "1 -> CQUE_1CONV \t 2 -> CQUE_2CONV \t 3 -> CQUE_3CONV \t 4 -> CQUE_NONE" << endl;
cin >> que;
switch(que){
case 1:
ads->setCompQue(ADS1X15::CQUE_1CONV);
break;
case 2:
ads->setCompQue(ADS1X15::CQUE_2CONV);
break;
case 3:
ads->setCompQue(ADS1X15::CQUE_4CONV);
break;
case 4:
default:
ads->setCompQue(ADS1X15::CQUE_NONE);
break;
}
break;
case 14:
cout << ads->getCompPol() << endl;
break;
case 15:
cout << "select one of the following:" << endl;
cout << "1 -> active high \t 2 -> active low" << endl;
cin >> ans;
if(ans == 1) ads->setCompPol(true);
else ads->setCompPol(false);
break;
case 16:
cout << ads->getCompMode() << endl;
break;
case 17:
cout << "select one of the following:" << endl;
cout << "1 -> Window \t 2 -> Traditional (default)" << endl;
cin >> ans;
if(ans == 1) ads->setCompMode(true);
else ads->setCompMode();
break;
case 18:
cout << ads->getCompLatch() << cout;
break;
case 19:
cout << "select one of the following:" << endl;
cout << "1 -> Latching \t 2 -> Non-latching (default)" << endl;
cin >> ans;
if(ans == 1) ads->setCompLatch(true);
else ads->setCompLatch();
break;
case 20:
cout << ads->getContinuous() << cout;
break;
case 21:
cout << "select one of the following:" << endl;
cout << "1 -> Power Down (default) \t 2 -> Continuous" << endl;
cin >> ans;
if(ans == 1) ads->setContinuous(true);
else ads->setContinuous();
break;
case -1:
break;
default:
break;
}
}while (command != -1 );
delete ads;
return MRAA_SUCCESS;
}

71
examples/c++/adxrs610.cxx Normal file
View File

@ -0,0 +1,71 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "adxrs610.h"
using namespace std;
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main()
{
signal(SIGINT, sig_handler);
//! [Interesting]
// Instantiate a ADXRS610 sensor on analog pin A0 (dataout), and
// analog A1 (temp out) with an analog reference voltage of
// 5.0
upm::ADXRS610 *sensor = new upm::ADXRS610(0, 1, 5.0);
// set a deadband region around the zero point to report 0.0 (optional)
sensor->setDeadband(0.015);
// Every tenth of a second, sample the ADXRS610 and output it's
// corresponding temperature and angular velocity
while (shouldRun)
{
cout << "Vel (deg/s): " << sensor->getAngularVelocity() << endl;
cout << "Temp (C): " << sensor->getTemperature() << endl;
usleep(100000);
}
//! [Interesting]
cout << "Exiting" << endl;
delete sensor;
return 0;
}

63
examples/c++/apds9930.cxx Normal file
View File

@ -0,0 +1,63 @@
/*
* Author: Lay, Kuan Loon <kuan.loon.lay@intel.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "apds9930.h"
using namespace std;
int shouldRun = true;
void
sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int
main()
{
signal(SIGINT, sig_handler);
//! [Interesting]
// Instantiate a Digital Proximity and Ambient Light sensor on iio device 4
upm::APDS9930* light_proximity = new upm::APDS9930(4);
while (shouldRun) {
float lux = light_proximity->getAmbient();
cout << "Luminance value is " << lux << endl;
float proximity = light_proximity->getProximity();
cout << "Proximity value is " << proximity << endl;
sleep(1);
}
//! [Interesting]
cout << "Exiting" << endl;
delete light_proximity;
return 0;
}

70
examples/c++/bma220.cxx Normal file
View File

@ -0,0 +1,70 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "bma220.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]
// Instantiate an BMA220 using default parameters (bus 0, addr 0x0a)
upm::BMA220 *sensor = new upm::BMA220();
// Output data every half second until interrupted
while (shouldRun)
{
sensor->update();
float x, y, z;
sensor->getAccelerometer(&x, &y, &z);
cout << "Accelerometer: ";
cout << "AX: " << x << " AY: " << y << " AZ: " << z << endl;
usleep(500000);
}
//! [Interesting]
cout << "Exiting..." << endl;
delete sensor;
return 0;
}

81
examples/c++/curieimu.cxx Normal file
View File

@ -0,0 +1,81 @@
/*
* Author: Brendan Le Foll <brendan.le.foll@intel.com>
* Author: Ron Evans (@deadprogram)
* Author: Justin Zemlyansky (@JustInDevelopment)
* Copyright (c) 2016 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 <unistd.h>
#include <iostream>
#include "curieimu.hpp"
#include "mraa.h"
#include "mraa/firmata.h"
#include <math.h>
int
main(int argc, char **argv)
{
//! [Interesting]
mraa_init();
mraa_add_subplatform(MRAA_GENERIC_FIRMATA, "/dev/ttyACM0");
upm::CurieImu* sensor = new upm::CurieImu();
std::cout << "temperature is: " << (sensor->getTemperature() * pow(0.5, 9) + 23) << std::endl;
sensor->updateAccel();
int x = sensor->getAccelX(),
y = sensor->getAccelY(),
z = sensor->getAccelZ();
printf("accelerometer is: %d, %d, %d\n", x, y, z);
sensor->updateGyro();
int a = sensor->getGyroX(),
b = sensor->getGyroY(),
c = sensor->getGyroZ();
printf("gyroscope is: %d, %d, %d\n", a, b, c);
int axis, direction;
sensor->enableShockDetection(true);
for(int i=0; i<300; i++) {
if (sensor->isShockDetected()) {
sensor->getNextShock();
axis = sensor->getAxis();
direction = sensor->getDirection();
printf("shock data is: %d, %d\n", axis, direction);
}
usleep(10000);
}
sensor->updateMotion();
int m = sensor->getAccelX(),
n = sensor->getAccelY(),
o = sensor->getAccelZ(),
p = sensor->getGyroX(),
q = sensor->getGyroY(),
r = sensor->getGyroZ();
printf("motion is: %d, %d, %d, %d, %d, %d\n", m, n, o, p, q, r);
delete sensor;
return 0;
}

76
examples/c++/dfrph.cxx Normal file
View File

@ -0,0 +1,76 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "dfrph.h"
using namespace std;
bool shouldRun = true;
#define DFRPH_AREF 5.0
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main()
{
signal(SIGINT, sig_handler);
//! [Interesting]
// Instantiate a DFRPH sensor on analog pin A0, with an analog
// reference voltage of DFRPH_AREF
upm::DFRPH *sensor = new upm::DFRPH(0, DFRPH_AREF);
// After calibration, set the offset (based on calibration with a pH
// 7.0 buffer solution). See the UPM sensor documentation for
// calibrations instructions.
sensor->setOffset(0.065);
// Every second, sample the pH and output it's corresponding
// analog voltage.
while (shouldRun)
{
cout << "Detected volts: " << sensor->volts() << endl;
cout << "pH value: " << sensor->pH() << endl;
cout << endl;
sleep(1);
}
//! [Interesting]
cout << "Exiting" << endl;
delete sensor;
return 0;
}

View File

@ -34,10 +34,11 @@ int main(int argc, char **argv)
upm::EBOLED *lcd = new upm::EBOLED(); upm::EBOLED *lcd = new upm::EBOLED();
lcd->clear(); lcd->clear();
lcd->setCursor(2, 0); lcd->setCursor(10, 15);
lcd->write("Hello"); lcd->write("Hello");
lcd->setCursor(3, 5); lcd->setCursor(30, 15);
lcd->write("World!"); lcd->write("World!");
lcd->refresh();
cout << "Sleeping for 5 seconds..." << endl; cout << "Sleeping for 5 seconds..." << endl;
sleep(5); sleep(5);

View File

@ -43,9 +43,9 @@ int main()
//! [Interesting] //! [Interesting]
// Instantiate a Grove Circular LED on gpio pins 5 and 4 // Instantiate a Grove Circular LED on D9 for data, D8 for clock
upm::GroveCircularLED *circle = new upm::GroveCircularLED(5, 4); upm::GroveCircularLED *circle = new upm::GroveCircularLED(9, 8);
int level = 0; int level = 0;
while (shouldRun) while (shouldRun)
@ -54,6 +54,7 @@ int main()
level = (level + 1) % 24; level = (level + 1) % 24;
usleep(100000); usleep(100000);
} }
//! [Interesting] //! [Interesting]
cout << "Exiting" << endl; cout << "Exiting" << endl;

View File

@ -25,7 +25,7 @@
#include <unistd.h> #include <unistd.h>
#include <iostream> #include <iostream>
#include <signal.h> #include <signal.h>
#include "my9221.h" #include "groveledbar.h"
using namespace std; using namespace std;
@ -42,28 +42,27 @@ int main ()
{ {
signal(SIGINT, sig_handler); signal(SIGINT, sig_handler);
//! [Interesting] //! [Interesting]
// Instantiate a MY9221, we use D2 for the data, and D3 for the // Instantiate a GroveLEDBar, we use D8 for the data, and D9 for the
// data clock. This was tested with a Grove LED bar. // clock. This was tested with a Grove LED bar.
upm::GroveLEDBar* bar = new upm::GroveLEDBar(8, 9);
upm::MY9221* bar = new upm::MY9221(2, 3);
while (shouldRun) while (shouldRun)
{ {
// count up from green to red // count up from green to red
for (int i=1; i<=10; i++) for (int i=0; i<=10; i++)
{ {
bar->setBarLevel(i, true); bar->setBarLevel(i, true);
usleep(50000); usleep(100000);
} }
sleep(1); sleep(1);
// count down from red to green // count down from red to green
for (int i=1; i<=10; i++) for (int i=0; i<=10; i++)
{ {
bar->setBarLevel(i, false); bar->setBarLevel(i, false);
usleep(50000); usleep(100000);
} }
sleep(1); sleep(1);
} }
@ -71,7 +70,7 @@ int main ()
cout << "Exiting..." << endl; cout << "Exiting..." << endl;
// turn off the LED's // turn off the LED's
bar->setBarLevel(0, true); bar->setBarLevel(0);
delete bar; delete bar;
return 0; return 0;

View File

@ -1,6 +1,8 @@
/* /*
* Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com> * Author: Jun Kato <i@junkato.jp>
* Copyright (c) 2014 Intel Corporation. * Copyright (c) 2015 Jun Kato.
*
* Thanks to Seeed Studio for a working arduino sketch
* *
* Permission is hereby granted, free of charge, to any person obtaining * Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the * a copy of this software and associated documentation files (the
@ -24,40 +26,37 @@
#include <unistd.h> #include <unistd.h>
#include <iostream> #include <iostream>
#include "my9221.h" #include "groveultrasonic.h"
#include <signal.h> #include <signal.h>
#include <stdlib.h>
#include <sys/time.h>
int running = 0; upm::GroveUltraSonic *sonar = NULL;
bool running = true;
void void
sig_handler(int signo) sig_handler(int signo)
{ {
printf("got signal\n");
if (signo == SIGINT) { if (signo == SIGINT) {
printf("exiting application\n"); running = false;
running = 1;
} }
} }
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
//! [Interesting] signal(SIGINT, sig_handler);
upm::MY9221 *bar = new upm::MY9221(8, 9); //! [Interesting]
// upm::GroveUltraSonic *sonar = NULL;
signal(SIGINT, sig_handler); sonar = new upm::GroveUltraSonic(2);
while(running) {
while (!running) { int width = sonar->getDistance();
for (int idx = 1; idx < 11; idx++) { printf("Echo width = %d\n", width);
bar->setBarLevel (idx); printf("Distance inches = %f.2\n\n", width/148.0);
usleep(1000); sleep(3);
} }
} //! [Interesting]
//! [Interesting] printf("exiting application\n");
delete sonar;
std::cout << "exiting application" << std::endl; return 0;
delete bar;
return 0;
} }

View File

@ -42,15 +42,10 @@ sig_handler(int signo)
} }
//! [Interesting] //! [Interesting]
void
interrupt (void * args) {
sonar->ackEdgeDetected ();
}
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
sonar = new upm::HCSR04(5, 6, &interrupt); sonar = new upm::HCSR04(5, 6);
signal(SIGINT, sig_handler); signal(SIGINT, sig_handler);
sleep(1); sleep(1);

79
examples/c++/hdxxvxta.cxx Normal file
View File

@ -0,0 +1,79 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* Copyright (c) 2016 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "hdxxvxta.h"
using namespace std;
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main(int argc, char **argv)
{
signal(SIGINT, sig_handler);
//! [Interesting]
cout << "Initializing..." << endl;
// Instantiate an HDXXVXTA instance, using A1 for humidity and A0
// for temperature
upm::HDXXVXTA *sensor = new upm::HDXXVXTA(1, 0);
// update and print available values every second
while (shouldRun)
{
// update our values from the sensor
sensor->update();
// we show both C and F for temperature
cout << "Temperature: " << sensor->getTemperature()
<< " C / " << sensor->getTemperature(true) << " F"
<< endl;
cout << "Humidity: " << sensor->getHumidity()
<< " %" << endl;
cout << endl;
sleep(1);
}
cout << "Exiting..." << endl;
delete sensor;
//! [Interesting]
return 0;
}

102
examples/c++/hwxpxx.cxx Normal file
View File

@ -0,0 +1,102 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* Copyright (c) 2016 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "hwxpxx.h"
using namespace std;
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main(int argc, char **argv)
{
signal(SIGINT, sig_handler);
//! [Interesting]
string defaultDev = "/dev/ttyUSB0";
// if an argument was specified, use it as the device instead
if (argc > 1)
defaultDev = string(argv[1]);
cout << "Using device " << defaultDev << endl;
cout << "Initializing..." << endl;
// Instantiate an HWXPXX instance, using MODBUS slave address 3, and
// default comm parameters (19200, 8, N, 2)
upm::HWXPXX *sensor = new upm::HWXPXX(defaultDev, 3);
// output the Slave ID (manufacturer, model, serno)
cout << "Slave ID: " << sensor->getSlaveID() << endl;
// stored temperature and humidity offsets
cout << "Temperature Offset: " << sensor->getTemperatureOffset()
<< endl;
cout << "Humidity Offset: " << sensor->getHumidityOffset()
<< endl;
cout << endl;
// update and print available values every second
while (shouldRun)
{
// update our values from the sensor
sensor->update();
// we show both C and F for temperature
cout << "Temperature: " << sensor->getTemperature()
<< " C / " << sensor->getTemperature(true) << " F"
<< endl;
cout << "Humidity: " << sensor->getHumidity()
<< " %" << endl;
cout << "Slider: " << sensor->getSlider() << " %" << endl;
cout << "Override Switch Status: " << sensor->getOverrideSwitchStatus()
<< endl;
cout << endl;
sleep(1);
}
cout << "Exiting..." << endl;
delete sensor;
//! [Interesting]
return 0;
}

84
examples/c++/ili9341.cxx Normal file
View File

@ -0,0 +1,84 @@
/**
* Author: Shawn Hymel
* Copyright (c) 2016 SparkFun Electronics
*
* 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 <unistd.h>
#include "ili9341.h"
int main(int argc, char **argv) {
//! [Interesting]
// Pins (Edison)
// CS_LCD GP44 (MRAA 31)
// CS_SD GP43 (MRAA 38) unused
// DC GP12 (MRAA 20)
// RESEST GP13 (MRAA 14)
upm::ILI9341 * lcd = new upm::ILI9341(31, 38, 20, 14);
// Fill the screen with a solid color
lcd->fillScreen(lcd->color565(0, 40, 16));
// Draw some shapes
lcd->drawFastVLine(10, 10, 100, ILI9341_RED);
lcd->drawFastHLine(20, 10, 50, ILI9341_CYAN);
lcd->drawLine(160, 30, 200, 60, ILI9341_GREEN);
lcd->fillRect(20, 30, 75, 60, ILI9341_ORANGE);
lcd->drawCircle(70, 50, 20, ILI9341_PURPLE);
lcd->fillCircle(120, 50, 20, ILI9341_PURPLE);
lcd->drawTriangle(50, 100, 10, 140, 90, 140, ILI9341_YELLOW);
lcd->fillTriangle(150, 100, 110, 140, 190, 140, ILI9341_YELLOW);
lcd->drawRoundRect(20, 150, 50, 30, 10, ILI9341_RED);
lcd->drawRoundRect(130, 150, 50, 30, 10, ILI9341_RED);
lcd->fillRoundRect(75, 150, 50, 30, 10, ILI9341_RED);
// Write some text
lcd->setCursor(0, 200);
lcd->setTextColor(ILI9341_LIGHTGREY);
lcd->setTextWrap(true);
lcd->setTextSize(1);
lcd->print("Text 1\n");
lcd->setTextSize(2);
lcd->print("Text 2\n");
lcd->setTextSize(3);
lcd->print("Text 3\n");
lcd->setTextSize(4);
lcd->print("Text 4\n");
// Test screen rotation
for(int r = 0; r < 4; r++) {
lcd->setRotation(r);
lcd->fillRect(0, 0, 5, 5, ILI9341_WHITE);
sleep(1);
}
// Invert colors, wait, then revert back
lcd->invertDisplay(true);
sleep(2);
lcd->invertDisplay(false);
// Don't forget to free up that memory!
delete lcd;
//! [Interesting]
return 0;
}

View File

@ -0,0 +1,75 @@
/*
* Author: Lay, Kuan Loon <kuan.loon.lay@intel.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "kxcjk1013.h"
using namespace std;
int shouldRun = true;
upm::KXCJK1013* accelerometer;
void
sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
void
data_callback(char* data)
{
float x, y, z;
accelerometer->extract3Axis(data, &x, &y, &z);
printf("%.1f %.1f %.1f\n", x, y, z);
// usleep(100);
}
int
main()
{
signal(SIGINT, sig_handler);
//! [Interesting]
// Instantiate a KXCJK1013 Accelerometer Sensor on iio device 0
accelerometer = new upm::KXCJK1013(0);
accelerometer->setScale(0.019163);
accelerometer->setSamplingFrequency(25.0);
accelerometer->enable3AxisChannel();
accelerometer->installISR(data_callback, NULL);
accelerometer->enableBuffer(16);
while (shouldRun) {
sleep(1);
}
accelerometer->disableBuffer();
//! [Interesting]
cout << "Exiting" << endl;
delete accelerometer;
return 0;
}

View File

@ -32,12 +32,16 @@ main(int argc, char **argv)
lcd->setCursor(0,0); lcd->setCursor(0,0);
lcd->write("Hello World"); lcd->write("Hello World");
//! [Interesting] //! [Interesting]
sleep(3);
lcd->setCursor(1,2); lcd->setCursor(1,2);
lcd->write("Hello World"); lcd->write("Hello World");
sleep(3);
lcd->setCursor(2,4); lcd->setCursor(2,4);
lcd->write("Hello World"); lcd->write("Hello World");
sleep(3);
lcd->setCursor(3,6); lcd->setCursor(3,6);
lcd->write("Hello World"); lcd->write("Hello World");
sleep(3);
delete lcd; delete lcd;
return 0; return 0;

View File

@ -0,0 +1,54 @@
/*
* Author: Sergey Kiselev <sergey.kiselev@intel.com>
* Author: Yevgeniy Kiveish <yevgeniy.kiveisha@intel.com>
* Copyright (c) 2014 - 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 <lcm1602.h>
int
main(int argc, char **argv)
{
//! [Interesting]
// LCD connection:
// LCD RS pin to digital pin 8
// LCD Enable pin to digital pin 13
// LCD D4 pin to digital pin 2
// LCD D5 pin to digital pin 3
// LCD D6 pin to digital pin 4
// LCD D7 pin to digital pin 5
// LCD R/W pin to ground
// 10K trimmer potentiometer:
// ends to +5V and ground
// wiper to LCD VO pin (pin 3)
upm::Lcm1602 *lcd = new upm::Lcm1602(8, 13, 2, 3, 4, 5, 20, 2);
lcd->setCursor(0,0);
lcd->write("Hello World");
lcd->setCursor(1,2);
lcd->write("Hello World");
printf("Sleeping for 5 seconds\n");
sleep(5);
delete lcd;
//! [Interesting]
return 0;
}

163
examples/c++/mcp9808.cxx Normal file
View File

@ -0,0 +1,163 @@
#include <iostream>
#include <unistd.h>
#include "mcp9808.h"
#include "mraa.hpp"
int main()
{
using namespace std;
//! [Interesting]
int command;
upm::MCP9808 *temp = new upm::MCP9808(6);
do
{
cout << endl;
cout << "1 - read temp \t" ;
cout << "2 - sleep mode \t";
cout << "3 - wake up" << endl;
cout << "4 - set mode to " << (temp->isCelsius() == true ? "Fahrenheit" : "Celcius") << endl;
cout << "5 - show status bits" << endl;
cout << "6 - Set Tcrit \t" ;
cout << "7 - Set Tupper \t" ;
cout << "8 - Set Tlower " << endl;
cout << "9 - Display monitor temps " << endl;
cout << "10 - Enable alert default\t";
cout << "11 - Enable alert interrupt" << endl;
cout << "12 - Clear interrupt \t" ;
cout << "13 - Clear alert mode" << endl;
cout << "14 - Get Hysteresis\t";
cout << "15 - Set Hysteresis" << endl;
cout << "16 - Get Resolution\t";
cout << "17 - Set Resolution" << endl;
cout << "18 - Get Manufacturer ID"<< endl;
cout << "19 - Get Device ID" << endl;
cout << "-1 - exit" << endl;
cout << "Enter a command: ";
cin >> command;
switch(command)
{
float t;
case 1:
std::cout << "Temp: " << temp->getTemp() << "° " << (temp->isCelsius()? "Celsius" : "Fahrenheit")<< std::endl;
break;
case 2:
cout << "shutdown sensor (sleep mode)" << endl;
temp->shutDown();
break;
case 3:
cout << "wake up sensor" << endl;
temp->shutDown(false);
break;
case 4:
cout << "set mode to " << (temp->isCelsius() ? "Fahrenheit" : "Celcius") << endl;
temp->setMode(!temp->isCelsius());
break;
case 5:
cout << "Tcrit = " << temp->isTcrit();
cout << " Tupper = " << temp->isTupper();
cout << " Tlower = " << temp->isTlower();
break;
case 6:
cout << "enter a value";
cin >> t;
temp->setMonitorReg(temp->CRIT_TEMP, t);
break;
case 7:
cout << "enter a value";
cin >> t;
temp->setMonitorReg(temp->UPPER_TEMP, t);
break;
case 8:
cout << "enter a value";
cin >> t;
temp->setMonitorReg(temp->LOWER_TEMP, t);
break;
case 9:
cout << "tcrit = " << temp->getMonitorReg(temp->CRIT_TEMP) << endl;
cout << "tupper = " << temp->getMonitorReg(temp->UPPER_TEMP) << endl;
cout << "tlower = " << temp->getMonitorReg(temp->LOWER_TEMP) << endl;
break;
case 10:
cout << "set alert mode default" ;
temp->setAlertMode(temp->ALERTCTRL);
break;
case 11:
cout << "set alert mode interrupt";
temp->setAlertMode(temp->ALERTMODE | temp->ALERTCTRL );
break;
case 12:
temp->clearInterrupt();
break;
case 13:
cout << "Clear alerts" << endl;
temp->clearAlertMode();
break;
case 14:
cout << "Hysteresis: " << temp->getHysteresis() << endl;
break;
case 15:
int u;
cout << "enter 1 to 4";
cin >> u ;
switch(u)
{
case 1:
temp->setHysteresis(temp->HYST_0);
break;
case 2:
temp->setHysteresis(temp->HYST_1_5);
break;
case 3:
temp->setHysteresis(temp->HYST_3_0);
break;
case 4:
default:
temp->setHysteresis(temp->HYST_6_0);
break;
}
break;
case 16:
cout << "Resolution: " << temp->getResolution() << endl;
break;
case 17:
int v;
cout << "enter 1 to 4";
cin >> v ;
switch(v)
{
case 1:
temp->setResolution(temp->RES_LOW);
break;
case 2:
temp->setResolution(temp->RES_MEDIUM);
break;
case 3:
temp->setResolution(temp->RES_HIGH);
break;
case 4:
default:
temp->setResolution(temp->RES_PRECISION);
break;
}
break;
case 18:
cout << "Manufacturer ID: " << std::hex << temp->getManufacturer() << endl;
break;
case 19:
cout << "Get device ID: " << std::hex << temp->getDevicedId() << endl;
break;
case -1:
break;
default:
cout << endl << "That option is not available. Try again" << endl;
break;
}
}while (command != -1 );
//! [Interesting]
return MRAA_SUCCESS;
}

View File

@ -62,14 +62,15 @@ int main (int argc, char **argv)
sleep(1); sleep(1);
int gas;
int temp;
while (shouldRun) while (shouldRun)
{ {
co2->getData(&gas, &temp); if(!co2->getData()){
cout << "CO2 concentration: " << gas << " PPM, " cerr << "Failed to retrieve data" << endl;
<< "Temperature (in C): " << temp <<endl; continue;
}
cout << "CO2 concentration: " << co2->getGas() << " PPM, "
<< "Temperature (in C): " << co2->getTemperature() <<endl;
sleep(2); sleep(2);
} }

78
examples/c++/micsv89.cxx Normal file
View File

@ -0,0 +1,78 @@
/*
* Author: Marc Graham <marc@m2ag.net>
* 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 <iostream>
#include <unistd.h>
#include <signal.h>
#include "micsv89.h"
/*
* An example for using the MICSV89 sensor library.
* The MICSV89 comes in 4 variants, PWM and I2c
* in 3.3 volts and 5 volts. This library only implements
* the I2c version of the device.
*
* Device output is not valid until a warm up of 15 minutes
* of operation.
*
* Additional linker flags: -lupm-micsv89
*/
using namespace std;
volatile int running = 1;
void
sig_handler(int signo)
{
if (signo == SIGINT) {
cout << "Exiting program." << endl;
running = 0;
}
}
int main()
{
signal(SIGINT, sig_handler);
//! [Interesting]
upm::MICSV89 *sensor = new upm::MICSV89(6);
while(running)
{
sensor->update();
while(!sensor->valid());
cout << "co2: " << sensor->co2equ() << endl;
cout << "short: " << sensor->vocshort() << endl;
cout << "tvoc: " << sensor->tvoc() << endl;
cout << "resistor: " << sensor->resistor() << endl;
cout << "****************************" << endl;
sleep(5);
}
delete sensor;
//! [Interesting]
return MRAA_SUCCESS;
}

52
examples/c++/nlgpio16.cxx Normal file
View File

@ -0,0 +1,52 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include <stdio.h>
#include "nlgpio16.h"
using namespace std;
using namespace upm;
int main(int argc, char **argv)
{
// Instantiate a NLGPIO16 Module on the default UART (/dev/ttyACM0)
upm::NLGPIO16* sensor = new upm::NLGPIO16();
// get the Version
cout << "Device Version: " << sensor->getVersion() << endl;
// read the gpio at pin 3
cout << "GPIO 3 Value: " << sensor->gpioRead(3) << endl;
// read the analog voltage at pin 5
cout << "Analog 5 Voltage: " << sensor->analogReadVolts(5) << endl;
// set the gpio at pin 14 to HIGH
sensor->gpioSet(14);
delete sensor;
return 0;
}
//! [Interesting]

141
examples/c++/ozw.cxx Normal file
View File

@ -0,0 +1,141 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include "ozw.h"
using namespace std;
int main(int argc, char **argv)
{
//! [Interesting]
string defaultDev = "/dev/ttyACM0";
// if an argument was specified, use it as the device instead
if (argc > 1)
defaultDev = string(argv[1]);
// Instantiate an OZW instance
upm::OZW *sensor = new upm::OZW();
// The first thing to do is create options, then lock them when done.
sensor->optionsCreate();
sensor->optionsLock();
// Next, initialize it.
cout << "Initializing, this may take awhile depending on your ZWave network"
<< endl;
if (!sensor->init(defaultDev))
{
cerr << "Init failed." << endl;
return 0;
}
cout << "Initialization complete" << endl;
cout << "Dumping nodes..." << endl;
sensor->dumpNodes();
// The following is example output of dumpNodes:
//
// Dumping nodes...
// Node 1: Z-Stick Gen5
// Node 2: Smart Switch 6
// Index: 0, Type: bool, Label: Switch, Value: False
// Index: 2, Type: float, Label: Energy, Value: 1.190 kWh
// Index: 3, Type: float, Label: Previous Reading, Value: 1.190 kWh
// Index: 4, Type: int32, Label: Interval, Value: 1521 seconds
// Index: 5, Type: float, Label: Power, Value: 0.000 W
// Index: 6, Type: float, Label: Voltage, Value: 121.256 V
// Index: 7, Type: float, Label: Current, Value: 0.000 A
// Index: 8, Type: bool, Label: Exporting, Value: False
// Index: 45, Type: list, Label: Day, Value: Friday
// Index: 46, Type: byte, Label: Hour, Value: 5
// Index: 47, Type: byte, Label: Minute, Value: 53
// Node 3: Multi Sensor
// Index: 0, Type: bool, Label: Sensor, Value: True
// Index: 1, Type: float, Label: Temperature, Value: 72.8 F
// Index: 2, Type: float, Label: Luminance, Value: 4 lux
// Index: 3, Type: float, Label: Relative Humidity, Value: 22 %
// Index: 17, Type: byte, Label: Battery Level, Value: 98 %
// Node 5: Minimote
// Node 6: Smart Energy Switch
// Index: 0, Type: bool, Label: Switch, Value: False
// Index: 2, Type: float, Label: Power, Value: 0.000 W
// Index: 3, Type: float, Label: Energy, Value: 1.609 kWh
// Index: 4, Type: float, Label: Previous Reading, Value: 1.609 kWh
// Index: 5, Type: int32, Label: Interval, Value: 1521 seconds
// Index: 6, Type: float, Label: Power, Value: 0.000 W
// Index: 7, Type: float, Label: Previous Reading, Value: 1.609 W
// Index: 8, Type: int32, Label: Interval, Value: 1521 seconds
// Index: 9, Type: bool, Label: Exporting, Value: False
// Node 7: Smart Energy Switch
// Index: 0, Type: bool, Label: Switch, Value: False
// Index: 2, Type: float, Label: Power, Value: 0.000 W
// Index: 3, Type: float, Label: Energy, Value: 0.000 kWh
// Index: 4, Type: float, Label: Previous Reading, Value: 0.000 kWh
// Index: 5, Type: int32, Label: Interval, Value: 1521 seconds
// Index: 6, Type: float, Label: Power, Value: 0.000 W
// Index: 7, Type: float, Label: Previous Reading, Value: 0.000 W
// Index: 8, Type: int32, Label: Interval, Value: 1521 seconds
// Index: 9, Type: bool, Label: Exporting, Value: False
//
// So, with the above in mind:
//
// 1. Query the temperature on node 3 and print it out (as a
// string), along with the units of measure:
//
// cout << "Temperature: " << sensor->getValueAsString(3, 1)
// << " " << sensor->getValueUnits(3, 1) << endl;
//
// 2. query the same temperature as a float:
//
// float temperature = sensor->getValueAsFloat(3, 1);
//
// 3. Turn on the light plugged into the switch on Node 7, wait 5
// seconds, then turn it back off again:
//
// cout << "Turning ON node 7" << endl;
// sensor->setValueAsBool(7, 0, true);
//
// cout << "Sleeping for 5 seconds" << endl;
// sleep(5);
//
// cout << "Turning OFF node 7" << endl;
// sensor->setValueAsBool(7, 0, false);
//! [Interesting]
cout << "Exiting..." << endl;
delete sensor;
return 0;
}

View File

@ -27,6 +27,8 @@
#include "pulsensor.h" #include "pulsensor.h"
#include <signal.h> #include <signal.h>
using namespace upm;
int doWork = 0; int doWork = 0;
void void

88
examples/c++/rhusb.cxx Normal file
View File

@ -0,0 +1,88 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* Copyright (c) 2016 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "rhusb.h"
using namespace std;
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main(int argc, char **argv)
{
signal(SIGINT, sig_handler);
//! [Interesting]
string defaultDev = "/dev/ttyUSB0";
// if an argument was specified, use it as the device instead
if (argc > 1)
defaultDev = string(argv[1]);
cout << "Using device " << defaultDev << endl;
cout << "Initializing..." << endl;
// Instantiate an RHUSB instance on defaultDev
upm::RHUSB sensor(defaultDev);
// output the firmware ID
cout << "Firmware ID: " << sensor.getFirmwareID() << endl;
cout << endl;
// update and print available values every second
while (shouldRun)
{
// update our values from the sensor
sensor.update();
// we show both C and F for temperature
cout << "Temperature: " << sensor.getTemperature()
<< " C / " << sensor.getTemperature(true) << " F"
<< endl;
cout << "Humidity: " << sensor.getHumidity()
<< " %" << endl;
cout << endl;
sleep(1);
}
cout << "Exiting..." << endl;
//! [Interesting]
return 0;
}

61
examples/c++/ssd1351.cxx Normal file
View File

@ -0,0 +1,61 @@
#include "mraa.hpp"
#include <iostream>
#include <unistd.h>
#include "ssd1351.h"
#define BLACK 0x0000
#define WHITE 0xFFFF
#define INTEL_BLUE 0x0BF8
int main(int argc, char **argv)
{
// Define colors (16-bit RGB on 5/6/5 bits)
int colors[] = {0x0000, 0x000F, 0x03E0, 0x03EF,
0x7800, 0x780F, 0x7BE0, 0xC618,
0x7BEF, 0x001F, 0x07E0, 0x07FF,
0xF800, 0xF81F, 0xFFE0, 0xFFFF};
//! [Interesting]
// Initialize display with pins
// oc = 0, dc = 1, r = 2, si = 11, cl = 13
upm::SSD1351* display = new upm::SSD1351(0, 1, 2);
// Test lines pixel by pixel
for(int i = 0; i < SSD1351HEIGHT; i++) {
for(int j = 0; j < SSD1351WIDTH; j++) {
display->drawPixel(i, j, colors[i/8]);
}
}
display->refresh();
sleep(5);
// Test rectangles
for(int i = 0; i < SSD1351HEIGHT/32; i++) {
for (int j = 0; j < SSD1351WIDTH/32; j++) {
display->fillRect(i * 32, j * 32, 32, 32, colors[i * 4 + j]);
}
}
display->refresh();
sleep(5);
// Test circles
display->fillScreen(0x2104);
for(int i = 0; i < SSD1351HEIGHT/32; i++) {
for (int j = 0; j < SSD1351WIDTH/32; j++) {
display->drawCircle(i * 32 + 15, j * 32 + 15, 15, colors[i * 4 + j]);
}
}
display->refresh();
sleep(5);
// Test Text
display->fillScreen(INTEL_BLUE);
display->setTextColor(WHITE, INTEL_BLUE);
display->setTextSize(4);
display->setCursor(7, 30);
display->print("Intel");
display->setCursor(5, 70);
display->print("IoTDK");
display->refresh();
//! [Interesting]
}

View File

@ -1,5 +1,6 @@
/* /*
* Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com> * Authors: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com>
* Mihai Tudor Panu <mihai.tudor.panu@intel.com>
* Copyright (c) 2014 Intel Corporation. * Copyright (c) 2014 Intel Corporation.
* *
* Permission is hereby granted, free of charge, to any person obtaining * Permission is hereby granted, free of charge, to any person obtaining
@ -22,13 +23,14 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
#include <string.h>
#include <unistd.h> #include <unistd.h>
#include <iostream> #include <iostream>
#include "stepmotor.h"
#include <signal.h> #include <signal.h>
#include "stepmotor.h"
int doWork = 0; using namespace std;
int doWork = 1;
upm::StepMotor *sensor = NULL; upm::StepMotor *sensor = NULL;
void void
@ -37,7 +39,7 @@ sig_handler(int signo)
printf("got signal\n"); printf("got signal\n");
if (signo == SIGINT) { if (signo == SIGINT) {
printf("exiting application\n"); printf("exiting application\n");
doWork = 1; doWork = 0;
} }
} }
@ -45,26 +47,29 @@ int
main(int argc, char **argv) main(int argc, char **argv)
{ {
//! [Interesting] //! [Interesting]
sensor = new upm::StepMotor(4, 6); sensor = new upm::StepMotor(2, 3);
while (!doWork) { while (doWork) {
sensor->setSpeed (500); cout << "1 Revolution forward and back at 60 rpm" << endl;
sensor->stepForward (500); sensor->setSpeed(60);
usleep (10000); sensor->stepForward(200);
sensor->stepBackwards (500); usleep(1000000);
usleep (10000); sensor->stepBackward(200);
usleep(1000000);
sensor->setSpeed (750); cout << "1 Revolution forward and back at 150 rpm" << endl;
sensor->stepForward (500); sensor->setSpeed(150);
usleep (10000); sensor->stepForward(200);
sensor->stepBackwards (500); usleep(1000000);
usleep (10000); sensor->stepBackward(200);
usleep(1000000);
sensor->setSpeed (1000); cout << "1 Revolution forward and back at 300 rpm" << endl;
sensor->stepForward (500); sensor->setSpeed(300);
usleep (10000); sensor->stepForward(200);
sensor->stepBackwards (500); usleep (1000000);
usleep (10000); sensor->stepBackward(200);
usleep (1000000);
} }
delete sensor; delete sensor;

121
examples/c++/sx1276-fsk.cxx Normal file
View File

@ -0,0 +1,121 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <signal.h>
#include "sx1276.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]
cout << "Specify an argument to go into receive mode. Default is transmit"
<< endl;
bool rx = false;
if (argc > 1)
rx = true;
// Instantiate an SX1276 using default parameters
upm::SX1276 *sensor = new upm::SX1276();
// 915Mhz
sensor->setChannel(915000000);
// FSK configuration (rx and tx must be configured the same):
// Tx output power = 14 dBm
// FSK freq deviation = 25000 Hz
// FSK bandwidth = 50000 bps
// FSK AFC bandwidth = 83333 Hz
// FSK datarate = 50000 bps
// FSK preamble len = 5
// FSK fixed length payload = false
// FSK CRC check = true
// FSK (rx) continuous Rx mode = false
sensor->setTxConfig(sensor->MODEM_FSK, 14, 25000, 0,
50000, 0, 5, false, true, false, 0, false);
sensor->setRxConfig(sensor->MODEM_FSK, 50000, 50000,
0, 83333, 5, 0, false, 0, true,
false, 0, false, true);
int count = 0;
int buflen = 64;
char buffer[buflen];
while (shouldRun)
{
if (!rx)
{
snprintf(buffer, buflen, "Ping %d", count++);
cout << "Sending..." << std::string(buffer) << endl;
sensor->sendStr(string(buffer), 3000);
sensor->setSleep();
sleep(1);
}
else
{
// receiving
cout << "Attempting to receive..." << endl;
int rv;
if (rv = sensor->setRx(3000))
{
cout << "setRx returned " << rv << endl;
}
else
{
cout << "Received Buffer: " << sensor->getRxBufferStr() << endl;
}
// go back to sleep when done
sensor->setSleep();
usleep(250000);
}
}
//! [Interesting]
cout << "Exiting..." << endl;
delete sensor;
return 0;
}

View File

@ -0,0 +1,119 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <signal.h>
#include "sx1276.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]
cout << "Specify an argument to go into receive mode. Default is transmit"
<< endl;
bool rx = false;
if (argc > 1)
rx = true;
// Instantiate an SX1276 using default parameters
upm::SX1276 *sensor = new upm::SX1276();
// 915Mhz
sensor->setChannel(915000000);
// LORA configuration (rx and tx must be configured the same):
// Tx output power = 14 dBm
// LORA bandwidth = 125000 (can also be 250K and 500K)
// LORA spreading factor = 7
// LORA coding rate = 1 (4/5)
// LORA preamble len = 8
// LORA symbol timeout = 5
// LORA fixed payload = false
// LORA IQ inversion = false
// LORA (rx) continuous Rx mode = true
sensor->setTxConfig(sensor->MODEM_LORA, 14, 0, 125000,
7, 1, 8, false, true, false, 0, false);
sensor->setRxConfig(sensor->MODEM_LORA, 125000, 7,
1, 0, 8, 5, false, 0, true, false, 0, false, true);
int count = 0;
int buflen = 64;
char buffer[buflen];
while (shouldRun)
{
if (!rx)
{
snprintf(buffer, buflen, "Ping %d", count++);
cout << "Sending..." << std::string(buffer) << endl;
sensor->sendStr(string(buffer), 3000);
sensor->setSleep();
sleep(1);
}
else
{
// receiving
cout << "Attempting to receive..." << endl;
int rv;
if (rv = sensor->setRx(3000))
{
cout << "setRx returned " << rv << endl;
}
else
{
cout << "Received Buffer: " << sensor->getRxBufferStr() << endl;
}
// go back to sleep when done
sensor->setSleep();
usleep(5000);
}
}
//! [Interesting]
cout << "Exiting..." << endl;
delete sensor;
return 0;
}

115
examples/c++/t3311.cxx Normal file
View File

@ -0,0 +1,115 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* Copyright (c) 2016 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "t3311.h"
using namespace std;
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main(int argc, char **argv)
{
signal(SIGINT, sig_handler);
//! [Interesting]
string defaultDev = "/dev/ttyUSB0";
// if an argument was specified, use it as the device instead
if (argc > 1)
defaultDev = string(argv[1]);
cout << "Initializing..." << endl;
// Instantiate an T3311 instance, using MODBUS slave address 1, and
// default comm parameters (9600, 8, N, 2)
upm::T3311 *sensor = new upm::T3311(defaultDev, 1);
// output the serial number and firmware revision
cout << "Serial Number: " << sensor->getSerialNumber() << endl;
cout << "Firmware Revision: " << sensor->getFirmwareMajor()
<< "." << sensor->getFirmwareMinor() << endl;
cout << endl;
// update and print available values every second
while (shouldRun)
{
// update our values from the sensor
sensor->update();
// we show both C and F for temperature
cout << "Temperature: " << sensor->getTemperature()
<< " C / " << sensor->getTemperature(true) << " F"
<< endl;
cout << "Humidity: " << sensor->getHumidity()
<< " %" << endl;
// this value depends on the sensor configuration -- by default
// it is the dew point temperature
cout << "Computed Value: " << sensor->getComputedValue() << endl;
// with FW revisions > 2.44, extended computed data is available
if (sensor->extendedDataAvailable())
{
cout << "Dew Point Temperature: " << sensor->getDewPointTemperature()
<< " C / " << sensor->getDewPointTemperature(true) << " F"
<< endl;
cout << "Absolute Humidity: " << sensor->getAbsoluteHumidity()
<< " g/m3" << endl;
cout << "Specific Humidity: " << sensor->getSpecificHumidity()
<< " g/kg" << endl;
cout << "Mixing Ratio: " << sensor->getMixingRatio()
<< " g/kg" << endl;
cout << "Specific Enthalpy: " << sensor->getSpecificEnthalpy()
<< " kJ/kg" << endl;
}
cout << endl;
sleep(1);
}
cout << "Exiting..." << endl;
delete sensor;
//! [Interesting]
return 0;
}

View File

@ -0,0 +1,66 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "urm37.h"
using namespace std;
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main()
{
signal(SIGINT, sig_handler);
//! [Interesting]
// Instantiate a URM37 sensor on UART 0, with the reset pin on D2
upm::URM37 *sensor = new upm::URM37(0, 2);
// Every half a second, sample the URM37 and output the measured
// distance in cm, and temperature in degrees C
while (shouldRun)
{
cout << "Detected distance (cm): " << sensor->getDistance() << endl;
cout << "Temperature (C): " << sensor->getTemperature() << endl;
usleep(500000);
}
//! [Interesting]
cout << "Exiting" << endl;
delete sensor;
return 0;
}

65
examples/c++/urm37.cxx Normal file
View File

@ -0,0 +1,65 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include "urm37.h"
using namespace std;
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main()
{
signal(SIGINT, sig_handler);
//! [Interesting]
// Instantiate a URM37 sensor on analog pin A0, reset pin on D2,
// trigger pin on D3 with an analog reference voltage of 5.0
upm::URM37 *sensor = new upm::URM37(0, 2, 3, 5.0);
// Every half a second, sample the URM37 and output the measured
// distance in cm.
while (shouldRun)
{
cout << "Detected distance (cm): " << sensor->getDistance() << endl;
usleep(500000);
}
//! [Interesting]
cout << "Exiting" << endl;
delete sensor;
return 0;
}

145
examples/c++/xbee.cxx Normal file
View File

@ -0,0 +1,145 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* 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 <unistd.h>
#include <iostream>
#include <signal.h>
#include <stdio.h>
#include "xbee.h"
using namespace std;
using namespace upm;
void printUsage(char *progname)
{
cout << "Usage: " << progname << " [AT command]" << endl;
cout << endl;
cout << "If an argument is supplied on the command line, that argument is"
<< endl;
cout << "sent to the module and the response is printed out." << endl;
cout << endl;
cout << "If no argument is used, then the firmware revision, serial number"
<< endl;
cout << "and the current IP address (if set) are queried." << endl;
cout << endl;
cout << endl;
}
//! [Interesting]
// simple helper function to send a command and wait for a response
void sendCommand(upm::XBee* sensor, string cmd)
{
// commands need to be terminated with a carriage return
cmd += "\r";
sensor->writeDataStr(cmd);
string resp;
while (sensor->dataAvailable(2000))
{
resp += sensor->readDataStr(1024);
}
if (resp.empty())
{
cerr << "Timed out waiting for response" << endl;
return;
}
resp = sensor->stringCR2LF(resp);
cout << "Returned (" << resp.size() << " bytes): " << endl;
cout << resp << endl;
}
int main(int argc, char **argv)
{
// Instantiate a XBee Module on UART 0
upm::XBee* sensor = new upm::XBee(0);
// Set the baud rate, 9600 baud is the default.
if (sensor->setBaudRate(9600))
{
cerr << "Failed to set tty baud rate" << endl;
return 1;
}
printUsage(argv[0]);
if (argc > 1)
{
// enable command mode
sensor->commandMode();
cout << "Sending command line argument (" << argv[1] << ")..." << endl;
sendCommand(sensor, argv[1]);
}
else
{
// enable command mode
sensor->commandMode();
// query the verbose firmware revision
cout << "Querying verbose firmware revision (ATVL)..." << endl;
sendCommand(sensor, "ATVL");
// query the number
cout << "Querying Serial Number High (ATSH)..." << endl;
sendCommand(sensor, "ATSH");
cout << "Querying Serial Number Low (ATSL)..." << endl;
sendCommand(sensor, "ATSL");
cout << "Querying address, if set (ATMY)..." << endl;
sendCommand(sensor, "ATMY");
// For the XBee WiFi S6B
// A comprehensive list of commands and command modes is
// available from the datasheet at:
// ftp1.digi.com/support/documentation/90002180_L.pdf
// For the XBee S1
// A comprehensive list of commands and command modes is
// available from the datasheet at:
// http://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-Datasheet.pdf
// For the XBee WiFi module:
// An example using AT commands to connect to an AP, with a
// private Key using WPA2:
// Connect to AP with SSID 'mySSID':
// ATIDmySSID
// Provide the private key 'secret':
// ATPKsecret
// Use WPA2 encryption
// ATEE2
}
delete sensor;
return 0;
}
//! [Interesting]

View File

@ -23,29 +23,21 @@
*/ */
public class A110XSample { public class A110XSample {
static {
try {
System.loadLibrary("javaupm_a110x");
} catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String argv[]) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] //! [Interesting]
// Instantiate an A110X sensor on digital pin D2 // Instantiate an A110X sensor on digital pin D2
upm_a110x.A110X a110x = new upm_a110x.A110X(2); upm_a110x.A110X hall = new upm_a110x.A110X(2);
while(true) { // check every second for the presence of a magnetic field (south polarity)
if(a110x.magnetDetected()) { while(true){
System.out.println("magnet detected..."); if(hall.magnetDetected())
} System.out.println("Magnet (south polarity) detected.");
else { else
System.out.println("magnet not detected..."); System.out.println("No magnet detected.");
}
Thread.sleep(1000); Thread.sleep(1000);
} }
//! [Interesting] //! [Interesting]
} }
} }

View File

@ -0,0 +1,57 @@
/*
* Author: Stefan Andritoiu <stefan.andritoiu@intel.com>
* 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.
*/
public class A110X_intrSample {
public static int counter=0;
public static void main(String[] args) throws InterruptedException {
//! [Interesting]
// Instantiate an A110X sensor on digital pin D2
upm_a110x.A110X hall = new upm_a110x.A110X(2);
// This example uses a user-supplied interrupt handler to count
// pulses that occur when a magnetic field of the correct polarity
// is detected. This could be used to measure the rotations per
// minute (RPM) of a rotor for example.
A110XISR callback = new A110XISR();
hall.installISR(callback);
while(true){
System.out.println("Counter: " + counter);
Thread.sleep(1000);
}
//! [Interesting]
}
}
class A110XISR implements Runnable {
public A110XISR(){
super();
}
public void run(){
A110X_intrSample.counter++;
}
}

View File

@ -0,0 +1,46 @@
/*
* Author: Stefan Andritoiu <stefan.andritoiu@intel.com>
* 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.
*/
//NOT TESTED!!!
public class ADC121C021Sample {
public static void main(String[] args) throws InterruptedException {
// ! [Interesting]
// Instantiate an ADC121C021 on I2C bus 0
upm_adc121c021.ADC121C021 adc = new upm_adc121c021.ADC121C021(0);
// An analog sensor, such as a Grove light sensor,
// must be attached to the adc·
// Prints the value and corresponding voltage every 50 milliseconds
while (true) {
int val = adc.value();
System.out.println("ADC value: " + val + "Volts = " + adc.valueToVolts(val));
Thread.sleep(1000);
}
// ! [Interesting]
}
}

View File

@ -0,0 +1,62 @@
/*
* Author: Abhishek Malik <abhishek.malik@intel.com>
* Copyright (c) 2016 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 upm_ad8232.AD8232;
public class Ad8232Example {
static {
try {
System.loadLibrary("javaupm_ad8232");
System.loadLibrary("mraajava");
} catch (UnsatisfiedLinkError e) {
System.err.println(
"Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" +
e);
System.exit(1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//! [Interesting]
// Instantiate a Ad8232 sensor on digital pins 10 (LO+), 11 (LO-)
// and an analog pin, 0 (OUTPUT)
AD8232 ad8232 = new AD8232(10, 11, 0);
while(true){
// Output the raw numbers from the ADC, for plotting elsewhere.
// A return of 0 indicates a Lead Off (LO) condition.
// In theory, this data could be fed to software like Processing
// (https://www.processing.org/) to plot the data just like an
// EKG you would see in a hospital.
System.out.println(ad8232.value());
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("The following error has occured: "+e.getMessage());
}
}
}
}

View File

@ -22,35 +22,30 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
//NOT TESTED!!!
public class Adxl345Sample { public class Adxl345Sample {
static {
try {
System.loadLibrary("javaupm_adxl345");
} catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String argv[]) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] // ! [Interesting]
// Note: Sensor only works at 3.3V on the Intel Edison with Arduino breakout short[] val;
upm_adxl345.Adxl345 obj = new upm_adxl345.Adxl345(0); float[] accel;
int[] raw = new int[3];
float[] accel = new float[3];
while (true) { // Note: Sensor only works at 3.3V on the Intel Edison with Arduino
obj.update(); // breakout
raw = obj.getRawValues(); upm_adxl345.Adxl345 sensor = new upm_adxl345.Adxl345(0);
accel = obj.getAcceleration();
System.out.println("raw data: " + raw[0] + " " + raw[1] + " " + while (true) {
raw[2]); sensor.update();
System.out.println("accel data: " + accel[0] + " " + accel[1] + " " val = sensor.getRawValues();
+ accel[2]); accel = sensor.getAcceleration();
Thread.sleep(1000); System.out.println("Current scale: " + sensor.getScale());
} System.out.println("Raw Values: X: " + val[0] + " Y: " + val[1] + " Z: " + val[2]);
//! [Interesting] System.out.println("Acceleration: X: " + accel[0] + "g Y: " + accel[1] + "g Z: "
} + accel[2] + "g");
}
Thread.sleep(1000);
}
// ! [Interesting]
}
}

View File

@ -0,0 +1,47 @@
/*
* Author: Abhishek Malik <abhishek.malik@intel.com>
* 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 upm_apds9002.APDS9002;
public class Apds9002 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//! [Interesting]
// Instantiate the APDS9002 (Grove luminance sensor) on the Analog pin A0
APDS9002 lum = new APDS9002(0);
while(true){
System.out.println("The Luminance value is : "+lum.value());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("The following exception occured: "+e.getMessage());
}
}
//! [Interesting]
}
}

View File

@ -24,15 +24,6 @@
public class BISS0001Sample{ public class BISS0001Sample{
static {
try {
System.loadLibrary("javaupm_biss0001");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] //! [Interesting]
// Instantiate a Grove Motion sensor on GPIO pin D7 // Instantiate a Grove Motion sensor on GPIO pin D7

View File

@ -25,32 +25,24 @@
//NOT TESTED!!! //NOT TESTED!!!
public class BMPX8XSample { public class BMPX8XSample {
static {
try {
System.loadLibrary("upm_bmpx8x");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] // ! [Interesting]
// Instantiate a BMPX8X sensor on I2C // Instantiate a BMPX8X sensor on I2C
upm_bmpx8x.BMPX8X sensor = new upm_bmpx8x.BMPX8X(0); upm_bmpx8x.BMPX8X sensor = new upm_bmpx8x.BMPX8X(0);
// Print the pressure, altitude, sea level, and // Print the pressure, altitude, sea level, and
// temperature values every second // temperature values every second
while(true){ while (true) {
System.out.println("Pressure: " + sensor.getPressure()); System.out.println("Pressure: " + sensor.getPressure());
System.out.println("Altitude: " + sensor.getAltitude()); System.out.println("Altitude: " + sensor.getAltitude());
System.out.println("Sealevel pressure: " + sensor.getSealevelPressure()); System.out.println("Sealevel pressure: "
+ sensor.getSealevelPressure());
System.out.println("Temperature: " + sensor.getTemperature()); System.out.println("Temperature: " + sensor.getTemperature());
System.out.println(); System.out.println();
Thread.sleep(1000); Thread.sleep(1000);
} }
//! [Interesting] // ! [Interesting]
} }
} }

View File

@ -0,0 +1,55 @@
/*
* Author: Stefan Andritoiu <stefan.andritoiu@intel.com>
* 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.
*/
public class BuzzerSample {
public static void main(String[] args) throws InterruptedException {
// ! [Interesting]
int chord[] = {
upm_buzzer.javaupm_buzzer.DO,
upm_buzzer.javaupm_buzzer.RE,
upm_buzzer.javaupm_buzzer.MI,
upm_buzzer.javaupm_buzzer.FA,
upm_buzzer.javaupm_buzzer.SOL,
upm_buzzer.javaupm_buzzer.LA,
upm_buzzer.javaupm_buzzer.SI};
// Instantiate a buzzer on digital pin D5
upm_buzzer.Buzzer sound = new upm_buzzer.Buzzer(5);
// print sensor name
System.out.println(sound.name());
for (int i = 0; i < chord.length; i++) {
// play each note for one second
int note = sound.playSound(chord[i], 1000000);
System.out.println(note);
Thread.sleep(100);
}
// ! [Interesting]
sound.stopSound();
}
}

View File

@ -24,15 +24,6 @@
public class Buzzer_soundSample { public class Buzzer_soundSample {
static {
try {
System.loadLibrary("javaupm_buzzer");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] //! [Interesting]
int chord[] = { int chord[] = {

View File

@ -22,42 +22,31 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
public class CJQ4435Sample{ public class CJQ4435Sample {
static {
try {
System.loadLibrary("javaupm_cjq4435");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting]
// Instantiate a CJQ4435 MOSFET on a PWM capable digital pin D3 // Instantiate a CJQ4435 MOSFET on a PWM capable digital pin D3
upm_cjq4435.CJQ4435 mosfet = new upm_cjq4435.CJQ4435(3); upm_cjq4435.CJQ4435 mosfet = new upm_cjq4435.CJQ4435(3);
mosfet.setPeriodMS(10); mosfet.setPeriodMS(10);
mosfet.enable(true); mosfet.enable(true);
while(true){ while (true) {
// start with a duty cycle of 0.0 (off) and increment to 1.0 (on) // start with a duty cycle of 0.0 (off) and increment to 1.0 (on)
for (float i=0; i <= 1; i+=0.1){ for (float i = 0; i <= 1; i += 0.1) {
mosfet.setDutyCycle(i); mosfet.setDutyCycle(i);
Thread.sleep(100); Thread.sleep(100);
} }
Thread.sleep(1000); Thread.sleep(1000);
// Now take it back down // Now take it back down
// start with a duty cycle of 1.0 (on) and decrement to 0.0 (off) // start with a duty cycle of 1.0 (on) and decrement to 0.0 (off)
for (float i=1; i >= 0; i-=0.1){ for (float i = 1; i >= 0; i -= 0.1) {
mosfet.setDutyCycle(i); mosfet.setDutyCycle(i);
Thread.sleep(100); Thread.sleep(100);
} }
Thread.sleep(1000); Thread.sleep(1000);
} }
//! [Interesting]
} }
} }

View File

@ -0,0 +1,116 @@
find_package(Java REQUIRED)
include(UseJava)
macro(add_example example_name jar_name)
set(example_src "${example_name}.java")
set(example_jar "${CMAKE_CURRENT_BINARY_DIR}/../../src/${jar_name}/upm_${jar_name}.jar")
add_jar(${example_name} SOURCES ${example_src} INCLUDE_JARS ${example_jar})
endmacro()
macro(add_example_with_path example_name jar_path)
set(example_src "${example_name}.java")
set(example_jar "${CMAKE_CURRENT_BINARY_DIR}/../../src/${jar_path}")
add_jar(${example_name} SOURCES ${example_src} INCLUDE_JARS ${example_jar})
endmacro()
add_example(A110X_intrSample a110x)
add_example(A110XSample a110x)
add_example(ADC121C021Sample adc121c021)
add_example(Adxl345Sample adxl345)
add_example(Apds9002 apds9002)
add_example(BISS0001Sample biss0001)
add_example(BMPX8XSample bmpx8x)
add_example(BuzzerSample buzzer)
add_example(Buzzer_soundSample buzzer)
add_example(CJQ4435Sample cjq4435)
add_example(DS1307Sample ds1307)
add_example(ENC03RSample enc03r)
add_example(ES08ASample servo)
add_example(GroveButtonSample grove)
add_example(GroveButton_intrSample grove)
add_example(GroveCollision grovecollision)
add_example(GroveEHRSample groveehr)
add_example(GroveEmg groveemg)
add_example(GroveGsr grovegsr)
add_example(GroveLed_multiSample grove)
add_example(GroveLEDSample grove)
add_example(GroveLightSample grove)
add_example(GroveLineFinderSample grovelinefinder)
add_example(GroveMDSample grovemd)
add_example(GroveMoistureSample grovemoisture)
add_example(GroveMQ3 gas)
add_example(GroveMQ9 gas)
add_example(GroveO2Example groveo2)
add_example(GroveQTouch at42qt1070)
add_example(GroveRelaySample grove)
add_example(GroveRotarySample grove)
add_example(GROVESCAMSample grovescam)
add_example(GroveSlideSample grove)
add_example(GroveSpeakerSample grovespeaker)
add_example(GroveTempSample grove)
add_example(GroveVDivSample grovevdiv)
add_example(GroveWaterSample grovewater)
add_example(GroveWFSSample grovewfs)
add_example(GUVAS12DSample guvas12d)
add_example(H3LIS331DLSample h3lis331dl)
add_example(HCSR04Sample hcsr04)
add_example(HM11Sample hm11)
add_example(Hmc5883lSample hmc5883l)
add_example(HMTRPSample hmtrp)
add_example(HP20xExample hp20x)
add_example(HTU21DSample htu21d)
add_example(Itg3200Sample itg3200)
add_example(Joystick12Sample joystick12)
add_example(LDT0028Sample ldt0028)
add_example(LoLSample lol)
add_example(LSM303Sample lsm303)
add_example(M24LR64ESample m24lr64e)
add_example(MAX44000Sample max44000)
add_example(MHZ16Sample mhz16)
add_example(MicrophoneSample mic)
add_example(MMA7455Sample mma7455)
add_example(MMA7660Sample mma7660)
add_example(MPL3115A2Sample mpl3115a2)
add_example(MPR121Sample mpr121)
add_example(MPU9150Sample mpu9150)
add_example(MQ2Sample gas)
add_example(MQ303ASample mq303a)
add_example(MQ5Sample gas)
add_example(GroveLEDBar my9221)
add_example(NRF24L01_receiverSample nrf24l01)
add_example(NRF24L01_transmitterSample nrf24l01)
add_example(NUNCHUCKSample nunchuck)
add_example(OTP538USample otp538u)
add_example(PPD42NSSample ppd42ns)
add_example(PulsensorSample pulsensor)
add_example(RFR359FSample rfr359f)
add_example(RotaryEncoderSample rotaryencoder)
add_example(RPR220_intrSample rpr220)
add_example(RPR220Sample rpr220)
add_example(ST7735Sample st7735)
add_example(StepMotorSample stepmotor)
add_example(TM1637Sample tm1637)
add_example(TP401Sample gas)
add_example(TSL2561Sample tsl2561)
add_example(TTP223Sample ttp223)
add_example(Ublox6Sample ublox6)
add_example(ULN200XASample uln200xa)
add_example(WaterLevelSensor waterlevel)
add_example(WT5001Sample wt5001)
add_example(YG1006Sample yg1006)
add_example(ZFM20Sample zfm20)
add_example(Ad8232Example ad8232)
add_example(Gp2y0aExample gp2y0a)
add_example(Th02Example th02)
add_example(FlexSensorExample flex)
add_example_with_path(Jhd1313m1_lcdSample lcd/upm_i2clcd.jar)
add_example_with_path(Jhd1313m1Sample lcd/upm_i2clcd.jar)
add_example_with_path(Lcm1602_i2cSample lcd/upm_i2clcd.jar)
add_example_with_path(Lcm1602_parallelSample lcd/upm_i2clcd.jar)
add_example_with_path(SSD1308_oledSample lcd/upm_i2clcd.jar)
add_example_with_path(SSD1327_oledSample lcd/upm_i2clcd.jar)

View File

@ -0,0 +1,74 @@
/*
* Author: Stefan Andritoiu <stefan.andritoiu@intel.com>
* 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.
*/
//NOT TESTED!!!
public class DS1307Sample {
static private void printTime(upm_ds1307.DS1307 rtc) {
System.out.print("The time is: " + rtc.getMonth() + "/" + rtc.getDayOfMonth() + "/"
+ rtc.getYear() + " " + rtc.getHours() + ":" + rtc.getMinutes() + ":"
+ rtc.getSeconds());
if (rtc.getAmPmMode()) {
if (rtc.getAmPmMode())
System.out.print(" PM");
else
System.out.print(" AM");
}
System.out.println();
if (rtc.getAmPmMode())
System.out.println("Clock is in AM/PM mode");
else
System.out.println("Clock is in 24h mode");
}
public static void main(String[] args) throws InterruptedException {
// ! [Interesting]
// Instantiate a DS1037 on I2C bus 0
upm_ds1307.DS1307 rtc = new upm_ds1307.DS1307(0);
// always do this first
System.out.println("Loading the current time...");
if (!rtc.loadTime()) {
System.err.println("rtc->loadTime() failed.");
System.exit(-1);
}
printTime(rtc);
// set the year as an example
System.out.println("setting the year to 50");
rtc.setYear(50);
rtc.setTime();
// reload the time and print it
rtc.loadTime();
printTime(rtc);
// ! [Interesting]
}
}

View File

@ -25,40 +25,31 @@
//NOT TESTED!!! //NOT TESTED!!!
public class ENC03RSample { public class ENC03RSample {
private static final long CALIBRATION_SAMPLES = 1000; private static final long CALIBRATION_SAMPLES = 1000;
static {
try {
System.loadLibrary("upm_enc03r");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] // ! [Interesting]
// Instantiate a ENC03R on analog pin A0 // Instantiate a ENC03R on analog pin A0
upm_enc03r.ENC03R gyro = new upm_enc03r.ENC03R(0); upm_enc03r.ENC03R gyro = new upm_enc03r.ENC03R(0);
System.out.println("Please place the sensor in a stable location, and do not"); System.out.println("Please place the sensor in a stable location, and do not");
System.out.println("move it while calibration takes place"); System.out.println("move it while calibration takes place");
System.out.println("This may take a couple of minutes."); System.out.println("This may take a couple of minutes.");
gyro.calibrate(CALIBRATION_SAMPLES); gyro.calibrate(CALIBRATION_SAMPLES);
System.out.println("Calibration complete. Reference value: " + gyro.calibrationValue()); System.out.println("Calibration complete. Reference value: " + gyro.calibrationValue());
// Read the input and print both the raw value and the angular velocity, // Read the input and print both the raw value and the angular velocity,
// waiting 1 second between readings // waiting 1 second between readings
while(true){ while (true) {
long val = gyro.value(); long val = gyro.value();
double av = gyro.angularVelocity(val); double av = gyro.angularVelocity(val);
System.out.println("Raw value: " + val + ", angular velocity: " + av + " deg/s"); System.out.println("Raw value: " + val + ", angular velocity: " + av + " deg/s");
Thread.sleep(1000); Thread.sleep(1000);
} }
//! [Interesting] // ! [Interesting]
} }
} }

View File

@ -22,43 +22,32 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
//import upm_servo.ES08A; public class ES08ASample {
public class ES08ASample{
static {
try {
System.loadLibrary("javaupm_servo");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] // ! [Interesting]
upm_servo.ES08A servo = new upm_servo.ES08A(6); upm_servo.ES08A servo = new upm_servo.ES08A(6);
// Sets the shaft to 180, then to 90, then to 0, // Sets the shaft to 180, then to 90, then to 0,
// then back to 90, and finally back to 180, // then back to 90, and finally back to 180,
// pausing for a second in between each angle // pausing for a second in between each angle
servo.setAngle (180); servo.setAngle(180);
System.out.println("Set angle to 180"); System.out.println("Set angle to 180");
Thread.sleep(1000); Thread.sleep(1000);
servo.setAngle (90); servo.setAngle(90);
System.out.println("Set angle to 90"); System.out.println("Set angle to 90");
Thread.sleep(1000);
servo.setAngle (0);
System.out.println("Set angle to 0");
Thread.sleep(1000);
servo.setAngle (90);
System.out.println("Set angle to 90");
Thread.sleep(1000); Thread.sleep(1000);
servo.setAngle (180); servo.setAngle(0);
System.out.println("Set angle to 180"); System.out.println("Set angle to 0");
//! [Interesting] Thread.sleep(1000);
servo.setAngle(90);
System.out.println("Set angle to 90");
Thread.sleep(1000);
servo.setAngle(180);
System.out.println("Set angle to 180");
// ! [Interesting]
} }
} }

View File

@ -0,0 +1,41 @@
import upm_flex.Flex;
public class FlexSensorExample {
static {
try {
System.loadLibrary("javaupm_flex");
System.loadLibrary("mraajava");
} catch (UnsatisfiedLinkError e) {
System.err.println(
"Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" +
e);
System.exit(1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//! [Interesting]
// The was tested with a Spectra Symbol flex sensor.
// We attached a 22K resistor to a breadboard,
// with 1 end attached to GND and the other connected to
// both the flex sensor and A0.
// The flex sensor was connected on 1 pin to the 22K resistor and A0
// and on the other pin to 5V.
// Instantiate a Flex sensor on analog pin A0
Flex flex = new Flex(0);
while(true){
System.out.println("Flex Sensor value is: "+flex.value());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//! [Interesting]
}
}

View File

@ -0,0 +1,66 @@
/*
* Author: Stefan Andritoiu <stefan.andritoiu@intel.com>
* 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.
*/
//NOT TESTED!!!
public class GROVESCAMSample {
public static void main(String[] args) throws InterruptedException {
// ! [Interesting]
// Instantiate a Grove Serial Camera on UART 0
upm_grovescam.GROVESCAM camera = new upm_grovescam.GROVESCAM(0);
// make sure port is initialized properly. 115200 baud is the default.
if (!camera.setupTty()) {
System.err.println("Failed to setup tty port parameters");
System.exit(-1);
}
if (camera.init())
System.out.println("Initialized...");
else
System.out.println("Initialization failed");
if (camera.preCapture())
System.out.println("preCapture succeeded...");
else
System.out.println("preCapture failed.");
if (camera.doCapture())
System.out.println("doCapture succeeded...");
else
System.out.println("doCapture failed.");
if (camera.getImageSize() > 0) {
System.out.println("Storing image.jpg...");
if (camera.storeImage("image.jpg"))
System.out.println("storeImage succeeded...");
else
System.out.println("storeImage failed.");
}
// ! [Interesting]
}
}

View File

@ -22,35 +22,25 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
//import upm_guvas12d.GUVAS12D; public class GUVAS12DSample {
public class GUVAS12DSample{
// analog voltage, usually 3.3 or 5.0 // analog voltage, usually 3.3 or 5.0
private static final float GUVAS12D_AREF = 5; private static final float GUVAS12D_AREF = 5;
private static final int SAMPLES_PER_QUERY = 1024; private static final int SAMPLES_PER_QUERY = 1024;
static {
try {
System.loadLibrary("javaupm_guvas12d");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] // ! [Interesting]
// Instantiate a GUVAS12D on analog pin A3 // Instantiate a GUVAS12D on analog pin A3
upm_guvas12d.GUVAS12D volts = new upm_guvas12d.GUVAS12D(3); upm_guvas12d.GUVAS12D volts = new upm_guvas12d.GUVAS12D(3);
while (true) { while (true) {
float value = volts.value(GUVAS12D_AREF, SAMPLES_PER_QUERY); float value = volts.value(GUVAS12D_AREF, SAMPLES_PER_QUERY);
System.out.println("AREF: " + GUVAS12D_AREF + ", Voltage value (higher means more UV): " + value ); System.out.println("AREF: " + GUVAS12D_AREF
+ ", Voltage value (higher means more UV): " + value);
Thread.sleep(1000); Thread.sleep(1000);
} }
//! [Interesting] // ! [Interesting]
} }
} }

View File

@ -0,0 +1,68 @@
/*
* Author: Abhishek Malik <abhishek.malik@intel.com>
* Copyright (c) 2016 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 upm_gp2y0a.GP2Y0A;
public class Gp2y0aExample {
public static final float GP2Y0A_AREF = 5;
public static final short SAMPLES_PER_QUERY = 20;
static {
try {
System.loadLibrary("javaupm_gp2y0a");
System.loadLibrary("mraajava");
} catch (UnsatisfiedLinkError e) {
System.err.println(
"Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" +
e);
System.exit(1);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//! [Interesting]
// Note, for the Grove 80cm version of this sensor, due to the way
// it is wired, you need to plug this into the A0 port, where it
// will use the available A1 pin for data.
// Instantiate a GP2Y0A on analog pin A1
GP2Y0A gp2y0a = new GP2Y0A(1);
// The higher the voltage (closer to AREF) the closer the object is. NOTE:
// the measured voltage will probably not exceed 3.3 volts.
// Every second, print the averaged voltage value (averaged over 20 samples).
while(true){
System.out.println("AREF: " + GP2Y0A_AREF + "\t, Voltage Value (Higher means Closer): "+ gp2y0a.value(GP2Y0A_AREF, SAMPLES_PER_QUERY));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("The following exception occured: "+e.getMessage());
}
}
//! [Interesting]
}
}

View File

@ -22,28 +22,19 @@
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
public class GroveButtonSample{ public class GroveButtonSample {
static {
try {
System.loadLibrary("javaupm_grove");
}catch (UnsatisfiedLinkError e) {
System.err.println("error in loading native library");
System.exit(-1);
}
}
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
//! [Interesting] // ! [Interesting]
// Create the button object using UART // Create the button object using GPIO pin 2
upm_grove.GroveButton button = new upm_grove.GroveButton(0); upm_grove.GroveButton button = new upm_grove.GroveButton(2);
while (true) { while (true) {
System.out.println(button.name() +" value is " + button.value()); System.out.println(button.name() + " value is " + button.value());
Thread.sleep(1000); Thread.sleep(1000);
} }
//! [Interesting] // ! [Interesting]
} }
} }

View File

@ -0,0 +1,53 @@
/*
* Author: Stefan Andritoiu <stefan.andritoiu@intel.com>
* 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.
*/
public class GroveButton_intrSample {
public static int counter = 0;
public static void main(String[] args) throws InterruptedException {
// ! [Interesting]
upm_grove.GroveButton b = new upm_grove.GroveButton(2);
ButtonISR callback = new ButtonISR();
b.installISR(2, callback);
while (true) {
System.out.println("Counter: " + counter);
Thread.sleep(1000);
}
// ! [Interesting]
}
}
class ButtonISR implements Runnable {
public ButtonISR() {
super();
}
public void run() {
GroveButton_intrSample.counter++;
System.out.println("Button pressed!");
}
}

View File

@ -0,0 +1,48 @@
/*
* Author: Abhishek Malik <abhishek.malik@intel.com>
* 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 upm_grovecollision.*;
public class GroveCollision {
public static void main(String[] args) {
// Initializing the sensor on D2 on the Base Shield
upm_grovecollision.GroveCollision collision = new upm_grovecollision.GroveCollision(2);
boolean collisionState = false;
// ! [Interesting]
while(true){
if(collision.isColliding() && !collisionState){
System.out.println("Collision!!");
collisionState = true;
}
else if (collisionState){
System.out.println("No Collision!");
collisionState = false;
}
}
// ! [Interesting]
}
}

View File

@ -0,0 +1,53 @@
/*
* Author: Stefan Andritoiu <stefan.andritoiu@intel.com>
* 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.
*/
//NOT TESTED!!!
public class GroveEHRSample {
public static void main(String[] args) throws InterruptedException {
// ! [Interesting]
// Instantiate a Grove Ear-clip Heart Rate sensor on digital pin D2
upm_groveehr.GroveEHR heart = new upm_groveehr.GroveEHR(2);
// set the beat counter to 0, init the clock and start counting beats
heart.clearBeatCounter();
heart.initClock();
heart.startBeatCounter();
while (true) {
long millis = heart.getMillis();
long beats = heart.beatCounter();
// heartRate() requires that at least 5 seconds pass before
// returning anything other than 0
int hr = heart.heartRate();
// output milliseconds passed, beat count, and computed heart rate
System.out.println("Millis: " + millis + ", Beats: " + beats + ", Heart rate: " + hr);
Thread.sleep(1000);
}
// ! [Interesting]
}
}

View File

@ -0,0 +1,47 @@
/*
* Author: Abhishek Malik <abhishek.malik@intel.com>
* 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 upm_groveemg.GroveEMG;
public class GroveEmg {
public static void main(String[] args) {
// TODO Auto-generated method stub
//! [Interesting]
// Instantiating the Grove EMG sensor on Analog pin 0
GroveEMG emg = new GroveEMG(0);
System.out.println("Calibrating ... ");
emg.calibrate();
while(true){
System.out.println("EMG Val: "+emg.value());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("The following exception occured: "+e.getMessage());
}
}
}
//! [Interesting]
}

Some files were not shown because too many files have changed in this diff Show More