diff --git a/arduino-lib/Adafruit-MLX90614-Library-master/Adafruit_MLX90614.cpp b/arduino-lib/Adafruit-MLX90614-Library-master/Adafruit_MLX90614.cpp new file mode 100644 index 0000000..241362c --- /dev/null +++ b/arduino-lib/Adafruit-MLX90614-Library-master/Adafruit_MLX90614.cpp @@ -0,0 +1,178 @@ +/*************************************************** + This is a library for the MLX90614 Temp Sensor + + Designed specifically to work with the MLX90614 sensors in the + adafruit shop + ----> https://www.adafruit.com/products/1748 + ----> https://www.adafruit.com/products/1749 + + These sensors use I2C to communicate, 2 pins are required to + interface + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Limor Fried/Ladyada for Adafruit Industries. + BSD license, all text above must be included in any redistribution + ****************************************************/ + +#include "Adafruit_MLX90614.h" +/** + * @brief Construct a new Adafruit_MLX90614::Adafruit_MLX90614 object + * + * @param i2caddr The I2C address to use. Defaults to 0x5A + */ +Adafruit_MLX90614::Adafruit_MLX90614(uint8_t i2caddr) { _addr = i2caddr; } +/** + * @brief Begin the I2C connection + * + * @return bool Always returns true + */ +bool Adafruit_MLX90614::begin(void) { + Wire.begin(); + + /* + for (uint8_t i=0; i<0x20; i++) { + Serial.print(i); Serial.print(" = "); + Serial.println(read16(i), HEX); + } + */ + return true; +} + +/** + * @brief Read the raw value from the emissivity register + * + * @return uint16_t The unscaled emissivity value + */ +uint16_t Adafruit_MLX90614::readEmissivityReg(void) { + return read16(MLX90614_EMISS); +} +/** + * @brief Write the raw unscaled emissivity value to the emissivity register + * + * @param ereg The unscaled emissivity value + */ +void Adafruit_MLX90614::writeEmissivityReg(uint16_t ereg) { + write16(MLX90614_EMISS, 0); // erase + delay(10); + write16(MLX90614_EMISS, ereg); + delay(10); +} +/** + * @brief Read the emissivity value from the sensor's register and scale + * + * @return double The emissivity value, ranging from 0.1 - 1.0 + */ +double Adafruit_MLX90614::readEmissivity(void) { + uint16_t ereg = read16(MLX90614_EMISS); + return ((double)ereg) / 65535.0; +} +/** + * @brief Set the emissivity value + * + * @param emissivity The emissivity value to use, between 0.1 and 1.0 + */ +void Adafruit_MLX90614::writeEmissivity(double emissivity) { + uint16_t ereg = int(0xffff * emissivity); + + writeEmissivityReg(ereg); +} + +/** + * @brief Get the current temperature of an object in degrees Farenheit + * + * @return double The temperature in degrees Farenheit + */ +double Adafruit_MLX90614::readObjectTempF(void) { + return (readTemp(MLX90614_TOBJ1) * 9 / 5) + 32; +} +/** + * @brief Get the current ambient temperature in degrees Farenheit + * + * @return double The temperature in degrees Farenheit + */ +double Adafruit_MLX90614::readAmbientTempF(void) { + return (readTemp(MLX90614_TA) * 9 / 5) + 32; +} + +/** + * @brief Get the current temperature of an object in degrees Celcius + * + * @return double The temperature in degrees Celcius + */ +double Adafruit_MLX90614::readObjectTempC(void) { + return readTemp(MLX90614_TOBJ1); +} + +/** + * @brief Get the current ambient temperature in degrees Celcius + * + * @return double The temperature in degrees Celcius + */ +double Adafruit_MLX90614::readAmbientTempC(void) { + return readTemp(MLX90614_TA); +} + +float Adafruit_MLX90614::readTemp(uint8_t reg) { + float temp; + + temp = read16(reg); + temp *= .02; + temp -= 273.15; + return temp; +} + +/*********************************************************************/ + +uint16_t Adafruit_MLX90614::read16(uint8_t a) { + uint16_t ret; + + Wire.beginTransmission(_addr); // start transmission to device + Wire.write(a); // sends register address to read from + Wire.endTransmission(false); // end transmission + + Wire.requestFrom(_addr, (size_t)3); // send data n-bytes read + ret = Wire.read(); // receive DATA + ret |= Wire.read() << 8; // receive DATA + + uint8_t pec = Wire.read(); + + return ret; +} + +byte Adafruit_MLX90614::crc8(byte *addr, byte len) +// The PEC calculation includes all bits except the START, REPEATED START, STOP, +// ACK, and NACK bits. The PEC is a CRC-8 with polynomial X8+X2+X1+1. +{ + byte crc = 0; + while (len--) { + byte inbyte = *addr++; + for (byte i = 8; i; i--) { + byte carry = (crc ^ inbyte) & 0x80; + crc <<= 1; + if (carry) + crc ^= 0x7; + inbyte <<= 1; + } + } + return crc; +} + +void Adafruit_MLX90614::write16(uint8_t a, uint16_t v) { + uint8_t pec; + uint8_t pecbuf[4]; + + pecbuf[0] = _addr << 1; + pecbuf[1] = a; + pecbuf[2] = v & 0xff; + pecbuf[3] = v >> 8; + pec = crc8(pecbuf, sizeof pecbuf); + + Wire.beginTransmission(_addr); // start transmission to device + Wire.write(a); // sends register address to write + Wire.write(v & 0xff); // lo + Wire.write(v >> 8); // hi + Wire.write(pec); // pec + Wire.endTransmission(true); // end transmission +} diff --git a/arduino-lib/Adafruit-MLX90614-Library-master/Adafruit_MLX90614.h b/arduino-lib/Adafruit-MLX90614-Library-master/Adafruit_MLX90614.h new file mode 100644 index 0000000..8f8edaa --- /dev/null +++ b/arduino-lib/Adafruit-MLX90614-Library-master/Adafruit_MLX90614.h @@ -0,0 +1,71 @@ +/*************************************************** + This is a library for the MLX90614 Temp Sensor + + Designed specifically to work with the MLX90614 sensors in the + adafruit shop + ----> https://www.adafruit.com/products/1748 + ----> https://www.adafruit.com/products/1749 + + These sensors use I2C to communicate, 2 pins are required to + interface + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Limor Fried/Ladyada for Adafruied in any redistribution + ****************************************************/ + +#if (ARDUINO >= 100) +#include "Arduino.h" +#else +#include "WProgram.h" +#endif +#include "Wire.h" + +#define MLX90614_I2CADDR 0x5A + +// RAM +#define MLX90614_RAWIR1 0x04 +#define MLX90614_RAWIR2 0x05 +#define MLX90614_TA 0x06 +#define MLX90614_TOBJ1 0x07 +#define MLX90614_TOBJ2 0x08 +// EEPROM +#define MLX90614_TOMAX 0x20 +#define MLX90614_TOMIN 0x21 +#define MLX90614_PWMCTRL 0x22 +#define MLX90614_TARANGE 0x23 +#define MLX90614_EMISS 0x24 +#define MLX90614_CONFIG 0x25 +#define MLX90614_ADDR 0x2E +#define MLX90614_ID1 0x3C +#define MLX90614_ID2 0x3D +#define MLX90614_ID3 0x3E +#define MLX90614_ID4 0x3F + +/** + * @brief Class to read from and control a MLX90614 Temp Sensor + * + */ +class Adafruit_MLX90614 { +public: + Adafruit_MLX90614(uint8_t addr = MLX90614_I2CADDR); + bool begin(); + + double readObjectTempC(void); + double readAmbientTempC(void); + double readObjectTempF(void); + double readAmbientTempF(void); + uint16_t readEmissivityReg(void); + void writeEmissivityReg(uint16_t ereg); + double readEmissivity(void); + void writeEmissivity(double emissivity); + +private: + float readTemp(uint8_t reg); + + uint16_t read16(uint8_t addr); + void write16(uint8_t addr, uint16_t data); + byte crc8(byte *addr, byte len); + uint8_t _addr; +}; diff --git a/arduino-lib/Adafruit-MLX90614-Library-master/README.md b/arduino-lib/Adafruit-MLX90614-Library-master/README.md new file mode 100644 index 0000000..26ad469 --- /dev/null +++ b/arduino-lib/Adafruit-MLX90614-Library-master/README.md @@ -0,0 +1,51 @@ +# Adafruit-MLX90614-Library [![Build Status](https://github.com/adafruit/Adafruit-MLX90614-Library/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit-MLX90614-Library/actions)[![Documentation](https://github.com/adafruit/ci-arduino/blob/master/assets/doxygen_badge.svg)](http://adafruit.github.io/Adafruit-MLX90614-Library/html/index.html) + +This is a library for the MLX90614 temperature sensor + + + +Designed and tested to work with the MLX90614 sensors in the adafruit shop + * https://www.adafruit.com/products/1747 3V version + * https://www.adafruit.com/products/1748 5V version + +Check out the links above for our tutorials and wiring diagrams + +Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! + +# Installation +To install, use the Arduino Library Manager and search for "Adafruit-MLX90614-Library" and install the library. + +# Contributing + +Contributions are welcome! Please read our [Code of Conduct](https://github.com/adafruit/Adafruit-MLX90614-Library/blob/master/CODE_OF_CONDUCT.md>) +before contributing to help this project stay welcoming. + +## Documentation and doxygen +Documentation is produced by doxygen. Contributions should include documentation for any new code added. + +Some examples of how to use doxygen can be found in these guide pages: + +https://learn.adafruit.com/the-well-automated-arduino-library/doxygen + +https://learn.adafruit.com/the-well-automated-arduino-library/doxygen-tips + +## Formatting and clang-format +This library uses [`clang-format`](https://releases.llvm.org/download.html) to standardize the formatting of `.cpp` and `.h` files. +Contributions should be formatted using `clang-format`: + +The `-i` flag will make the changes to the file. +```bash +clang-format -i *.cpp *.h +``` +If you prefer to make the changes yourself, running `clang-format` without the `-i` flag will print out a formatted version of the file. You can save this to a file and diff it against the original to see the changes. + +Note that the formatting output by `clang-format` is what the automated formatting checker will expect. Any diffs from this formatting will result in a failed build until they are addressed. Using the `-i` flag is highly recommended. + +### clang-format resources + * [Binary builds and source available on the LLVM downloads page](https://releases.llvm.org/download.html) + * [Documentation and IDE integration](https://clang.llvm.org/docs/ClangFormat.html) + +## About this Driver +Written by Limor Fried for Adafruit Industries. +BSD license, check license.txt for more information +All text above must be included in any redistribution diff --git a/arduino-lib/Adafruit-MLX90614-Library-master/code-of-conduct.md b/arduino-lib/Adafruit-MLX90614-Library-master/code-of-conduct.md new file mode 100644 index 0000000..8ee6e44 --- /dev/null +++ b/arduino-lib/Adafruit-MLX90614-Library-master/code-of-conduct.md @@ -0,0 +1,127 @@ +# Adafruit Community Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and leaders pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level or type of +experience, education, socio-economic status, nationality, personal appearance, +race, religion, or sexual identity and orientation. + +## Our Standards + +We are committed to providing a friendly, safe and welcoming environment for +all. + +Examples of behavior that contributes to creating a positive environment +include: + +* Be kind and courteous to others +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Collaborating with other community members +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and sexual attention or advances +* The use of inappropriate images, including in a community member's avatar +* The use of inappropriate language, including in a community member's nickname +* Any spamming, flaming, baiting or other attention-stealing behavior +* Excessive or unwelcome helping; answering outside the scope of the question + asked +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate + +The goal of the standards and moderation guidelines outlined here is to build +and maintain a respectful community. We ask that you don’t just aim to be +"technically unimpeachable", but rather try to be your best self. + +We value many things beyond technical expertise, including collaboration and +supporting others within our community. Providing a positive experience for +other community members can have a much more significant impact than simply +providing the correct answer. + +## Our Responsibilities + +Project leaders are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project leaders have the right and responsibility to remove, edit, or +reject messages, comments, commits, code, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any community member for other behaviors that they deem +inappropriate, threatening, offensive, or harmful. + +## Moderation + +Instances of behaviors that violate the Adafruit Community Code of Conduct +may be reported by any member of the community. Community members are +encouraged to report these situations, including situations they witness +involving other community members. + +You may report in the following ways: + +In any situation, you may send an email to . + +On the Adafruit Discord, you may send an open message from any channel +to all Community Helpers by tagging @community helpers. You may also send an +open message from any channel, or a direct message to @kattni#1507, +@tannewt#4653, @Dan Halbert#1614, @cater#2442, @sommersoft#0222, or +@Andon#8175. + +Email and direct message reports will be kept confidential. + +In situations on Discord where the issue is particularly egregious, possibly +illegal, requires immediate action, or violates the Discord terms of service, +you should also report the message directly to Discord. + +These are the steps for upholding our community’s standards of conduct. + +1. Any member of the community may report any situation that violates the +Adafruit Community Code of Conduct. All reports will be reviewed and +investigated. +2. If the behavior is an egregious violation, the community member who +committed the violation may be banned immediately, without warning. +3. Otherwise, moderators will first respond to such behavior with a warning. +4. Moderators follow a soft "three strikes" policy - the community member may +be given another chance, if they are receptive to the warning and change their +behavior. +5. If the community member is unreceptive or unreasonable when warned by a +moderator, or the warning goes unheeded, they may be banned for a first or +second offense. Repeated offenses will result in the community member being +banned. + +## Scope + +This Code of Conduct and the enforcement policies listed above apply to all +Adafruit Community venues. This includes but is not limited to any community +spaces (both public and private), the entire Adafruit Discord server, and +Adafruit GitHub repositories. Examples of Adafruit Community spaces include +but are not limited to meet-ups, audio chats on the Adafruit Discord, or +interaction at a conference. + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. As a community +member, you are representing our community, and are expected to behave +accordingly. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at +, +and the [Rust Code of Conduct](https://www.rust-lang.org/en-US/conduct.html). + +For other projects adopting the Adafruit Community Code of +Conduct, please contact the maintainers of those projects for enforcement. +If you wish to use this code of conduct for your own project, consider +explicitly mentioning your moderation policy or making a copy with your +own moderation policy so as to avoid confusion. diff --git a/arduino-lib/Adafruit-MLX90614-Library-master/examples/mlxtest/mlxtest.ino b/arduino-lib/Adafruit-MLX90614-Library-master/examples/mlxtest/mlxtest.ino new file mode 100644 index 0000000..e2f5954 --- /dev/null +++ b/arduino-lib/Adafruit-MLX90614-Library-master/examples/mlxtest/mlxtest.ino @@ -0,0 +1,40 @@ +/*************************************************** + This is a library example for the MLX90614 Temp Sensor + + Designed specifically to work with the MLX90614 sensors in the + adafruit shop + ----> https://www.adafruit.com/products/1747 3V version + ----> https://www.adafruit.com/products/1748 5V version + + These sensors use I2C to communicate, 2 pins are required to + interface + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Limor Fried/Ladyada for Adafruit Industries. + BSD license, all text above must be included in any redistribution + ****************************************************/ + +#include +#include + +Adafruit_MLX90614 mlx = Adafruit_MLX90614(); + +void setup() { + Serial.begin(9600); + + Serial.println("Adafruit MLX90614 test"); + + mlx.begin(); +} + +void loop() { + Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); + Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C"); + Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); + Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F"); + + Serial.println(); + delay(500); +} diff --git a/arduino-lib/Adafruit-MLX90614-Library-master/library.properties b/arduino-lib/Adafruit-MLX90614-Library-master/library.properties new file mode 100644 index 0000000..6f9778d --- /dev/null +++ b/arduino-lib/Adafruit-MLX90614-Library-master/library.properties @@ -0,0 +1,9 @@ +name=Adafruit MLX90614 Library +version=1.1.0 +author=Adafruit +maintainer=Adafruit +sentence=Arduino library for the MLX90614 sensors in the Adafruit shop +paragraph=Arduino library for the MLX90614 sensors in the Adafruit shop +category=Sensors +url=https://github.com/adafruit/Adafruit-MLX90614-Library +architectures=* diff --git a/arduino-lib/Adafruit-MLX90614-Library-master/license.txt b/arduino-lib/Adafruit-MLX90614-Library-master/license.txt new file mode 100644 index 0000000..8aafa28 --- /dev/null +++ b/arduino-lib/Adafruit-MLX90614-Library-master/license.txt @@ -0,0 +1,26 @@ +Software License Agreement (BSD License) + +Copyright (c) 2020 Limor Fried for Adafruit Industries +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holders nor the +names of its contributors may be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.