Librairie HX711 fonctionnel sur Nucleo L152RE
Fork of HX711 by
Embed:
(wiki syntax)
Show/hide line numbers
HX711.cpp
00001 /* 00002 * FILE: HX711.cpp 00003 * 00004 * VERSION: 0.1 00005 * PURPOSE: HX711 weight library for Nucleo STM32 00006 * AUTHOR: Bertrand Bouvier 00007 * LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html) 00008 * 00009 * DATASHEET: http://www.dfrobot.com/image/data/SEN0160/hx711_english.pdf 00010 * URL: 00011 * 00012 * HISTORY: 00013 * 24/05/2015 - Bertrand Bouvier - Original version 00014 * see HX711.h 00015 * 00016 * SPECIAL THANKS: 00017 * Inspiré du travail de Weihong Guan (@aguegu) 00018 * https://github.com/aguegu/Arduino 00019 * http://aguegu.net 00020 * 00021 * Inspiré du travail de bodge 00022 * https://github.com/bogde/HX711 00023 * 00024 */ 00025 00026 #include "HX711.h" 00027 #include "mbed.h" 00028 00029 #define SCALE_VALUE 1892.f //multiple propre à chaque hardware 00030 00031 HX711::HX711(PinName pinData, PinName pinSck, uint8_t gain) 00032 { 00033 _pinData = pinData; 00034 _pinSck = pinSck; 00035 00036 this->setGain(gain); 00037 00038 DigitalOut sck(_pinSck); 00039 DigitalIn data(_pinData); 00040 00041 sck = 1; //Initialisation HX711 00042 wait_us(100); 00043 sck = 0; 00044 00045 this->setOffset(averageValue(10)); //TARE de la balance 00046 this->setScale(SCALE_VALUE); //Réglage du valeur du SCALE 00047 } 00048 00049 HX711::~HX711() 00050 { 00051 00052 } 00053 00054 int HX711::averageValue(uint8_t times) //Calcule une moyenne sur plusieurs mesures 00055 { 00056 int sum = 0; 00057 for (int i = 0; i < times; i++) 00058 { 00059 sum += getValue(); 00060 } 00061 00062 return sum / times; 00063 } 00064 00065 int HX711::getValue() //Obtenir la valeur brut du controller 00066 { 00067 int buffer; 00068 buffer = 0 ; 00069 00070 DigitalOut sck(_pinSck); 00071 DigitalIn data(_pinData); 00072 00073 while (data.read()==1) //wait is ready 00074 ; 00075 00076 for (uint8_t i = 24; i--;) //read 24 bit 1 per 1 and save to buffer 00077 { 00078 sck=1; 00079 00080 buffer = buffer << 1 ; 00081 00082 if (data.read()) 00083 { 00084 buffer ++; 00085 } 00086 00087 sck=0; 00088 } 00089 00090 for (int i = 0; i < _gain; i++) 00091 { 00092 sck=1; 00093 sck=0; 00094 } 00095 00096 buffer = buffer ^ 0x800000; 00097 00098 return buffer; 00099 } 00100 00101 void HX711::setOffset(int offset) 00102 { 00103 _offset = offset; 00104 } 00105 00106 void HX711::setScale(float scale) 00107 { 00108 _scale = scale; 00109 } 00110 00111 float HX711::getGram() 00112 { 00113 long val = (averageValue(2) - _offset); 00114 return (float) val / _scale; 00115 } 00116 00117 void HX711::setGain(uint8_t gain) 00118 { 00119 switch (gain) 00120 { 00121 case 128: // channel A, gain factor 128 00122 _gain = 1; 00123 break; 00124 00125 case 64: // channel A, gain factor 64 00126 _gain = 3; 00127 break; 00128 00129 case 32: // channel B, gain factor 32 00130 _gain = 2; 00131 break; 00132 } 00133 DigitalOut sck(_pinSck); 00134 sck = 0; 00135 getValue(); 00136 } 00137 00138 void HX711::powerDown() 00139 { 00140 DigitalOut sck(_pinSck); 00141 sck = 0; 00142 sck = 1; 00143 } 00144 00145 void HX711::powerUp() 00146 { 00147 DigitalOut sck(_pinSck); 00148 sck = 0; 00149 } 00150 00151 void HX711::tare(uint8_t times) 00152 { 00153 int sum = averageValue(times); 00154 setOffset(sum); 00155 }
Generated on Mon Jul 18 2022 00:32:10 by 1.7.2