Libery for HX711 sensor. This is for measureing the weigth of the keg
Hx711.cpp@0:52c805a049c4, 2016-02-21 (annotated)
- Committer:
- gert_lauritsen
- Date:
- Sun Feb 21 11:01:00 2016 +0000
- Revision:
- 0:52c805a049c4
A lib for hx711 SG sensor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gert_lauritsen | 0:52c805a049c4 | 1 | #include "Hx711.h" |
gert_lauritsen | 0:52c805a049c4 | 2 | |
gert_lauritsen | 0:52c805a049c4 | 3 | HX711::HX711(PinName pin_dout, PinName pin_slk): _pin_dout(pin_dout), _pin_slk(pin_slk) |
gert_lauritsen | 0:52c805a049c4 | 4 | { |
gert_lauritsen | 0:52c805a049c4 | 5 | _pin_slk = 1; |
gert_lauritsen | 0:52c805a049c4 | 6 | wait_ms(100); |
gert_lauritsen | 0:52c805a049c4 | 7 | _pin_slk = 0; |
gert_lauritsen | 0:52c805a049c4 | 8 | |
gert_lauritsen | 0:52c805a049c4 | 9 | set_gain(128); |
gert_lauritsen | 0:52c805a049c4 | 10 | } |
gert_lauritsen | 0:52c805a049c4 | 11 | |
gert_lauritsen | 0:52c805a049c4 | 12 | HX711::~HX711() |
gert_lauritsen | 0:52c805a049c4 | 13 | { |
gert_lauritsen | 0:52c805a049c4 | 14 | |
gert_lauritsen | 0:52c805a049c4 | 15 | } |
gert_lauritsen | 0:52c805a049c4 | 16 | |
gert_lauritsen | 0:52c805a049c4 | 17 | |
gert_lauritsen | 0:52c805a049c4 | 18 | void HX711::set_gain(char gain) |
gert_lauritsen | 0:52c805a049c4 | 19 | { |
gert_lauritsen | 0:52c805a049c4 | 20 | switch (gain) { |
gert_lauritsen | 0:52c805a049c4 | 21 | case 128: // channel A, gain factor 128 |
gert_lauritsen | 0:52c805a049c4 | 22 | GAIN = 1; |
gert_lauritsen | 0:52c805a049c4 | 23 | break; |
gert_lauritsen | 0:52c805a049c4 | 24 | case 64: // channel A, gain factor 64 |
gert_lauritsen | 0:52c805a049c4 | 25 | GAIN = 3; |
gert_lauritsen | 0:52c805a049c4 | 26 | break; |
gert_lauritsen | 0:52c805a049c4 | 27 | case 32: // channel B, gain factor 32 |
gert_lauritsen | 0:52c805a049c4 | 28 | GAIN = 2; |
gert_lauritsen | 0:52c805a049c4 | 29 | break; |
gert_lauritsen | 0:52c805a049c4 | 30 | } |
gert_lauritsen | 0:52c805a049c4 | 31 | _pin_slk = 0; |
gert_lauritsen | 0:52c805a049c4 | 32 | read(); |
gert_lauritsen | 0:52c805a049c4 | 33 | } |
gert_lauritsen | 0:52c805a049c4 | 34 | |
gert_lauritsen | 0:52c805a049c4 | 35 | long HX711::read() |
gert_lauritsen | 0:52c805a049c4 | 36 | { |
gert_lauritsen | 0:52c805a049c4 | 37 | long value = 0; |
gert_lauritsen | 0:52c805a049c4 | 38 | |
gert_lauritsen | 0:52c805a049c4 | 39 | while (_pin_dout) |
gert_lauritsen | 0:52c805a049c4 | 40 | ; |
gert_lauritsen | 0:52c805a049c4 | 41 | |
gert_lauritsen | 0:52c805a049c4 | 42 | for (int i=0;i<24;i++) |
gert_lauritsen | 0:52c805a049c4 | 43 | { |
gert_lauritsen | 0:52c805a049c4 | 44 | _pin_slk = 1; |
gert_lauritsen | 0:52c805a049c4 | 45 | value=value<<1; |
gert_lauritsen | 0:52c805a049c4 | 46 | _pin_slk = 0; |
gert_lauritsen | 0:52c805a049c4 | 47 | if(_pin_dout) value++; |
gert_lauritsen | 0:52c805a049c4 | 48 | } |
gert_lauritsen | 0:52c805a049c4 | 49 | |
gert_lauritsen | 0:52c805a049c4 | 50 | _pin_slk = 1; |
gert_lauritsen | 0:52c805a049c4 | 51 | _pin_slk = 0; |
gert_lauritsen | 0:52c805a049c4 | 52 | |
gert_lauritsen | 0:52c805a049c4 | 53 | value=value^0x800000; |
gert_lauritsen | 0:52c805a049c4 | 54 | |
gert_lauritsen | 0:52c805a049c4 | 55 | return value; |
gert_lauritsen | 0:52c805a049c4 | 56 | } |
gert_lauritsen | 0:52c805a049c4 | 57 | |
gert_lauritsen | 0:52c805a049c4 | 58 | long HX711::read_average(char times) |
gert_lauritsen | 0:52c805a049c4 | 59 | { |
gert_lauritsen | 0:52c805a049c4 | 60 | long sum = 0; |
gert_lauritsen | 0:52c805a049c4 | 61 | for (char i = 0; i < times; i++) { |
gert_lauritsen | 0:52c805a049c4 | 62 | sum += read(); |
gert_lauritsen | 0:52c805a049c4 | 63 | } |
gert_lauritsen | 0:52c805a049c4 | 64 | return sum / times; |
gert_lauritsen | 0:52c805a049c4 | 65 | } |
gert_lauritsen | 0:52c805a049c4 | 66 | |
gert_lauritsen | 0:52c805a049c4 | 67 | double HX711::get_value(char times) |
gert_lauritsen | 0:52c805a049c4 | 68 | { |
gert_lauritsen | 0:52c805a049c4 | 69 | return read_average(times) - OFFSET; |
gert_lauritsen | 0:52c805a049c4 | 70 | } |
gert_lauritsen | 0:52c805a049c4 | 71 | |
gert_lauritsen | 0:52c805a049c4 | 72 | float HX711::get_units(char times) |
gert_lauritsen | 0:52c805a049c4 | 73 | { |
gert_lauritsen | 0:52c805a049c4 | 74 | return get_value(times) / SCALE; |
gert_lauritsen | 0:52c805a049c4 | 75 | } |
gert_lauritsen | 0:52c805a049c4 | 76 | |
gert_lauritsen | 0:52c805a049c4 | 77 | void HX711::tare(char times) |
gert_lauritsen | 0:52c805a049c4 | 78 | { |
gert_lauritsen | 0:52c805a049c4 | 79 | double sum = read_average(times); |
gert_lauritsen | 0:52c805a049c4 | 80 | set_offset(sum); |
gert_lauritsen | 0:52c805a049c4 | 81 | } |
gert_lauritsen | 0:52c805a049c4 | 82 | |
gert_lauritsen | 0:52c805a049c4 | 83 | void HX711::set_scale(float scale) |
gert_lauritsen | 0:52c805a049c4 | 84 | { |
gert_lauritsen | 0:52c805a049c4 | 85 | SCALE = scale; |
gert_lauritsen | 0:52c805a049c4 | 86 | } |
gert_lauritsen | 0:52c805a049c4 | 87 | |
gert_lauritsen | 0:52c805a049c4 | 88 | void HX711::set_offset(long offset) |
gert_lauritsen | 0:52c805a049c4 | 89 | { |
gert_lauritsen | 0:52c805a049c4 | 90 | OFFSET = offset; |
gert_lauritsen | 0:52c805a049c4 | 91 | } |
gert_lauritsen | 0:52c805a049c4 | 92 | |
gert_lauritsen | 0:52c805a049c4 | 93 | void HX711::power_down() |
gert_lauritsen | 0:52c805a049c4 | 94 | { |
gert_lauritsen | 0:52c805a049c4 | 95 | _pin_slk = 0; |
gert_lauritsen | 0:52c805a049c4 | 96 | _pin_slk = 1; |
gert_lauritsen | 0:52c805a049c4 | 97 | } |
gert_lauritsen | 0:52c805a049c4 | 98 | |
gert_lauritsen | 0:52c805a049c4 | 99 | void HX711::power_up() |
gert_lauritsen | 0:52c805a049c4 | 100 | { |
gert_lauritsen | 0:52c805a049c4 | 101 | _pin_slk = 0; |
gert_lauritsen | 0:52c805a049c4 | 102 | } |