Created
July 6, 2019 01:39
-
-
Save unixbigot/4907cad2c1aa437e49f4c11923189e11 to your computer and use it in GitHub Desktop.
basic LCD scale using load cell and hx711
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
//Sample using LiquidCrystal library | |
#include <LiquidCrystal.h> | |
/******************************************************* | |
This program will test the LCD panel and the buttons | |
Mark Bramwell, July 2010 | |
********************************************************/ | |
// select the pins used on the LCD panel | |
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | |
// define some values used by the panel and buttons | |
int lcd_key = 0; | |
int adc_key_in = 0; | |
#define btnRIGHT 0 | |
#define btnUP 1 | |
#define btnDOWN 2 | |
#define btnLEFT 3 | |
#define btnSELECT 4 | |
#define btnNONE 5 | |
#include <HX711_ADC.h> | |
#include <EEPROM.h> | |
//HX711 constructor (dout pin, sck pin): | |
HX711_ADC LoadCell(2, 3); | |
const int eepromAdress = 0; | |
long t; | |
// read the buttons | |
int read_LCD_buttons() | |
{ | |
adc_key_in = analogRead(0); // read the value from the sensor | |
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741 | |
// we add approx 50 to those values and check to see if we are close | |
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result | |
// For V1.1 us this threshold | |
if (adc_key_in < 50) return btnRIGHT; | |
if (adc_key_in < 250) return btnUP; | |
if (adc_key_in < 450) return btnDOWN; | |
if (adc_key_in < 650) return btnLEFT; | |
if (adc_key_in < 850) return btnSELECT; | |
// For V1.0 comment the other threshold and use the one below: | |
/* | |
if (adc_key_in < 50) return btnRIGHT; | |
if (adc_key_in < 195) return btnUP; | |
if (adc_key_in < 380) return btnDOWN; | |
if (adc_key_in < 555) return btnLEFT; | |
if (adc_key_in < 790) return btnSELECT; | |
*/ | |
return btnNONE; // when all others fail, return this... | |
} | |
void setup() | |
{ | |
float calValue; // calibration value | |
calValue = 696.0; // uncomment this if you want to set this value in the sketch | |
lcd.begin(16, 2); // start the library | |
lcd.setCursor(0,0); | |
// lcd.print("Push the buttons"); // print a simple message | |
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(calValue); // set calibration value (float) | |
Serial.println("Startup + tare is complete"); | |
} | |
} | |
void loop() | |
{ | |
//update() should be called at least as often as HX711 sample rate; >10Hz@10SPS, >80Hz@80SPS | |
//use of delay in sketch will reduce effective sample rate (be carefull with use of delay() in the loop) | |
LoadCell.update(); | |
//get smoothed value from data set | |
if (millis() > t + 250) { | |
float i = LoadCell.getData(); | |
Serial.print("Load_cell output val: "); | |
Serial.println(i); | |
t = millis(); | |
} | |
//lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over | |
//lcd.print(millis()/1000); // display seconds elapsed since power-up | |
lcd.setCursor(0,0); // move to the begining of the first line | |
if (millis() > t + 250) { | |
float i = LoadCell.getData(); | |
Serial.print("Load_cell output val: "); | |
Serial.println(i); | |
lcd.setCursor(0,0);lcd.print(" "); | |
lcd.setCursor(0,0); // move to the begining of the first line | |
lcd.print(i); | |
t = millis(); | |
} | |
lcd_key = read_LCD_buttons(); // read the buttons | |
lcd.setCursor(0,1); // move to the begining of the first line | |
switch (lcd_key) // depending on which button was pushed, we perform an action | |
{ | |
case btnRIGHT: | |
{ | |
lcd.print("RIGHT "); | |
break; | |
} | |
case btnLEFT: | |
{ | |
lcd.print("LEFT "); | |
break; | |
} | |
case btnUP: | |
{ | |
lcd.print("UP "); | |
break; | |
} | |
case btnDOWN: | |
{ | |
lcd.print("DOWN "); | |
break; | |
} | |
case btnSELECT: | |
{ | |
lcd.print("TARE"); | |
LoadCell.tareNoDelay(); | |
while (LoadCell.getTareStatus() != true) { | |
delay(250); | |
} | |
Serial.println("Tare complete"); | |
lcd.setCursor(0,1); // move to the begining of the first line | |
lcd.print(" "); | |
break; | |
} | |
case btnNONE: | |
{ | |
//lcd.print("NONE "); | |
break; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment