library for using load cell with hx711

Dependents:   Loadcellfinal_last_worked_copy ColdStorageSystem

Fork of HX711 by Stephen Laskowski

Committer:
padte
Date:
Mon Mar 20 13:07:36 2017 +0000
Revision:
1:a2666eae3d06
Parent:
0:716e1cbdac61
hx711

Who changed what in which revision?

UserRevisionLine numberNew contents of line
laskowsk 0:716e1cbdac61 1 /*
laskowsk 0:716e1cbdac61 2 * FILE: HX711.cpp
laskowsk 0:716e1cbdac61 3 *
laskowsk 0:716e1cbdac61 4 * VERSION: 0.1
laskowsk 0:716e1cbdac61 5 * PURPOSE: HX711 weight library for Nucleo STM32
laskowsk 0:716e1cbdac61 6 * AUTHOR: Bertrand Bouvier
laskowsk 0:716e1cbdac61 7 * LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)
laskowsk 0:716e1cbdac61 8 *
laskowsk 0:716e1cbdac61 9 * DATASHEET: http://www.dfrobot.com/image/data/SEN0160/hx711_english.pdf
laskowsk 0:716e1cbdac61 10 * URL:
laskowsk 0:716e1cbdac61 11 *
laskowsk 0:716e1cbdac61 12 * HISTORY:
laskowsk 0:716e1cbdac61 13 * 24/05/2015 - Bertrand Bouvier - Original version
laskowsk 0:716e1cbdac61 14 * see HX711.h
laskowsk 0:716e1cbdac61 15 *
laskowsk 0:716e1cbdac61 16 * SPECIAL THANKS:
padte 1:a2666eae3d06 17 *
laskowsk 0:716e1cbdac61 18 * https://github.com/aguegu/Arduino
laskowsk 0:716e1cbdac61 19 * http://aguegu.net
laskowsk 0:716e1cbdac61 20 *
padte 1:a2666eae3d06 21 * Inspired by bodge work
laskowsk 0:716e1cbdac61 22 * https://github.com/bogde/HX711
laskowsk 0:716e1cbdac61 23 *
laskowsk 0:716e1cbdac61 24 */
laskowsk 0:716e1cbdac61 25
laskowsk 0:716e1cbdac61 26 #include "HX711.h"
laskowsk 0:716e1cbdac61 27 #include "mbed.h"
laskowsk 0:716e1cbdac61 28
padte 1:a2666eae3d06 29 //#define SCALE_VALUE 259.79 //Multiple hardware-specific
laskowsk 0:716e1cbdac61 30
padte 1:a2666eae3d06 31 HX711::HX711(PinName pinData, PinName pinSck , uint8_t gain)
laskowsk 0:716e1cbdac61 32 {
padte 1:a2666eae3d06 33 _pinData = pinData ;
padte 1:a2666eae3d06 34 _pinSck = pinSck ;
laskowsk 0:716e1cbdac61 35
laskowsk 0:716e1cbdac61 36 this->setGain(gain);
laskowsk 0:716e1cbdac61 37
laskowsk 0:716e1cbdac61 38 DigitalOut sck(_pinSck);
laskowsk 0:716e1cbdac61 39 DigitalIn data(_pinData);
laskowsk 0:716e1cbdac61 40
laskowsk 0:716e1cbdac61 41 sck = 1; //Initialisation HX711
laskowsk 0:716e1cbdac61 42 wait_us(100);
laskowsk 0:716e1cbdac61 43 sck = 0;
laskowsk 0:716e1cbdac61 44
padte 1:a2666eae3d06 45 this->setOffset(averageValue()); //TARE de la balance
padte 1:a2666eae3d06 46 this->setScale(); //Setting the SCALE value
laskowsk 0:716e1cbdac61 47 }
laskowsk 0:716e1cbdac61 48
laskowsk 0:716e1cbdac61 49 HX711::~HX711()
laskowsk 0:716e1cbdac61 50 {
laskowsk 0:716e1cbdac61 51
laskowsk 0:716e1cbdac61 52 }
laskowsk 0:716e1cbdac61 53
padte 1:a2666eae3d06 54 int HX711::averageValue(uint8_t times) //Calculates an average over several measurements
laskowsk 0:716e1cbdac61 55 {
laskowsk 0:716e1cbdac61 56 int sum = 0;
padte 1:a2666eae3d06 57 for (uint8_t i = 0; i < times; i++)
laskowsk 0:716e1cbdac61 58 {
laskowsk 0:716e1cbdac61 59 sum += getValue();
laskowsk 0:716e1cbdac61 60 }
laskowsk 0:716e1cbdac61 61
laskowsk 0:716e1cbdac61 62 return sum / times;
laskowsk 0:716e1cbdac61 63 }
laskowsk 0:716e1cbdac61 64
padte 1:a2666eae3d06 65 int HX711::getValue() //Obtain the controller raw value
laskowsk 0:716e1cbdac61 66 {
laskowsk 0:716e1cbdac61 67 int buffer;
laskowsk 0:716e1cbdac61 68 buffer = 0 ;
laskowsk 0:716e1cbdac61 69
laskowsk 0:716e1cbdac61 70 DigitalOut sck(_pinSck);
laskowsk 0:716e1cbdac61 71 DigitalIn data(_pinData);
laskowsk 0:716e1cbdac61 72
laskowsk 0:716e1cbdac61 73 while (data.read()==1) //wait is ready
laskowsk 0:716e1cbdac61 74 ;
laskowsk 0:716e1cbdac61 75
laskowsk 0:716e1cbdac61 76 for (uint8_t i = 24; i--;) //read 24 bit 1 per 1 and save to buffer
laskowsk 0:716e1cbdac61 77 {
laskowsk 0:716e1cbdac61 78 sck=1;
laskowsk 0:716e1cbdac61 79
laskowsk 0:716e1cbdac61 80 buffer = buffer << 1 ;
laskowsk 0:716e1cbdac61 81
laskowsk 0:716e1cbdac61 82 if (data.read())
laskowsk 0:716e1cbdac61 83 {
laskowsk 0:716e1cbdac61 84 buffer ++;
laskowsk 0:716e1cbdac61 85 }
laskowsk 0:716e1cbdac61 86
laskowsk 0:716e1cbdac61 87 sck=0;
laskowsk 0:716e1cbdac61 88 }
laskowsk 0:716e1cbdac61 89
laskowsk 0:716e1cbdac61 90 for (int i = 0; i < _gain; i++)
laskowsk 0:716e1cbdac61 91 {
laskowsk 0:716e1cbdac61 92 sck=1;
laskowsk 0:716e1cbdac61 93 sck=0;
laskowsk 0:716e1cbdac61 94 }
laskowsk 0:716e1cbdac61 95
laskowsk 0:716e1cbdac61 96 buffer = buffer ^ 0x800000;
laskowsk 0:716e1cbdac61 97
laskowsk 0:716e1cbdac61 98 return buffer;
laskowsk 0:716e1cbdac61 99 }
laskowsk 0:716e1cbdac61 100
laskowsk 0:716e1cbdac61 101 void HX711::setOffset(int offset)
laskowsk 0:716e1cbdac61 102 {
laskowsk 0:716e1cbdac61 103 _offset = offset;
laskowsk 0:716e1cbdac61 104 }
laskowsk 0:716e1cbdac61 105
laskowsk 0:716e1cbdac61 106 void HX711::setScale(float scale)
laskowsk 0:716e1cbdac61 107 {
laskowsk 0:716e1cbdac61 108 _scale = scale;
laskowsk 0:716e1cbdac61 109 }
laskowsk 0:716e1cbdac61 110
laskowsk 0:716e1cbdac61 111 float HX711::getGram()
laskowsk 0:716e1cbdac61 112 {
padte 1:a2666eae3d06 113 long val = (averageValue() - _offset);
laskowsk 0:716e1cbdac61 114 return (float) val / _scale;
laskowsk 0:716e1cbdac61 115 }
laskowsk 0:716e1cbdac61 116
laskowsk 0:716e1cbdac61 117 void HX711::setGain(uint8_t gain)
laskowsk 0:716e1cbdac61 118 {
laskowsk 0:716e1cbdac61 119 switch (gain)
laskowsk 0:716e1cbdac61 120 {
laskowsk 0:716e1cbdac61 121 case 128: // channel A, gain factor 128
laskowsk 0:716e1cbdac61 122 _gain = 1;
laskowsk 0:716e1cbdac61 123 break;
laskowsk 0:716e1cbdac61 124
laskowsk 0:716e1cbdac61 125 case 64: // channel A, gain factor 64
laskowsk 0:716e1cbdac61 126 _gain = 3;
laskowsk 0:716e1cbdac61 127 break;
laskowsk 0:716e1cbdac61 128
laskowsk 0:716e1cbdac61 129 case 32: // channel B, gain factor 32
laskowsk 0:716e1cbdac61 130 _gain = 2;
laskowsk 0:716e1cbdac61 131 break;
laskowsk 0:716e1cbdac61 132 }
laskowsk 0:716e1cbdac61 133 DigitalOut sck(_pinSck);
laskowsk 0:716e1cbdac61 134 sck = 0;
laskowsk 0:716e1cbdac61 135 getValue();
laskowsk 0:716e1cbdac61 136 }
laskowsk 0:716e1cbdac61 137
laskowsk 0:716e1cbdac61 138 void HX711::powerDown()
laskowsk 0:716e1cbdac61 139 {
laskowsk 0:716e1cbdac61 140 DigitalOut sck(_pinSck);
laskowsk 0:716e1cbdac61 141 sck = 0;
laskowsk 0:716e1cbdac61 142 sck = 1;
laskowsk 0:716e1cbdac61 143 }
laskowsk 0:716e1cbdac61 144
laskowsk 0:716e1cbdac61 145 void HX711::powerUp()
laskowsk 0:716e1cbdac61 146 {
laskowsk 0:716e1cbdac61 147 DigitalOut sck(_pinSck);
laskowsk 0:716e1cbdac61 148 sck = 0;
laskowsk 0:716e1cbdac61 149 }
laskowsk 0:716e1cbdac61 150
laskowsk 0:716e1cbdac61 151 void HX711::tare(uint8_t times)
laskowsk 0:716e1cbdac61 152 {
laskowsk 0:716e1cbdac61 153 int sum = averageValue(times);
laskowsk 0:716e1cbdac61 154 setOffset(sum);
laskowsk 0:716e1cbdac61 155 }
padte 1:a2666eae3d06 156