// -----------------------------------------------------------------
// --- push buttons:
const byte maxButton = 3; // number of buttons
const byte pinPushButton[maxButton] = {4, 62, 63}; // the Arduino pins
byte a[maxButton] = {};
int ACC = 1;
int ACCShort = 0;
int Flag1 = 1;
int Flag2 = 1;
int Flag3 = 1;
int Flag4 = 1;
int Flag5 = 1;
boolean Flag6 = 0;
int Flag7 = 0;
int Flag8 = 100;
int Flag9;
int Flag10;
int Flag11;
int Flag12;
////// Rotary Encoder Construct ////////////////////////
static int pinA = 3; // Our first hardware interrupt pin is digital pin 2
static int pinB = 2; // Our second hardware interrupt pin is digital pin 3
int Monitor = 0; //Monitor count of encoder steps
long Monitor1 = 0;
long WeightOpen = 0;
long w1digit = 0;
long w2digit = 0;
long w3digit = 0;
long w4digit = 0;
long w5digit = 0;
String preDefState = "";
String Grm = "gr";
//int PredefSpeedLow = 0;
//int PredefSpeedHi = 0;
volatile byte aFlag = 0;
volatile byte bFlag = 0;
volatile uint16_t encoderPos = 3;
volatile uint16_t oldEncPos = 0;
volatile byte reading = 0;
// ///// Scale Construct //////////////////////
#include "HX711.h"
// ///////////////// scale 1 ///////////
#define DOUT0 29 //Scale pins
#define CLK0 28 //Scale Pins
float CalFactor0 = 0.5;
HX711 scale0;
int val0;
#define DOUT1 31 //Scale pins
#define CLK1 30 //Scale Pins
float CalFactor1 = 0.5;
HX711 scale1;
int val1;
#define DOUT2 43 //Scale pins
#define CLK2 45 //Scale Pins
float CalFactor2 = 0.5;
HX711 scale2;
int val2;
#define DOUT3 47 //Scale pins
#define CLK3 46 //Scale Pins
float CalFactor3 = 0.5;
HX711 scale3;
int val3;
long Trim = 0;
long PreDefWeightA = 0;
long PreDefWeightB = 0;
long PreDefWeightC = 0;
long PreDefWeightD = 0;
long TopUpWeight = 0;
long TmpDefWeight = 0;
#define ROUNDFACTOR 5
///// LCD DISPLAY Setup ////////////////////////
//#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
// Setting the LCD shields pins /////////////////
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 9, 8, 11, 10);
///// Clear Screen /////////////////////////////
void clearLCDLine(int line)
{
lcd.setCursor(0, line);
for (int n = 0; n < 20; n++) // 20 indicates symbols in line. For 2x16 LCD write - 16
{
lcd.print(" ");
}
}
// ------------------------------------------------------------------------
// --- Setup
// --------------------------------------------------------------------------
void setup() {
// // Setup Scale1 construct
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
scale0.begin(DOUT0, CLK0);
scale0.set_scale(CalFactor0); //This value is obtained by using the SparkFun_HX711_Calibration sketch
scale0.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
scale1.begin(DOUT1, CLK1);
scale1.set_scale(CalFactor1); //This value is obtained by using the SparkFun_HX711_Calibration sketch
scale1.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
pinMode(A3, OUTPUT);
digitalWrite(A3, HIGH);
scale2.begin(DOUT2, CLK2);
scale2.set_scale(CalFactor2); //This value is obtained by using the SparkFun_HX711_Calibration sketch
scale2.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
pinMode(A2, OUTPUT);
digitalWrite(A2, HIGH);
scale3.begin(DOUT3, CLK3);
scale3.set_scale(CalFactor3); //This value is obtained by using the SparkFun_HX711_Calibration sketch
scale3.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
pinMode(A1, OUTPUT);
digitalWrite(A1, HIGH);
/// Encoder ////////////////////
pinMode(pinA, INPUT_PULLUP);
pinMode(pinB, INPUT_PULLUP);
attachInterrupt(0, PinA, RISING);
attachInterrupt(1, PinB, RISING);
/// LCD ///////////////////////
lcd.begin(20, 4);
//lcd.backlight();
lcd.clear();
Serial.begin(9600);
// --- initialize push button pins as inputs with pull-ups
for (byte i = 0; i < maxButton; i++) {
pinMode(pinPushButton[i], INPUT_PULLUP);
}
}
// --------------------------------------------------------------------------
// --- Main loop
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
void loop() {
while (ACC == 0) {
if (Flag5 == 1) {
lcd.setCursor(0, 0);
lcd.print("A ");
lcd.setCursor(0, 1);
lcd.print("B ");
lcd.setCursor(0, 2);
lcd.print("C ");
lcd.setCursor(0, 3);
lcd.print("D ");
lcd.setCursor(10, 0);
lcd.print(PreDefWeightA);
lcd.print(Grm);
lcd.setCursor(10, 1);
lcd.print(PreDefWeightB);
lcd.print(Grm);
lcd.setCursor(10, 2);
lcd.print(PreDefWeightC);
lcd.print(Grm);
lcd.setCursor(10, 3);
lcd.print(PreDefWeightD);
lcd.print(Grm);
Flag5 = 0;
}
//lcdMain();
checkBTN();
MainLoopScale();
//Monitor = 0;
encoderPos = 3;
}
//Debug();
checkBTN();
Enc_Read();
mainMenuDraw();
}
/////////////Debug
void Debug() {
lcd.setCursor(0, 3);
lcd.print (ACC);
lcd.print (Monitor);
lcd.print (ACCShort);
lcd.print (Monitor1);
//lcd.setCursor(15, 3);
//lcd.print ((PreDefWeightA * Flag8) /100);
}
///////////////Encoder_
void Enc_Read() {
//////Right Function encoder //////
if (encoderPos == 1 && ACC == 1) {
if (ACC == 1 && ACCShort == 0) { // LVL0 menu + //////
Monitor++;
if (Monitor > 5) {
Monitor = 5;
}
}
else { // LVL1 menu + ///////////////////////////////
Monitor1++;
if (Monitor1 > 10) {
Monitor1 = 10;
}
}
encoderPos = 3;
}
//////Left Function encoder /////////////////////////////
if (encoderPos == 0 && ACC == 1) {
if (ACC == 1 && ACCShort == 0) { //LVL0 menu - ////////
--Monitor;
if (Monitor < 0) {
Monitor = 0;
}
}
else { //LVL1 menu - //////////////////////////////////
--Monitor1;
if (Monitor1 < 0) {
Monitor1 = 0;
}
}
encoderPos = 3;
}
encoderPos = 3;
//lcd.setCursor(0, 3);
//lcd.print(ACC);
//lcd.print(Monitor);
//lcd.print(ACCShort);
//lcd.print(Monitor1);
}
//////////ENC Pins ISRs /////////////////////
void PinB() {
cli();
reading = PINE & 0x30;
if (reading == B00110000 && bFlag) {
encoderPos = 1;
bFlag = 0;
aFlag = 0;
}
else if (reading == B00100000) aFlag = 1;
sei(); //restart interrupts
}
void PinA() {
cli(); //
reading = PINE & 0x30;
if (reading == B00110000 && aFlag) {
encoderPos = 0;
bFlag = 0; //reset flags for the next turn
aFlag = 0; //reset flags for the next turn
}
else if (reading == B00010000) bFlag = 1;
sei(); //restart interrupts
}
///////////////////Entry Menu (Basiko Menou)
void Main_() {
if (ACC == 1 && Monitor == 0 && ACCShort == 0) { //1st Main Menu
lcd.setCursor(0, 0);
lcd.print(F(" Basiko Menou "));
clearLCDLine(1);
clearLCDLine(2);
clearLCDLine(3);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
pinMode(A4, INPUT);
pinMode(A5, INPUT);
pinMode(A6, INPUT);
pinMode(A7, INPUT);
Flag5 = 1; // For the Static display on the main menu (arxiko menou LCD print static ellements)
}
}
////////////////////////////////Menu0_
// Main draw menu ************************************
void mainMenuDraw() {
Main_();
lvl1();
lvl2();
///TARE and Sub menu ////////////////////////////////////////
if (ACC == 1 && Monitor == 1 && ACCShort == 0) { //1st Main Menu
lcd.setCursor(0, 1);
lcd.print(F(" Apovaro "));
}
///Predef Weights And Sub menu /////////////////////////////////
if (ACC == 1 && Monitor == 2 && ACCShort == 0) { //2nd Main Menu
//clearLCDLine(0);
lcd.setCursor(0, 1);
lcd.print(F(" Etoima Progamata "));
}
/////Manual Entry Weight/////////////////////////////////////////
if (ACC == 1 && Monitor == 3 && ACCShort == 0 ) { //3nd Main Menu
//clearLCDLine(0);
lcd.setCursor(0, 1);
lcd.print(F(" Anoixto Programa "));
}
if (ACC == 1 && Monitor == 4 && ACCShort == 0) { //4nd Main Menu
//clearLCDLine(0);
lcd.setCursor(0, 1);
lcd.print(F(" Trim Barous "));
}
if (ACC == 1 && Monitor == 5 && ACCShort == 0) { //4nd Main Menu
//clearLCDLine(0);
lcd.setCursor(0, 1);
lcd.print(F(" Epitaxinsi "));
}
if (ACC == 1 && Monitor == 1 && ACCShort == 1) { //Tare Submenu
lcd.setCursor(0, 1);
lcd.print(F(" Pata gia Apovaro "));
}
if (ACC >= 2) {
ACC = 0;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
lcd.clear();
}
////////////////////////////debug menu//////////////
}
///////////////////// //////////Menu1_
void lvl1() {
//////// Tare per Scale ////////////////////////////////////
if (ACC == 1 && Monitor == 1 && ACCShort == 1 && Monitor1 == 0) {
lcd.setCursor(0, 2);
lcd.print(F(" Zyg A "));
}
if (ACC == 1 && Monitor == 1 && ACCShort == 1 && Monitor1 == 1) {
lcd.setCursor(0, 2);
lcd.print(F(" Zyg B "));
}
if (ACC == 1 && Monitor == 1 && ACCShort == 1 && Monitor1 == 2) {
lcd.setCursor(0, 2);
lcd.print(F(" Zyg C "));
}
if (ACC == 1 && Monitor == 1 && ACCShort == 1 && Monitor1 == 3) {
lcd.setCursor(0, 2);
lcd.print(F(" Zyg D "));
}
if (ACC == 1 && Monitor == 1 && ACCShort == 1 && Monitor1 == 4) {
lcd.setCursor(0, 2);
lcd.print(F(" Oles mazi "));
}
if (ACC == 1 && Monitor == 1 && ACCShort == 1 && Monitor1 == 5) {
lcd.setCursor(0, 2);
lcd.print(F(" Exit "));
}
if (ACC == 1 && Monitor == 1 && ACCShort == 1 && Monitor1 > 5) {
Monitor1 = 5; ////////Limit for the Rotary
}
// PREDEF ////////////////////////////////////////////////////
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 0) {
lcd.setCursor(6, 2);
lcd.print(F(" 100ml "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 1) {
lcd.setCursor(6, 2);
lcd.print(F(" 250ml "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 2) {
lcd.setCursor(6, 2);
lcd.print(F(" 500ml "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 3) {
lcd.setCursor(6, 2);
lcd.print(F(" 750ml "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 4) {
lcd.setCursor(6, 2);
lcd.print(F(" 1 Lt "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 5) {
lcd.setCursor(6, 2);
lcd.print(F(" 3 Lt "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 6) {
lcd.setCursor(6, 2);
lcd.print(F(" 4 Lt "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 7) {
lcd.setCursor(6, 2);
lcd.print(F(" 5 Lt "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 8) {
lcd.setCursor(6, 2);
lcd.print(F(" 17 Lt "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 9) {
lcd.setCursor(6, 2);
lcd.print(F(" 17 Kg "));
}
if (ACC == 1 && Monitor == 2 && ACCShort == 1 && Monitor1 == 10) {
lcd.setCursor(6, 2);
lcd.print(F(" Exit"));
}
/////////////// OPEN /////////////////////////////////
if (ACC == 1 && Monitor == 3 && ACCShort >= 1 && Monitor1 >= 10) {
Monitor1 = 9;
}
if (ACC == 1 && Monitor == 3 && ACCShort == 1 && Monitor1 == 0) {
lcd.setCursor(7, 2);
lcd.print(w1digit);
lcd.print(w2digit);
lcd.print(w3digit);
lcd.print(w4digit);
lcd.print(w5digit);
lcd.setCursor(1, 3);
lcd.print("Press to sel Digit");
}
if (ACC == 1 && Monitor == 3 && ACCShort == 2 && Monitor1 >= 0) {
lcd.setCursor(7, 2);
w1digit = Monitor1;
lcd.print(w1digit);
lcd.setCursor(0, 3);
lcd.print(" * ");
}
if (ACC == 1 && Monitor == 3 && ACCShort == 3 && Monitor1 >= 0) {
lcd.setCursor(8, 2);
w2digit = Monitor1;
lcd.print(w2digit);
lcd.setCursor(0, 3);
lcd.print(" * ");
}
if (ACC == 1 && Monitor == 3 && ACCShort == 4 && Monitor1 >= 0) {
lcd.setCursor(9, 2);
w3digit = Monitor1;
lcd.print(w3digit);
lcd.setCursor(0, 3);
lcd.print(" * ");
}
if (ACC == 1 && Monitor == 3 && ACCShort == 5 && Monitor1 >= 0) {
lcd.setCursor(10, 2);
w4digit = Monitor1;
lcd.print(w4digit);
lcd.setCursor(0, 3);
lcd.print(" * ");
}
if (ACC == 1 && Monitor == 3 && ACCShort == 6 && Monitor1 >= 0) {
lcd.setCursor(11, 2);
w5digit = Monitor1;
lcd.print(w5digit);
lcd.setCursor(0, 3);
lcd.print(" * ");
}
if (ACC == 1 && Monitor == 3 && ACCShort == 7 && Monitor1 == 0) {
lcd.setCursor(0, 3);
lcd.print(" Ok ");
}
if (ACC == 1 && Monitor == 3 && ACCShort == 8 && Monitor1 == 0) { // When Ok
WeightOpen = w1digit * 10000 + w2digit * 1000 + w3digit * 100 + w4digit * 10 + w5digit;
PreDefWeightA = WeightOpen;
PreDefWeightB = WeightOpen;
PreDefWeightC = WeightOpen;
PreDefWeightD = WeightOpen;
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
if (ACC == 1 && Monitor == 3 && ACCShort == 7 && Monitor1 >= 1) {
lcd.setCursor(0, 3);
lcd.print(" Exit ");
Monitor1 = 1;
}
if (ACC == 1 && Monitor == 3 && ACCShort == 8 && Monitor1 == 1) { //When Exit
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
//////////////////////// Scale Trim //////////////////////////
/////////////// Define the LCD print for the Scale Trim
if (ACC == 1 && Monitor == 4 && ACCShort == 1 && Monitor1 == 0) {
lcd.setCursor(0, 2);
lcd.print(F("Zygaria A"));
lcd.setCursor(5, 3);
lcd.print(PreDefWeightA + Grm);
Flag7 = 1;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 1 && Monitor1 == 1) {
lcd.setCursor(0, 2);
lcd.print(F("Zygaria B"));
lcd.setCursor(5, 3);
lcd.print(PreDefWeightB + Grm);
Flag7 = 2;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 1 && Monitor1 == 2) {
lcd.setCursor(0, 2);
lcd.print(F("Zygaria C"));
lcd.setCursor(5, 3);
lcd.print(PreDefWeightC + Grm);
Flag7 = 3;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 1 && Monitor1 == 3) {
lcd.setCursor(0, 2);
lcd.print(F("Zygaria D"));
lcd.setCursor(5, 3);
lcd.print(PreDefWeightD + Grm);
Flag7 = 4;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 1 && Monitor1 == 4) {
lcd.setCursor(0, 2);
lcd.print(F(" Exit "));
Flag7 = 0;
}
/////////////////////////// Percentage Adjuster //////////////
if (ACC == 1 && Monitor == 5 && ACCShort == 1) {
Flag8 = (Monitor1 * 10);
lcd.setCursor(0, 2);
lcd.print(F(" % Pososto Varous "));
lcd.setCursor(8, 3);
lcd.print(Flag8);
if (Flag8 < 9) {
lcd.setCursor(9, 3);
lcd.print(" ");
}
if (Flag8 < 99) {
lcd.setCursor(10, 3);
lcd.print(" ");
}
}
if (ACC == 1 && Monitor == 5 && ACCShort == 2) {
lcd.setCursor(0, 3);
lcd.print(F("Ok"));
delay(1000);
//lcd.setCursor(0, 3);
//lcd.print(F(" "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
//if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 == 4) {
//ACC = 1;
//ACCShort = 0;
//Monitor = 0;
//Monitor1 = 0;
//Main_();
//}
if (ACC == 1 && Monitor == 4 && ACCShort == 1 && Monitor1 > 3) {
Monitor1 = 3; ////////Limit for the Rotary
}
//////////////////Define Scale trim + or - and adjuster weight /////////////
switch (Flag7) {
case 1:
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 == 0) {
lcd.setCursor(10, 2);
lcd.print(F("+"));
Flag6 = 0;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 >= 1) {
lcd.setCursor(10, 2);
lcd.print(F("-"));
Flag6 = 1;
if (Monitor1 >= 1) { //Limit Monitor1 for always be on + or -
Monitor1 = 1;
}
}
if (ACC == 1 && Monitor == 4 && ACCShort == 3 && Monitor1 >= 0) {
lcd.setCursor(12, 2);
Trim = Monitor1 * 5;
lcd.print(Trim);
}
if (ACC == 1 && Monitor == 4 && ACCShort == 4 && Monitor1 >= 0) {
if (Flag6 == 0) {
(PreDefWeightA = PreDefWeightA + Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightA + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
else {
(PreDefWeightA = PreDefWeightA - Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightA + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
}
break;
case 2:
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 == 0) {
lcd.setCursor(10, 2);
lcd.print(F("+"));
Flag6 = 0;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 >= 1) {
lcd.setCursor(10, 2);
lcd.print(F("-"));
Flag6 = 1;
if (Monitor1 >= 1) { //Limit Monitor1 for always be on + or -
Monitor1 = 1;
}
}
if (ACC == 1 && Monitor == 4 && ACCShort == 3 && Monitor1 >= 0) {
lcd.setCursor(12, 2);
Trim = Monitor1 * 5;
lcd.print(Trim);
}
if (ACC == 1 && Monitor == 4 && ACCShort == 4 && Monitor1 >= 0) {
if (Flag6 == 0) {
(PreDefWeightB = PreDefWeightB + Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightB + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
else {
(PreDefWeightB = PreDefWeightB - Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightB + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
}
break;
case 3:
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 == 0) {
lcd.setCursor(10, 2);
lcd.print(F("+"));
Flag6 = 0;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 >= 1) {
lcd.setCursor(10, 2);
lcd.print(F("-"));
Flag6 = 1;
if (Monitor1 >= 1) { //Limit Monitor1 for always be on + or -
Monitor1 = 1;
}
}
if (ACC == 1 && Monitor == 4 && ACCShort == 3 && Monitor1 >= 0) {
lcd.setCursor(12, 2);
Trim = Monitor1 * 5;
lcd.print(Trim);
}
if (ACC == 1 && Monitor == 4 && ACCShort == 4 && Monitor1 >= 0) {
if (Flag6 == 0) {
(PreDefWeightC = PreDefWeightC + Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightC + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
else {
(PreDefWeightC = PreDefWeightC - Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightC + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
}
break;
case 4:
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 == 0) {
lcd.setCursor(10, 2);
lcd.print(F("+"));
Flag6 = 0;
}
if (ACC == 1 && Monitor == 4 && ACCShort == 2 && Monitor1 >= 1) {
lcd.setCursor(10, 2);
lcd.print(F("-"));
Flag6 = 1;
if (Monitor1 >= 1) { //Limit Monitor1 for always be on + or -
Monitor1 = 1;
}
}
if (ACC == 1 && Monitor == 4 && ACCShort == 3 && Monitor1 >= 0) {
lcd.setCursor(12, 2);
Trim = Monitor1 * 5;
lcd.print(Trim);
}
if (ACC == 1 && Monitor == 4 && ACCShort == 4 && Monitor1 >= 0) {
if (Flag6 == 0) {
(PreDefWeightD = PreDefWeightD + Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightD + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
else {
(PreDefWeightD = PreDefWeightD - Trim);
lcd.setCursor(5, 3);
lcd.print(PreDefWeightD + Grm);
delay(1000);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
}
break;
}
}
////////////////////////////////Menu2_
void lvl2() {
///// Tare per scale //////////
if (ACC == 1 && Monitor == 1 && ACCShort == 2 && Monitor1 == 0) {
scale0.tare();
lcd.setCursor(0, 2);
lcd.print(F("Apovaro Egine Zyg A"));
ACC = 1;
ACCShort = 1;
Monitor = 1;
Monitor1 = 1;
//digitalWrite(A0, LOW);
delay(500);
Main_();
}
if (ACC == 1 && Monitor == 1 && ACCShort == 2 && Monitor1 == 1) {
scale1.tare();
lcd.setCursor(0, 2);
lcd.print(F("Apovaro Egine Zyg B"));
ACC = 1;
ACCShort = 1;
Monitor = 1;
Monitor1 = 2;
//digitalWrite(A3, LOW);
delay(500);
Main_();
}
if (ACC == 1 && Monitor == 1 && ACCShort == 2 && Monitor1 == 2) {
scale2.tare();
lcd.setCursor(0, 2);
lcd.print(F("Apovaro Egine Zyg C"));
ACC = 1;
ACCShort = 1;
Monitor = 1;
Monitor1 = 3;
//digitalWrite(A2, LOW);
delay(500);
Main_();
}
if (ACC == 1 && Monitor == 1 && ACCShort == 2 && Monitor1 == 3) {
scale3.tare();
lcd.setCursor(0, 2);
lcd.print(F("Apovaro Egine Zyg D"));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
//digitalWrite(A1, LOW);
delay(500);
Main_();
}
if (ACC == 1 && Monitor == 1 && ACCShort == 2 && Monitor1 == 4) {
lcd.setCursor(0, 2);
lcd.print(F("Etoimazetai...."));
scale0.tare();
delay(500);
scale1.tare();
delay(500);
scale2.tare();
delay(500);
scale3.tare();
lcd.setCursor(0, 2);
lcd.print(F("Apovaro se oles Ok"));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
//digitalWrite(A1, LOW);
delay(500);
Main_();
}
if (ACC == 1 && Monitor == 1 && ACCShort == 2 && Monitor1 == 5) { //Exit Tare Menu
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
Main_();
}
///////////////////Define Predef State for the Main LCD Screen
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 0) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("100 ML");
//TopUpWeight = 10;
PreDefWeightA = 92;
PreDefWeightB = 92;
PreDefWeightC = 92;
PreDefWeightD = 92;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 1) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("250 ML");
//TopUpWeight = 150;
PreDefWeightA = 215;
PreDefWeightB = 215;
PreDefWeightC = 215;
PreDefWeightD = 215;
//PredefSpeedLow = 15;
//PredefSpeedHi = 40;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 2) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("500 ML");
//TopUpWeight = 250;
PreDefWeightA = 440;
PreDefWeightB = 440;
PreDefWeightC = 440;
PreDefWeightD = 440;
//PredefSpeedLow = 35;
//PredefSpeedHi = 50;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 3) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("750 ML");
//TopUpWeight = 10;
PreDefWeightA = 655;
PreDefWeightB = 655;
PreDefWeightC = 655;
PreDefWeightD = 655;
//PredefSpeedLow = 35;
//PredefSpeedHi = 80;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 4) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("1 Lt");
//TopUpWeight = 710;
PreDefWeightA = 885;
PreDefWeightB = 885;
PreDefWeightC = 885;
PreDefWeightD = 885;
//PredefSpeedLow = 35;
//PredefSpeedHi = 80;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 5) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("3 Lt");
//TopUpWeight = 2400;
PreDefWeightA = 2730;
PreDefWeightB = 2730;
PreDefWeightC = 2730;
PreDefWeightD = 2730;
//PredefSpeedLow = 35;
//PredefSpeedHi = 110;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 6) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("4 Lt");
//TopUpWeight = 3200;
PreDefWeightA = 3680;
PreDefWeightB = 3680;
PreDefWeightC = 3680;
PreDefWeightD = 3680;
//PredefSpeedLow = 35;
//PredefSpeedHi = 110;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 7) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("5 Lt");
//TopUpWeight = 4230;
PreDefWeightA = 4570; //4600
PreDefWeightB = 4570;
PreDefWeightC = 4570;
PreDefWeightD = 4570;
//PredefSpeedLow = 35;
//PredefSpeedHi = 110;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 8) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("17,5 Lt");
//TopUpWeight = 15730;
PreDefWeightA = 16070; //16100
PreDefWeightB = 16070;
PreDefWeightC = 16070;
PreDefWeightD = 16070;
//PredefSpeedLow = 35;
//PredefSpeedHi = 110;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 9) {
lcd.setCursor(6, 2);
lcd.print(F("OK "));
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
preDefState = ("17 Kg");
//TopUpWeight = 16630;
PreDefWeightA = 16970;
PreDefWeightB = 16970;
PreDefWeightC = 16970;
PreDefWeightD = 16970;
//PredefSpeedLow = 35;
//PredefSpeedHi = 110;
delay(1500);
Main_();
}
if (ACC == 1 && Monitor == 2 && ACCShort == 2 && Monitor1 == 10) {
lcd.setCursor(6, 2);
ACC = 1;
ACCShort = 0;
Monitor = 0;
Monitor1 = 0;
//delay(500);
Main_();
}
}
//////////////////ScaleMain_
void MainLoopScale() {
Monitor = 0;
// // *************Scale 1 *************************************************
// rounding factor 5
int val0 = scale0.get_units();
int rem0;
rem0 = val0 % ROUNDFACTOR ;
if (rem0 < 3)
val0 -= rem0;
else
val0 += ROUNDFACTOR - rem0;
///////// Scale0 print to LCD
lcd.setCursor(2, 0);
lcd.print(val0);
lcd.print("g");
if (val0 < 9) {
lcd.setCursor(4, 0);
lcd.print(" ");
}
if (val0 < 99) {
lcd.setCursor(5, 0);
lcd.print(" ");
}
if (val0 < 999) {
lcd.setCursor(6, 0);
lcd.print(" ");
}
if (val0 < 9999) {
lcd.setCursor(7, 0);
lcd.print(" ");
}
if (val0 < 99999) {
lcd.setCursor(8, 0);
lcd.print(" ");
}
if (val0 >= PreDefWeightA) { /// CLOSED OUTPUT
digitalWrite(A0, HIGH);
Flag1 = 1;
}
else { /// OPEN OUTPUT
digitalWrite(A0, Flag1);
Flag9 = (PreDefWeightA * Flag8) /100;
if (val0 >= Flag9) {
pinMode(A4, INPUT);
analogRead(A4);
}
else {
pinMode(A4, OUTPUT);
digitalWrite(A4 , HIGH);
}
}
// ****************Scale 2 **********************************************
// // rounding factor 5
int val1 = scale1.get_units();
int rem1;
rem1 = val1 % ROUNDFACTOR ;
if (rem1 < 3)
val1 -= rem1;
else
val1 += ROUNDFACTOR - rem1;
///////// Scale0 print to LCD
lcd.setCursor(2, 1);
lcd.print(val1);
lcd.print("g");
if (val1 < 9) {
lcd.setCursor(4, 1);
lcd.print(" ");
}
if (val1 < 99) {
lcd.setCursor(5, 1);
lcd.print(" ");
}
if (val1 < 999) {
lcd.setCursor(6, 1);
lcd.print(" ");
}
if (val1 < 9999) {
lcd.setCursor(7, 1);
lcd.print(" ");
}
if (val1 < 99999) {
lcd.setCursor(8, 1);
lcd.print(" ");
}
if (val1 >= PreDefWeightB) {
digitalWrite(A3, HIGH);
Flag2 = 1;
}
else {
digitalWrite(A3, Flag2);
Flag10 = (PreDefWeightB * Flag8) /100;
if (val1 >= Flag10) {
pinMode(A5, INPUT);
analogRead(A5);
}
else {
pinMode(A5, OUTPUT);
digitalWrite(A5 , HIGH);
}
}
// // ****************Scale 3 **********************************************
// rounding factor 5
int val2 = scale2.get_units();
int rem2;
rem2 = val2 % ROUNDFACTOR ;
if (rem2 < 3)
val2 -= rem2;
else
val2 += ROUNDFACTOR - rem2;
/////////// Scale1 print to LCD
lcd.setCursor(2, 2);
lcd.print(val2);
//lcd.print(scale.get_units(),0);
lcd.print("g");
if (val2 < 9) {
lcd.setCursor(4, 2);
lcd.print(" ");
}
if (val2 < 99) {
lcd.setCursor(5, 2);
lcd.print(" ");
}
if (val2 < 999) {
lcd.setCursor(6, 2);
lcd.print(" ");
}
if (val2 < 9999) {
lcd.setCursor(7, 2);
lcd.print(" ");
}
if (val2 < 99999) {
lcd.setCursor(8, 2);
lcd.print(" ");
}
if (val2 >= PreDefWeightC) {
digitalWrite(A2, HIGH);
Flag3 = 1;
}
else {
digitalWrite(A2, Flag3);
Flag11 = (PreDefWeightC * Flag8) /100;
if (val2 >= Flag11) {
pinMode(A6, INPUT);
analogRead(A6);
}
else {
pinMode(A6, OUTPUT);
digitalWrite(A6 , HIGH);
}
}
// // // ****************Scale 4 **********************************************
// rounding factor 5
int val3 = scale3.get_units();
int rem3;
rem3 = val3 % ROUNDFACTOR ;
if (rem3 < 3)
val3 -= rem3;
else
val3 += ROUNDFACTOR - rem3;
//////// Scale1 print to LCD
lcd.setCursor(2, 3);
lcd.print(val3);
lcd.print("g");
if (val3 < 9) {
lcd.setCursor(4, 3);
lcd.print(" ");
}
if (val3 < 99) {
lcd.setCursor(5, 3);
lcd.print(" ");
}
if (val3 < 999) {
lcd.setCursor(6, 3);
lcd.print(" ");
}
if (val3 < 9999) {
lcd.setCursor(7, 3);
lcd.print(" ");
}
if (val3 < 99999) {
lcd.setCursor(8, 3);
lcd.print(" ");
}
if (val3 >= PreDefWeightD) {
digitalWrite(A1, HIGH);
Flag4 = 1;
}
else {
digitalWrite(A1, Flag4);
Flag12 = (PreDefWeightD * Flag8) /100;
if (val3 >= Flag12) {
pinMode(A7, INPUT);
analogRead(A7);
}
else {
pinMode(A7, OUTPUT);
digitalWrite(A7 , HIGH);
}
}
}
//////////////////////////Short_Long_
void checkBTN() {
static unsigned long previousTime = 0;
const byte timeInterval = 20; // pick a short time interval, you don't have to
// check the button with 10kHz
//byte a[maxButton] = {}; // array to store the latest readings
// - check all buttons
if ((millis() - previousTime) > timeInterval) {
previousTime = millis();
for (byte i = 0; i < maxButton; i++) {
a[i] = checkButtons(i);
}
if (a[1] == 1) { //Short Push
Flag1 = 0;
Flag2 = 0;
}
if (a[1] == 2) { //Long Push
Flag1 = 1;
Flag2 = 1;
}
if (a[2] == 1) { //Short Push
Flag3 = 0;
Flag4 = 0;
}
if (a[2] == 2) { //Long Push
Flag3 = 1;
Flag4 = 1;
}
if (ACC == 1 && Monitor > 0 ) {
if (a[0] == 1 && ACC >= 1) //Short Push
ACCShort ++;
}
if (ACC < 0) ACC = 0 ;
if (a[0] == 2) ACC++; //long-pushed
//Monitor = 0;
}
}
//////////////// Variables for the button functions //////////////////////////
byte checkButtons(byte buttonNo) {
const unsigned long timeDebounce = 50; // time to debounce
const unsigned long timeLong = 400; // minimum time for Long press
const unsigned long timeBreak = 100; // time interval after button release,
// before ready for next press
static byte state[maxButton] = {}; // this initializes all elements to zero
static unsigned long previousTime[maxButton] = {}; // this initializes all elements to zero
byte r = 0;
r = 0; // 0:not 1:short 2:long
if (state[buttonNo] == 0) { // --- no button has been pressed - check if
if (digitalRead(pinPushButton[buttonNo]) == LOW) {
previousTime[buttonNo] = millis();
state[buttonNo] = 1;
}
} else if (state[buttonNo] == 1) { // --- button was pressed - check for how long
if ( (millis() - previousTime[buttonNo]) > timeDebounce) {
if ( (millis() - previousTime[buttonNo]) < timeLong) {
if ( digitalRead(pinPushButton[buttonNo]) == HIGH) { // released -> short press
previousTime[buttonNo] = millis();
state[buttonNo] = 3;
r = 1;
}
} else { // it was a long press
state[buttonNo] = 2;
r = 2;
}
}
} else if (state[buttonNo] == 2) { // --- wait for long button press to end
if (digitalRead(pinPushButton[buttonNo]) == HIGH) {
previousTime[buttonNo] = millis();
state[buttonNo] = 3;
}
} else if (state[buttonNo] == 3) { // --- wait a little while after previous button press
if ( (millis() - previousTime[buttonNo]) > timeBreak) {
state[buttonNo] = 0;
}
}
return r;
}