-
Notifications
You must be signed in to change notification settings - Fork 126
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Data set configuration (data set, number of samples) has been moved from HX711_ADC.h to the new file config.h - Included "yield" in function tare() to avoid crash on ESP8266 if wiring is incorrect - Timeout added to the tare() function to avoid endless loop if wiring is incorrect - Added function getSingleConversionRaw() for testing and debugging purpose - Added function getReadIndex() for testing and debugging purpose - Added function getConversionTime() for testing and debugging purpose - Added function getSPS() for testing and debugging purpose - Added function getTareTimeoutFlag() for testing and debugging purpose - Added example sketch "HX711_ADC_Calibration" with option to save the calibration value to eeprom - Added example sketch "HX711_ADC_Testing" with some of the above mentioned functions for tare timeout, samplerate, conversion time, etc - In example sketches setup, option included to fetch calibration value from eeprom
- Loading branch information
Showing
11 changed files
with
447 additions
and
111 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,185 @@ | ||
//------------------------------------------------------------------------------------- | ||
// HX711_ADC.h | ||
// Arduino master library for HX711 24-Bit Analog-to-Digital Converter for Weigh Scales | ||
// Olav Kallhovd sept2017 | ||
// Tested with : HX711 asian module on channel A and YZC-133 3kg load cell | ||
// Tested with MCU : Arduino Nano, ESP8266 | ||
//------------------------------------------------------------------------------------- | ||
// This is an example sketch on how to use this library | ||
// Settling time (number of samples) and data filtering can be adjusted in the config.h file | ||
|
||
// This example shows how to calibrate the load cell and optionally save the calibration | ||
// value to EEPROM, and also how to change the value. | ||
// The value can later be fetched from EEPROM in your project sketch. | ||
|
||
#include <HX711_ADC.h> | ||
#include <EEPROM.h> | ||
|
||
//HX711 constructor (dout pin, sck pin): | ||
HX711_ADC LoadCell(4, 5); | ||
|
||
int eepromAdress = 0; | ||
|
||
long t; | ||
|
||
void calibrate() { | ||
Serial.println("***"); | ||
Serial.println("Start calibration:"); | ||
Serial.println("It is assumed that the mcu was started with no load applied to the load cell."); | ||
Serial.println("Now, place your known mass on the loadcell,"); | ||
Serial.println("then send the weight of this mass (i.e. 100.0) from serial monitor."); | ||
float m = 0; | ||
boolean f = 0; | ||
while (f == 0) { | ||
LoadCell.update(); | ||
if (Serial.available() > 0) { | ||
m = Serial.parseFloat(); | ||
if (m != 0) { | ||
Serial.print("Known mass is: "); | ||
Serial.println(m); | ||
f = 1; | ||
} | ||
else { | ||
Serial.println("Invalid value"); | ||
} | ||
} | ||
} | ||
float c = LoadCell.getData() / m; | ||
LoadCell.setCalFactor(c); | ||
Serial.print("Calculated calibration value is: "); | ||
Serial.print(c); | ||
Serial.println(", use this in your project sketch"); | ||
f = 0; | ||
Serial.print("Save this value to EEPROM adress "); | ||
Serial.print(eepromAdress); | ||
Serial.println("? y/n"); | ||
while (f == 0) { | ||
if (Serial.available() > 0) { | ||
char inByte = Serial.read(); | ||
if (inByte == 'y') { | ||
#if defined(ESP8266) | ||
EEPROM.begin(sizeof c); | ||
#endif | ||
EEPROM.put(eepromAdress, c); | ||
#if defined(ESP8266) | ||
EEPROM.commit(); | ||
//EEPROM.begin(sizeof c); | ||
#endif | ||
EEPROM.get(eepromAdress, c); | ||
Serial.print("Value "); | ||
Serial.print(c); | ||
Serial.print(" saved to EEPROM address: "); | ||
Serial.println(eepromAdress); | ||
f = 1; | ||
|
||
} | ||
else if (inByte == 'n') { | ||
Serial.println("Value not saved to EEPROM"); | ||
f = 1; | ||
} | ||
} | ||
} | ||
Serial.println("End calibration"); | ||
Serial.println("For manual edit, send 'c' from serial monitor"); | ||
Serial.println("***"); | ||
} | ||
|
||
void changeSavedCalFactor() { | ||
float c = LoadCell.getCalFactor(); | ||
boolean f = 0; | ||
Serial.println("***"); | ||
Serial.print("Current value is: "); | ||
Serial.println(c); | ||
Serial.println("Now, send the new value from serial monitor, i.e. 696.0"); | ||
while (f == 0) { | ||
if (Serial.available() > 0) { | ||
c = Serial.parseFloat(); | ||
if (c != 0) { | ||
Serial.print("New calibration value is: "); | ||
Serial.println(c); | ||
LoadCell.setCalFactor(c); | ||
f = 1; | ||
} | ||
else { | ||
Serial.println("Invalid value, exit"); | ||
return; | ||
} | ||
} | ||
} | ||
f = 0; | ||
Serial.print("Save this value to EEPROM adress "); | ||
Serial.print(eepromAdress); | ||
Serial.println("? y/n"); | ||
while (f == 0) { | ||
if (Serial.available() > 0) { | ||
char inByte = Serial.read(); | ||
if (inByte == 'y') { | ||
#if defined(ESP8266) | ||
EEPROM.begin(sizeof c); | ||
#endif | ||
EEPROM.put(eepromAdress, c); | ||
#if defined(ESP8266) | ||
EEPROM.commit(); | ||
//EEPROM.begin(sizeof c); | ||
#endif | ||
EEPROM.get(eepromAdress, c); | ||
Serial.print("Value "); | ||
Serial.print(c); | ||
Serial.print(" saved to EEPROM address: "); | ||
Serial.println(eepromAdress); | ||
f = 1; | ||
} | ||
else if (inByte == 'n') { | ||
Serial.println("Value not saved to EEPROM"); | ||
f = 1; | ||
} | ||
} | ||
} | ||
Serial.println("End change calibration value"); | ||
Serial.println("***"); | ||
} | ||
|
||
void setup() { | ||
Serial.begin(9600); delay(10); | ||
Serial.println(); | ||
Serial.println("Starting..."); | ||
LoadCell.begin(); | ||
long stabilisingtime = 2000; // tare preciscion can be improved by adding a few seconds of stabilising time | ||
LoadCell.start(stabilisingtime); | ||
if (LoadCell.getTareTimeoutFlag()) { | ||
Serial.println("Tare timeout, check MCU>HX711 wiring and pin designations"); | ||
} | ||
else { | ||
LoadCell.setCalFactor(1.0); // user set calibration value (float) | ||
Serial.println("Startup + tare is complete"); | ||
} | ||
while (!LoadCell.update()); | ||
calibrate(); | ||
} | ||
void loop() { | ||
//update() should be called at least as often as HX711 sample rate; >10Hz@10SPS, >80Hz@80SPS | ||
//longer delay in sketch will reduce effective sample rate (be carefull with delay() in the loop) | ||
LoadCell.update(); | ||
|
||
//get smoothed value from the data set | ||
if (millis() > t + 250) { | ||
float i = LoadCell.getData(); | ||
Serial.print("Load_cell output val: "); | ||
Serial.println(i); | ||
t = millis(); | ||
} | ||
|
||
//receive from serial terminal | ||
if (Serial.available() > 0) { | ||
float i; | ||
char inByte = Serial.read(); | ||
if (inByte == 't') LoadCell.tareNoDelay(); | ||
else if (inByte == 'c') changeSavedCalFactor(); | ||
} | ||
|
||
//check if last tare operation is complete | ||
if (LoadCell.getTareStatus() == true) { | ||
Serial.println("Tare complete"); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.