From d1296a04ae6b5f9db8218e3776e9a1f933cfa6e6 Mon Sep 17 00:00:00 2001 From: iLikePieTM Date: Sun, 15 Mar 2020 15:53:49 -0700 Subject: [PATCH 1/7] Version 1.1.0 - Temperature Sensor Support --- CHANGELOG | 2 + .../SimpleTempSensor/SimpleTempSensor.ino | 45 +++++++++++++++++++ library.properties | 4 +- src/LSM6DS3.cpp | 35 ++++++++++++++- src/LSM6DS3.h | 7 ++- 5 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 examples/SimpleTempSensor/SimpleTempSensor.ino diff --git a/CHANGELOG b/CHANGELOG index f0e0d0d..79c5a83 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ Arduino_LSM6DSM ?.?.? - ????.??.?? +Arduino_LSM6DSM 1.1.0 - 2020.03.15 + Arduino_LSM6DSM 1.0.0 - 2019.07.19 * Initial release diff --git a/examples/SimpleTempSensor/SimpleTempSensor.ino b/examples/SimpleTempSensor/SimpleTempSensor.ino new file mode 100644 index 0000000..b39ae94 --- /dev/null +++ b/examples/SimpleTempSensor/SimpleTempSensor.ino @@ -0,0 +1,45 @@ +/* + Arduino LSM6DS3 - Simple Gyroscope + + This example reads the temperature values from the LSM6DS3 + sensor and continuously prints them to the Serial Monitor + or Serial Plotter. + + The circuit: + - Arduino Uno WiFi Rev 2 or Arduino Nano 33 IoT + + created 15 Mar 2020 + by Alex Hoppe + + This example code is in the public domain. +*/ + +#include + +void setup() { + Serial.begin(9600); + while (!Serial); + + if (!IMU.begin()) { + Serial.println("Failed to initialize IMU!"); + + while (1); + } + + Serial.print("Temperature sensor sample rate = "); + Serial.print(IMU.tempSampleRate()); + Serial.println(" Hz"); + Serial.println(); + Serial.println("Temperature sensor in degrees C"); + Serial.println("T"); +} + +void loop() { + float t; + + if (IMU.tempAvailable()) { + IMU.readTemp(t); + + Serial.println(t); + } +} diff --git a/library.properties b/library.properties index 50abd11..fc9f98d 100644 --- a/library.properties +++ b/library.properties @@ -1,8 +1,8 @@ name=Arduino_LSM6DS3 -version=1.0.0 +version=1.1.0 author=Arduino maintainer=Arduino -sentence=Allows you to read the accelerometer and gyroscope values from the LSM6DS3 IMU on your Arduino Nano 33 IoT or Arduino Uno WiFi Rev2 boards. +sentence=Allows you to read the accelerometer, gyroscope, and temperature values from the LSM6DS3 IMU on your Arduino Nano 33 IoT or Arduino Uno WiFi Rev2 boards. paragraph= category=Sensors url=https://www.arduino.cc/en/Reference/Arduino_LSM6DS3 diff --git a/src/LSM6DS3.cpp b/src/LSM6DS3.cpp index d8eec87..3a08f79 100644 --- a/src/LSM6DS3.cpp +++ b/src/LSM6DS3.cpp @@ -31,6 +31,8 @@ #define LSM6DS3_CTRL7_G 0X16 #define LSM6DS3_CTRL8_XL 0X17 +#define LSM6DS3_OUT_TEMP_L 0X20 + #define LSM6DS3_OUTX_L_G 0X22 #define LSM6DS3_OUTX_H_G 0X23 #define LSM6DS3_OUTY_L_G 0X24 @@ -176,14 +178,43 @@ float LSM6DS3Class::gyroscopeSampleRate() return 104.0F; } +int LSM6DS3Class::readTemp(float& t) +{ + int16_t data[1]; + + if (!readRegisters(LSM6DS3_OUT_TEMP_L, (uint8_t*)data, sizeof(data))) { + t = NAN; + + return 0; + } + + t = data[0] / 16 + 25; + + return 1; +} + +int LSM6DS3Class::tempAvailable() +{ + if (readRegister(LSM6DS3_STATUS_REG) & 0x04) { + return 1; + } + + return 0; +} + +float LSM6DS3Class::tempSampleRate() +{ + return 52.0F; +} + int LSM6DS3Class::readRegister(uint8_t address) { uint8_t value; - + if (readRegisters(address, &value, sizeof(value)) != 1) { return -1; } - + return value; } diff --git a/src/LSM6DS3.h b/src/LSM6DS3.h index 1b53fc2..efcec73 100644 --- a/src/LSM6DS3.h +++ b/src/LSM6DS3.h @@ -39,7 +39,12 @@ class LSM6DS3Class { // Gyroscope virtual int readGyroscope(float& x, float& y, float& z); // Results are in degrees/second. virtual float gyroscopeSampleRate(); // Sampling rate of the sensor. - virtual int gyroscopeAvailable(); // Check for available data from gyroscopeAvailable + virtual int gyroscopeAvailable(); // Check for available data from gyroscope + + // Temperature Sensor + virtual int readTemp(float& t); // Results are in deg. C + virtual float tempSampleRate(); // Sampling rate of the sensor. + virtual int tempAvailable(); // Check for available data from temperature sensor private: From e4d6331d066bf5f32e93324ee5ce1e7b8978461b Mon Sep 17 00:00:00 2001 From: Wolfgang Date: Tue, 17 Mar 2020 08:31:29 -0700 Subject: [PATCH 2/7] Apply suggestions from code review Thanks for the feedback @per1234! Co-Authored-By: per1234 --- CHANGELOG | 2 +- examples/SimpleTempSensor/SimpleTempSensor.ino | 2 +- library.properties | 2 +- src/LSM6DS3.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 79c5a83..871209d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ Arduino_LSM6DSM ?.?.? - ????.??.?? -Arduino_LSM6DSM 1.1.0 - 2020.03.15 +* Add functions to use temperature sensor. Arduino_LSM6DSM 1.0.0 - 2019.07.19 diff --git a/examples/SimpleTempSensor/SimpleTempSensor.ino b/examples/SimpleTempSensor/SimpleTempSensor.ino index b39ae94..0ae04c1 100644 --- a/examples/SimpleTempSensor/SimpleTempSensor.ino +++ b/examples/SimpleTempSensor/SimpleTempSensor.ino @@ -30,7 +30,7 @@ void setup() { Serial.print(IMU.tempSampleRate()); Serial.println(" Hz"); Serial.println(); - Serial.println("Temperature sensor in degrees C"); + Serial.println("Temperature reading in degrees C"); Serial.println("T"); } diff --git a/library.properties b/library.properties index fc9f98d..df400a5 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Arduino_LSM6DS3 -version=1.1.0 +version=1.0.0 author=Arduino maintainer=Arduino sentence=Allows you to read the accelerometer, gyroscope, and temperature values from the LSM6DS3 IMU on your Arduino Nano 33 IoT or Arduino Uno WiFi Rev2 boards. diff --git a/src/LSM6DS3.cpp b/src/LSM6DS3.cpp index 3a08f79..9cf185e 100644 --- a/src/LSM6DS3.cpp +++ b/src/LSM6DS3.cpp @@ -31,7 +31,7 @@ #define LSM6DS3_CTRL7_G 0X16 #define LSM6DS3_CTRL8_XL 0X17 -#define LSM6DS3_OUT_TEMP_L 0X20 +#define LSM6DS3_OUT_TEMP_L 0X20 #define LSM6DS3_OUTX_L_G 0X22 #define LSM6DS3_OUTX_H_G 0X23 From ab5911097943bfc647a900b9e03a5c1734c82b92 Mon Sep 17 00:00:00 2001 From: iLikePieTM Date: Tue, 17 Mar 2020 08:44:31 -0700 Subject: [PATCH 3/7] Apply self documenting suggestion from code review --- keywords.txt | 11 +++++++---- src/LSM6DS3.cpp | 6 +++--- src/LSM6DS3.h | 6 +++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/keywords.txt b/keywords.txt index 8bb4192..af2d048 100644 --- a/keywords.txt +++ b/keywords.txt @@ -1,6 +1,6 @@ ####################################### # Syntax Coloring Map For Arduino_LSM6DS3 -####################################### +####################################### # Class ####################################### @@ -9,19 +9,22 @@ LSM6DS3 KEYWORD1 IMU KEYWORD1 ####################################### -# Methods and Functions -####################################### +# Methods and Functions +####################################### begin KEYWORD2 end KEYWORD2 readAcceleration KEYWORD2 readGyroscope KEYWORD2 +readTemperature KEYWORD2 gyroscopeAvailable KEYWORD2 accelerationAvailable KEYWORD2 +temperatureAvailable KEYWORD2 accelerationSampleRate KEYWORD2 gyroscopeSampleRate KEYWORD2 +temperatureSampleRate KEYWORD2 ####################################### # Constants -####################################### \ No newline at end of file +####################################### diff --git a/src/LSM6DS3.cpp b/src/LSM6DS3.cpp index 9cf185e..67c9e13 100644 --- a/src/LSM6DS3.cpp +++ b/src/LSM6DS3.cpp @@ -178,7 +178,7 @@ float LSM6DS3Class::gyroscopeSampleRate() return 104.0F; } -int LSM6DS3Class::readTemp(float& t) +int LSM6DS3Class::readTemperature(float& t) { int16_t data[1]; @@ -193,7 +193,7 @@ int LSM6DS3Class::readTemp(float& t) return 1; } -int LSM6DS3Class::tempAvailable() +int LSM6DS3Class::temperatureAvailable() { if (readRegister(LSM6DS3_STATUS_REG) & 0x04) { return 1; @@ -202,7 +202,7 @@ int LSM6DS3Class::tempAvailable() return 0; } -float LSM6DS3Class::tempSampleRate() +float LSM6DS3Class::temperatureSampleRate() { return 52.0F; } diff --git a/src/LSM6DS3.h b/src/LSM6DS3.h index efcec73..4b5f99c 100644 --- a/src/LSM6DS3.h +++ b/src/LSM6DS3.h @@ -42,9 +42,9 @@ class LSM6DS3Class { virtual int gyroscopeAvailable(); // Check for available data from gyroscope // Temperature Sensor - virtual int readTemp(float& t); // Results are in deg. C - virtual float tempSampleRate(); // Sampling rate of the sensor. - virtual int tempAvailable(); // Check for available data from temperature sensor + virtual int readTemperature(float& t); // Results are in deg. C + virtual float temperatureSampleRate(); // Sampling rate of the sensor. + virtual int temperatureAvailable(); // Check for available data from temperature sensor private: From cdeb6f80762e7234a605a6ba38668f19599503cb Mon Sep 17 00:00:00 2001 From: iLikePieTM Date: Tue, 17 Mar 2020 08:48:43 -0700 Subject: [PATCH 4/7] Apply self documenting suggestion from code review --- examples/SimpleTempSensor/SimpleTempSensor.ino | 6 +++--- keywords.txt | 11 +++++++---- src/LSM6DS3.cpp | 6 +++--- src/LSM6DS3.h | 6 +++--- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/examples/SimpleTempSensor/SimpleTempSensor.ino b/examples/SimpleTempSensor/SimpleTempSensor.ino index 0ae04c1..586b455 100644 --- a/examples/SimpleTempSensor/SimpleTempSensor.ino +++ b/examples/SimpleTempSensor/SimpleTempSensor.ino @@ -27,7 +27,7 @@ void setup() { } Serial.print("Temperature sensor sample rate = "); - Serial.print(IMU.tempSampleRate()); + Serial.print(IMU.temperatureSampleRate()); Serial.println(" Hz"); Serial.println(); Serial.println("Temperature reading in degrees C"); @@ -37,8 +37,8 @@ void setup() { void loop() { float t; - if (IMU.tempAvailable()) { - IMU.readTemp(t); + if (IMU.temperatureAvailable()) { + IMU.readTemperature(t); Serial.println(t); } diff --git a/keywords.txt b/keywords.txt index 8bb4192..af2d048 100644 --- a/keywords.txt +++ b/keywords.txt @@ -1,6 +1,6 @@ ####################################### # Syntax Coloring Map For Arduino_LSM6DS3 -####################################### +####################################### # Class ####################################### @@ -9,19 +9,22 @@ LSM6DS3 KEYWORD1 IMU KEYWORD1 ####################################### -# Methods and Functions -####################################### +# Methods and Functions +####################################### begin KEYWORD2 end KEYWORD2 readAcceleration KEYWORD2 readGyroscope KEYWORD2 +readTemperature KEYWORD2 gyroscopeAvailable KEYWORD2 accelerationAvailable KEYWORD2 +temperatureAvailable KEYWORD2 accelerationSampleRate KEYWORD2 gyroscopeSampleRate KEYWORD2 +temperatureSampleRate KEYWORD2 ####################################### # Constants -####################################### \ No newline at end of file +####################################### diff --git a/src/LSM6DS3.cpp b/src/LSM6DS3.cpp index 9cf185e..67c9e13 100644 --- a/src/LSM6DS3.cpp +++ b/src/LSM6DS3.cpp @@ -178,7 +178,7 @@ float LSM6DS3Class::gyroscopeSampleRate() return 104.0F; } -int LSM6DS3Class::readTemp(float& t) +int LSM6DS3Class::readTemperature(float& t) { int16_t data[1]; @@ -193,7 +193,7 @@ int LSM6DS3Class::readTemp(float& t) return 1; } -int LSM6DS3Class::tempAvailable() +int LSM6DS3Class::temperatureAvailable() { if (readRegister(LSM6DS3_STATUS_REG) & 0x04) { return 1; @@ -202,7 +202,7 @@ int LSM6DS3Class::tempAvailable() return 0; } -float LSM6DS3Class::tempSampleRate() +float LSM6DS3Class::temperatureSampleRate() { return 52.0F; } diff --git a/src/LSM6DS3.h b/src/LSM6DS3.h index efcec73..4b5f99c 100644 --- a/src/LSM6DS3.h +++ b/src/LSM6DS3.h @@ -42,9 +42,9 @@ class LSM6DS3Class { virtual int gyroscopeAvailable(); // Check for available data from gyroscope // Temperature Sensor - virtual int readTemp(float& t); // Results are in deg. C - virtual float tempSampleRate(); // Sampling rate of the sensor. - virtual int tempAvailable(); // Check for available data from temperature sensor + virtual int readTemperature(float& t); // Results are in deg. C + virtual float temperatureSampleRate(); // Sampling rate of the sensor. + virtual int temperatureAvailable(); // Check for available data from temperature sensor private: From 5bab484c46324f68e46ccbfb7b727ba867155d12 Mon Sep 17 00:00:00 2001 From: Wolfgang Date: Tue, 17 Mar 2020 09:46:14 -0700 Subject: [PATCH 5/7] Make sure tab is really a tab Co-Authored-By: per1234 --- keywords.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keywords.txt b/keywords.txt index af2d048..7ccab0a 100644 --- a/keywords.txt +++ b/keywords.txt @@ -17,13 +17,13 @@ end KEYWORD2 readAcceleration KEYWORD2 readGyroscope KEYWORD2 -readTemperature KEYWORD2 +readTemperature KEYWORD2 gyroscopeAvailable KEYWORD2 accelerationAvailable KEYWORD2 -temperatureAvailable KEYWORD2 +temperatureAvailable KEYWORD2 accelerationSampleRate KEYWORD2 gyroscopeSampleRate KEYWORD2 -temperatureSampleRate KEYWORD2 +temperatureSampleRate KEYWORD2 ####################################### # Constants From d6ac7482417ffc30c579017e55e77933bca203d3 Mon Sep 17 00:00:00 2001 From: Wolfgang Date: Tue, 17 Mar 2020 11:05:15 -0700 Subject: [PATCH 6/7] Prevent truncation of temperature reading Co-Authored-By: per1234 --- src/LSM6DS3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LSM6DS3.cpp b/src/LSM6DS3.cpp index 67c9e13..e31d5fb 100644 --- a/src/LSM6DS3.cpp +++ b/src/LSM6DS3.cpp @@ -188,7 +188,7 @@ int LSM6DS3Class::readTemperature(float& t) return 0; } - t = data[0] / 16 + 25; + t = data[0] / 16.0 + 25; return 1; } From 742c3bf055ef553b0b0f56c7eba55c85f4c5f77a Mon Sep 17 00:00:00 2001 From: Wolfgang Date: Wed, 18 Mar 2020 07:49:21 -0700 Subject: [PATCH 7/7] Explain References Co-Authored-By: per1234 --- examples/SimpleTempSensor/SimpleTempSensor.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/SimpleTempSensor/SimpleTempSensor.ino b/examples/SimpleTempSensor/SimpleTempSensor.ino index 586b455..74c183c 100644 --- a/examples/SimpleTempSensor/SimpleTempSensor.ino +++ b/examples/SimpleTempSensor/SimpleTempSensor.ino @@ -38,6 +38,7 @@ void loop() { float t; if (IMU.temperatureAvailable()) { + // after IMU.readTemperature() returns, t will contain the temperature reading IMU.readTemperature(t); Serial.println(t);