Library for HX711 device. 24-Bit Analog-to-Digital Converter (ADC) for Weigh Scales

Dependents:   EXPO_ANDA EXPO_ANDA_Copilotoco

Committer:
mcm
Date:
Tue Sep 12 14:38:13 2017 +0000
Revision:
2:1af13a8a8275
Parent:
1:06652a775538
Child:
3:d246aa415f3a
Most of the function are defined and tested. The voltage function is left

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:06652a775538 1 /**
mcm 1:06652a775538 2 * @brief HX711.h
mcm 1:06652a775538 3 * @details 24-Bit Analog-to-Digital Converter (ADC) for Weigh Scales.
mcm 1:06652a775538 4 * Header file.
mcm 1:06652a775538 5 *
mcm 1:06652a775538 6 *
mcm 1:06652a775538 7 * @return NA
mcm 1:06652a775538 8 *
mcm 1:06652a775538 9 * @author Manuel Caballero
mcm 1:06652a775538 10 * @date 11/September/2017
mcm 1:06652a775538 11 * @version 11/September/2017 The ORIGIN
mcm 1:06652a775538 12 * @pre NaN.
mcm 1:06652a775538 13 * @warning NaN
mcm 1:06652a775538 14 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ).
mcm 1:06652a775538 15 */
mcm 1:06652a775538 16 #ifndef HX711_H
mcm 1:06652a775538 17 #define HX711_H
mcm 1:06652a775538 18
mcm 1:06652a775538 19 #include "mbed.h"
mcm 1:06652a775538 20
mcm 1:06652a775538 21
mcm 1:06652a775538 22 /**
mcm 1:06652a775538 23 Example:
mcm 1:06652a775538 24
mcm 1:06652a775538 25 [todo]
mcm 1:06652a775538 26 */
mcm 1:06652a775538 27
mcm 1:06652a775538 28
mcm 1:06652a775538 29 /*!
mcm 1:06652a775538 30 Library for the HX711 24-Bit Analog-to-Digital Converter (ADC) for Weigh Scales.
mcm 1:06652a775538 31 */
mcm 1:06652a775538 32 class HX711
mcm 1:06652a775538 33 {
mcm 1:06652a775538 34 public:
mcm 1:06652a775538 35 /**
mcm 1:06652a775538 36 * @brief CHANNELS & GAIN
mcm 1:06652a775538 37 */
mcm 1:06652a775538 38 typedef enum {
mcm 1:06652a775538 39 CHANNEL_A_GAIN_128 = 0, /*!< Channel A 128 Gain. */
mcm 1:06652a775538 40 CHANNEL_B_GAIN_32 = 1, /*!< Channel B 32 Gain. */
mcm 1:06652a775538 41 CHANNEL_A_GAIN_64 = 2 /*!< Channel A 64 Gain. */
mcm 1:06652a775538 42 } HX711_channel_gain_t;
mcm 1:06652a775538 43
mcm 1:06652a775538 44
mcm 1:06652a775538 45
mcm 1:06652a775538 46 /**
mcm 2:1af13a8a8275 47 * @brief READY/BUSY DATA
mcm 1:06652a775538 48 */
mcm 1:06652a775538 49 typedef enum {
mcm 1:06652a775538 50 HX711_DATA_BUSY = 0, /*!< HX711 data is NOT ready to be read. */
mcm 1:06652a775538 51 HX711_DATA_READY = 1 /*!< HX711 data is ready to be read. */
mcm 1:06652a775538 52 } HX711_data_output_status_t;
mcm 1:06652a775538 53
mcm 1:06652a775538 54
mcm 1:06652a775538 55
mcm 2:1af13a8a8275 56 /**
mcm 2:1af13a8a8275 57 * @brief SCALE
mcm 2:1af13a8a8275 58 */
mcm 2:1af13a8a8275 59 typedef enum {
mcm 2:1af13a8a8275 60 HX711_SCALE_kg = 0, /*!< HX711 Scale in kg. */
mcm 2:1af13a8a8275 61 HX711_SCALE_g = 1, /*!< HX711 Scale in g. */
mcm 2:1af13a8a8275 62 HX711_SCALE_mg = 2, /*!< HX711 Scale in mg. */
mcm 2:1af13a8a8275 63 HX711_SCALE_ug = 3 /*!< HX711 Scale in ug. */
mcm 2:1af13a8a8275 64 } HX711_scale_t;
mcm 2:1af13a8a8275 65
mcm 2:1af13a8a8275 66
mcm 2:1af13a8a8275 67
mcm 2:1af13a8a8275 68
mcm 1:06652a775538 69 #ifndef VECTOR_STRUCT_H
mcm 1:06652a775538 70 #define VECTOR_STRUCT_H
mcm 1:06652a775538 71 typedef struct {
mcm 2:1af13a8a8275 72 float myRawValue_WithCalibratedMass;
mcm 2:1af13a8a8275 73 float myRawValue_WithoutCalibratedMass;
mcm 2:1af13a8a8275 74 float myRawValue_TareWeight;
mcm 2:1af13a8a8275 75 uint32_t myRawValue;
mcm 2:1af13a8a8275 76 } Vector_count_t;
mcm 2:1af13a8a8275 77
mcm 1:06652a775538 78 typedef struct {
mcm 2:1af13a8a8275 79 float myMass;
mcm 2:1af13a8a8275 80 } Vector_mass_t;
mcm 1:06652a775538 81 #endif
mcm 2:1af13a8a8275 82
mcm 1:06652a775538 83
mcm 1:06652a775538 84
mcm 1:06652a775538 85 /**
mcm 1:06652a775538 86 * @brief INTERNAL CONSTANTS
mcm 1:06652a775538 87 */
mcm 2:1af13a8a8275 88 #define HX711_PIN_HIGH 0x01 /*!< Pin 'HIGH' */
mcm 1:06652a775538 89 #define HX711_PIN_LOW 0x00 /*!< Pin 'LOW' */
mcm 1:06652a775538 90
mcm 1:06652a775538 91 typedef enum {
mcm 1:06652a775538 92 HX711_SUCCESS = 0,
mcm 1:06652a775538 93 HX711_FAILURE = 1,
mcm 1:06652a775538 94 } HX711_status_t;
mcm 1:06652a775538 95
mcm 1:06652a775538 96
mcm 1:06652a775538 97
mcm 1:06652a775538 98
mcm 1:06652a775538 99 /** Create an HX711 object connected to the specified pins.
mcm 1:06652a775538 100 *
mcm 1:06652a775538 101 * @param pd_sck HX711 Power down control (high active) and serial clock input
mcm 1:06652a775538 102 * @param dout HX711 Serial data output
mcm 1:06652a775538 103 */
mcm 2:1af13a8a8275 104 HX711 ( PinName PD_SCK, PinName DOUT );
mcm 1:06652a775538 105
mcm 1:06652a775538 106 /** Delete HX711 object.
mcm 1:06652a775538 107 */
mcm 1:06652a775538 108 ~HX711();
mcm 1:06652a775538 109
mcm 1:06652a775538 110 /** It performs an internal reset.
mcm 1:06652a775538 111 */
mcm 1:06652a775538 112 HX711_status_t HX711_Reset ( void );
mcm 1:06652a775538 113
mcm 1:06652a775538 114 /** It puts the device into power-down mode.
mcm 1:06652a775538 115 */
mcm 1:06652a775538 116 HX711_status_t HX711_PowerDown ( void );
mcm 2:1af13a8a8275 117
mcm 2:1af13a8a8275 118 /** It sets both the channel and the gain for the next measurement.
mcm 2:1af13a8a8275 119 */
mcm 2:1af13a8a8275 120 HX711_status_t HX711_SetChannelAndGain ( HX711_channel_gain_t myChannel_Gain );
mcm 2:1af13a8a8275 121
mcm 2:1af13a8a8275 122 /** It gets both the channel and the gain for the current measurement.
mcm 2:1af13a8a8275 123 */
mcm 2:1af13a8a8275 124 HX711_channel_gain_t HX711_GetChannelAndGain ( void );
mcm 2:1af13a8a8275 125
mcm 2:1af13a8a8275 126 /** It reads raw data from the device.
mcm 2:1af13a8a8275 127 */
mcm 2:1af13a8a8275 128 HX711_status_t HX711_ReadRawData ( HX711_channel_gain_t myChannel_Gain, Vector_count_t* myNewRawData, uint32_t myAverage );
mcm 2:1af13a8a8275 129
mcm 2:1af13a8a8275 130 /** It reads raw data with an user-specified calibrated mass.
mcm 2:1af13a8a8275 131 */
mcm 2:1af13a8a8275 132 HX711_status_t HX711_ReadData_WithCalibratedMass ( HX711_channel_gain_t myChannel_Gain, Vector_count_t* myNewRawData, uint32_t myAverage );
mcm 2:1af13a8a8275 133
mcm 2:1af13a8a8275 134 /** It reads raw data without any mass.
mcm 2:1af13a8a8275 135 */
mcm 2:1af13a8a8275 136 HX711_status_t HX711_ReadData_WithoutMass ( HX711_channel_gain_t myChannel_Gain, Vector_count_t* myNewRawData, uint32_t myAverage );
mcm 2:1af13a8a8275 137
mcm 2:1af13a8a8275 138 /** It reads raw data without any mass after the system is calibrated.
mcm 2:1af13a8a8275 139 */
mcm 2:1af13a8a8275 140 HX711_status_t HX711_SetAutoTare ( HX711_channel_gain_t myChannel_Gain, Vector_count_t* myNewRawData, float myTime );
mcm 2:1af13a8a8275 141
mcm 2:1af13a8a8275 142 /** It calculates scaled data.
mcm 2:1af13a8a8275 143 */
mcm 2:1af13a8a8275 144 Vector_mass_t HX711_CalculateMass ( Vector_count_t* myNewRawData, float myCalibratedMass, HX711_scale_t myScaleCalibratedMass );
mcm 1:06652a775538 145
mcm 1:06652a775538 146
mcm 1:06652a775538 147
mcm 1:06652a775538 148
mcm 2:1af13a8a8275 149 private:
mcm 2:1af13a8a8275 150 DigitalOut _PD_SCK;
mcm 2:1af13a8a8275 151 DigitalIn _DOUT;
mcm 2:1af13a8a8275 152 HX711_channel_gain_t _HX711_CHANNEL_GAIN;
mcm 2:1af13a8a8275 153 HX711_scale_t _HX711_SCALE;
mcm 2:1af13a8a8275 154 float _HX711_USER_CALIBATED_MASS;
mcm 1:06652a775538 155 };
mcm 1:06652a775538 156
mcm 1:06652a775538 157 #endif