#define calibration_factor 0.42
#include <HX711.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define LOADCELL_DOUT_PIN 2
#define LOADCELL_SCK_PIN 3
HX711 scale;
// Item Details
String itemName = "Item"; //Item name
String itemPartNumber = "12345678"; //Item Part Number
int itemReorderPoint = 100; //Item Re-Order Point
int itemWeight = 20; //Indivisual Item Weight
int binWeight = 50; //Bin Weight
int weight = 0;
int getWeight(){
return scale.get_units(1);
}
int getQuantity(int w){
int x;
int y;
x = w - binWeight;
if(x < itemWeight){
return 0;
}
else{
y = x/itemWeight;
return y;
}
}
int getReorderQuantity(int quantity){
return itemReorderPoint - quantity;
}
void setup() {
Serial.begin(9600);
setupScale();
readEEPROM();
lcd.init();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HI");
}
void loop() {
weight = getWeight();
displayLcd();
writeEEPROM();
}
void writeEEPROM(){
writeStringToEEPROM(0, itemName);
writeStringToEEPROM(1, itemPartNumber);
writeStringToEEPROM(2, String(itemReorderPoint));
writeStringToEEPROM(3, String(itemWeight));
writeStringToEEPROM(4, String(binWeight));
}
void readEEPROM(){
itemName = readStringFromEEPROM(0);
itemPartNumber = readStringFromEEPROM(1);
itemReorderPoint = readStringFromEEPROM(2).toInt();
itemWeight = readStringFromEEPROM(3).toInt();
binWeight = readStringFromEEPROM(4).toInt();
}
void setupScale(){
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor);
// scale.tare(); //tare done
scale.power_down();
scale.power_up();
}
void displayLcd(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Item Name: ");
lcd.print(itemName);
weight = getWeight();
lcd.setCursor(0,1);
lcd.print("Item Quantity: ");
lcd.print(getQuantity(weight));
lcd.setCursor(0,2);
lcd.print("Part Number: ");
lcd.print(itemPartNumber);
lcd.setCursor(0,3);
lcd.print("ReOrder Quantity: ");
lcd.print(getReorderQuantity(getQuantity(weight)));
}
void writeStringToEEPROM(int addrOffset, const String &strToWrite)
{
byte len = strToWrite.length();
EEPROM.write(addrOffset, len);
for (int i = 0; i < len; i++)
{
EEPROM.write(addrOffset + 1 + i, strToWrite[i]);
}
}
String readStringFromEEPROM(int addrOffset)
{
int newStrLen = EEPROM.read(addrOffset);
char data[newStrLen + 1];
for (int i = 0; i < newStrLen; i++)
{
data[i] = EEPROM.read(addrOffset + 1 + i);
}
data[newStrLen] = '\ 0'; // !!! NOTE !!! Remove the space between the slash "/" and "0" (I've added a space because otherwise there is a display bug)
return String(data);
}