 //LiquidCrystal lcd(13, 12, 8, 9, 10, 11); //PROD
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //DEBUG
 HX711 scales[WEIGHT_SENSORS] = {
-  HX711 (A1, A2)};
+  HX711 (A1, A2)}; //A1 = ANALOG1 = DT // A2=SCK
+int eepromAddress[WEIGHT_SENSORS] = {0};
 
 unsigned long last = 0;
 unsigned long lastPrint = 0;
-const String kilo = "kg";
-
+const String kilo = "kg   ";
+
+// KEY VARIABLES
+int lcd_key = btnNONE;
+int lcd_key_prev = btnNONE;
+unsigned long lcd_key_prev_pressed = 0;
+unsigned long millisPressedKey = 0;
+int buttonPressed = 0;
+unsigned long debounceTime = 0;
+
+// WEIGHT VARIABLES
+float lastValue = 0;
+unsigned int useFastWeight = 0;
+
+//GUI VARIABLES
+unsigned int printGUI = 0;
+unsigned int menuMarker = 0;
+unsigned int lastItem = 1;
 
 void setup() {
   Serial.begin(BAUD_RATE);
+ 
   lcd.begin(16, 2);
   lcd.print("Starting....");
   for (int i = 0; i < WEIGHT_SENSORS; i++) {
-    scales[i].set_scale(-228.f);
+    //scales[i].set_scale(-228.f);
+    scales[i].set_scale(228.f);
     scales[i].tare();
     delay(DELAY);
-    if (USE_EEPROM) {
-      scales[i].set_offset(DEFAULT_EMPTY_VALUE);//TODO: use eeprom. 
+    if (USE_EEPROM) { //Firstime use please use calibrate.
+      double value = EEPROM.readDouble(eepromAddress[i]);
+      scales[i].set_offset(value);//TODO: use eeprom. 
     } 
-    else {
-      scales[i].set_offset(DEFAULT_EMPTY_VALUE);
-    }
   }
   lcd.clear();
+}
+
+
+// read the buttons
+int read_LCD_buttons() {
+  int adc_key_in = 0;
+  adc_key_in = analogRead(BUTTON_PIN);
+  // my buttons when read are centered at these valies: 0, 97, 254, 437, 639
+  // 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 < 150)  return btnUP;
+  if (adc_key_in < 350)  return btnDOWN;
+  if (adc_key_in < 550)  return btnLEFT;
+  if (adc_key_in < 850)  return btnSELECT;
+  return btnNONE;  // when all others fail, return this...
+}
+
+
+int getButtonPressed() {
+  lcd_key = read_LCD_buttons();  // read the buttons
+  unsigned long now = millis();
+  if (lcd_key == btnNONE) {
+    return btnNONE;
+  } else if (millisPressedKey == 0 && lcd_key != btnNONE) {
+    millisPressedKey = now;
+    return btnNONE;
+  } else if (((millisPressedKey + 10) < now) && (debounceTime < now)) {
+    int lcd_key_confirm = read_LCD_buttons();
+    debounceTime = now + 300;
+    millisPressedKey = 0;
+    if (lcd_key == lcd_key_confirm) {
+      //Serial.println(lcd_key);
+      buttonPressed = 0;
+      return lcd_key;
+    } else {
+      millisPressedKey = now;
+      return btnNONE;
+    }
+  } else {
+    return btnNONE;
+  }
 }
 
 String getName(const int i) {

  delete weight;
}

void doWeigth(int value) {
  unsigned long now = millis();

  if ((last + DEFAULT_WEIGHT_TIME) < now) {
    for (int i = 0; i < WEIGHT_SENSORS; i++) {
      scales[i].power_up();
      lcd.setCursor(0, 1);

      String weightName = getName(i);
      float value = getValue(scales[i]);

      printToSerial(value, now, weightName);

      const int row = getRow(i);

}

float getValue(HX711 scale) {
  float value = scale.get_units(3) ;
  if (value > -10 && value < 10)  {
    value = 0;
  }
