diff options
Diffstat (limited to 'peripheral/libupm/src/hx711/hx711.h')
-rw-r--r-- | peripheral/libupm/src/hx711/hx711.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/peripheral/libupm/src/hx711/hx711.h b/peripheral/libupm/src/hx711/hx711.h new file mode 100644 index 0000000..4047fbc --- /dev/null +++ b/peripheral/libupm/src/hx711/hx711.h @@ -0,0 +1,138 @@ +/* + * Author: Rafael da Mata Neri <rafael.neri@gmail.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. + */ +#pragma once + +#include <unistd.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <mraa/gpio.h> + +namespace upm { + /** + * @brief HX711 24-bit ADC library + * @defgroup hx711 libupm-hx711 + * @ingroup generic gpio electric + */ + + /** + * @library hx711 + * @sensor hx711 + * @comname HX711 Analog-to-Digital Converter + * @type electric + * @man generic + * @web http://www.dfrobot.com/image/data/SEN0160/hx711_english.pdf + * @con gpio + * + * @brief API for the HX711 Analog-to-Digital Converter + * + * HX711 is a precision 24-bit analog-to-digital converter (ADC) + * designed for weight scales and industrial control applications to + * interface directly with a bridge sensor. This module was tested on + * the Intel(R) Galileo Gen 2 board. + * + * @image html hx711.jpeg + * @snippet hx711.cxx Interesting + */ + class HX711 { + public: + /** + * HX711 constructor + * + * @param data Defines the data pin + * @param sck Defines the clock pin + * @param gain Defines the gain factor + * Valid values are 128 or 64 for channel A; channel B works with a 32-gain factor only + */ + HX711(uint8_t data, uint8_t sck, uint8_t gain = 128); + + /** + * HX711 destructor + */ + ~HX711(); + + /** + * Waits for the chip to be ready and returns a reading + * + * @return Raw ADC reading + */ + unsigned long read(); + + /** + * Sets the gain factor; takes effect only after a call to read() + * channel A can be set for a 128 or 64 gain; channel B has a fixed 32-gain + * factor depending on the parameter; the channel is also set to either A or B + * @param gain Defines the gain factor + */ + void setGain(uint8_t gain = 128); + + /** + * Returns an average reading + * @param times Defines how many reading to do + * @return Average reading + */ + unsigned long readAverage(uint8_t times = 10); + + /** + * Returns (readAverage() - OFFSET) + * @param times Defines how many readings to do + * @return Current value without the tare weight + */ + double getValue(uint8_t times = 10); + + /** + * Returns getValue() divided by SCALE + * @param times Defines how many readings to do + * @return Raw value divided by a value obtained via calibration + */ + float getUnits(uint8_t times = 1); + + /** + * Sets the OFFSET value for the tare weight + * @param times Defines how many times to read the tare value + */ + void tare(uint8_t times = 10); + + /** + * Sets the SCALE value + * This value is used to convert the raw data to human-readable data (measurement units) + * @param scale Value obtained via calibration + */ + void setScale(float scale = 1.f); + private: + mraa_gpio_context m_sckPinCtx; // Power Down and Serial Clock Input Pin + mraa_gpio_context m_dataPinCtx; // Serial Data Output Pin + + uint8_t GAIN; // amplification factor + unsigned long OFFSET; // used for tare weight + float SCALE; // used to return weight in grams, kg, ounces, whatever + + + /** + * Sets the OFFSET value + * This value is subtracted from the actual reading (tare weight) + * @param scale Value obtained via calibration + */ + void setOffset(long offset = 0); + }; + +} |