#include <TM1637Display.h>
#define CLK2 11 // Define CLK pin for the second TM1637 display
#define DIO2 12 // Define DIO pin for the second TM1637 display
#define PRE_INFUSION_RELAY 7
#define BREW_RELAY2 A0
#define PUMP_RELAY 6
#define BREW_SWITCH2 10 // Define the second brew switch pin
#define SAVED_BREW_BUTTON2 A2
#define TEST_DELAY 6000
///////////////JC
const uint8_t SEG_DONE1[] = {
SEG_A,
0,
0,
0,
};
const uint8_t SEG_DONE2[] = {
0,
SEG_A,
0,
0,
};
const uint8_t SEG_DONE3[] = {
0,
0,
SEG_A,
0,
};
const uint8_t SEG_DONE4[] = {
0,
0,
0,
SEG_A,
};
const uint8_t SEG_DONE5[] = {
0,
0,
0,
SEG_B,
};
const uint8_t SEG_DONE6[] = {
0,
0,
0,
SEG_C,
};
const uint8_t SEG_DONE7[] = {
0,
0,
0,
SEG_D,
};
const uint8_t SEG_DONE8[] = {
0,
0,
SEG_D,
0,
};
const uint8_t SEG_DONE9[] = {
0,
SEG_D,
0,
0,
};
const uint8_t SEG_DONE10[] = {
SEG_D,
0,
0,
0,
};
const uint8_t SEG_DONE11[] = {
SEG_E,
0,
0,
0,
};
const uint8_t SEG_DONE12[] = {
SEG_F,
0,
0,
0,
};
const uint8_t SEG_DONE13[] = {
0,
0,
0,
SEG_A,
};
const uint8_t SEG_DONE14[] = {
0,
0,
0,
SEG_A | SEG_B,
};
const uint8_t SEG_DONE15[] = {
0,
0,
0,
SEG_A | SEG_B | SEG_C,
};
const uint8_t SEG_DONE16[] = {
0,
0,
0,
SEG_A | SEG_B | SEG_C | SEG_D,
};
const uint8_t SEG_DONE17[] = {
0,
0,
0,
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E,
};
const uint8_t SEG_DONE18[] = {
0,
0,
0,
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,
};
/////PRE_
const uint8_t SEG_DONE19[] = {
0,
0,
SEG_D,
SEG_A | SEG_B | SEG_C | SEG_D | SEG_F,
};
const uint8_t SEG_DONE20[] = {
0,
SEG_D,
SEG_D,
SEG_A | SEG_B | SEG_C | SEG_D,
};
const uint8_t SEG_DONE21[] = {
SEG_D | SEG_E,
SEG_D,
SEG_D,
SEG_B | SEG_C | SEG_D,
};
const uint8_t SEG_DONE22[] = {
SEG_D | SEG_E | SEG_F,
SEG_D,
SEG_D,
SEG_C | SEG_D,
};
const uint8_t SEG_DONE23[] = {
SEG_A | SEG_D | SEG_E | SEG_F,
SEG_D,
SEG_D,
SEG_D,
};
const uint8_t SEG_DONE24[] = {
SEG_A | SEG_B | SEG_D | SEG_E | SEG_F,
SEG_D,
SEG_D,
0,
};
const uint8_t SEG_DONE25[] = {
SEG_A | SEG_B | SEG_D | SEG_E | SEG_F | SEG_G,
SEG_D,
0,
0,
};
const uint8_t SEG_DONE26[] = {
SEG_A | SEG_B | SEG_D | SEG_E | SEG_F | SEG_G,
0,
0,
0,
};
const uint8_t SEG_DONE27[] = {
SEG_A | SEG_B | SEG_D | SEG_E | SEG_F | SEG_G,
0,
0,
0,
};
const uint8_t SEG_DONE28[] = {
SEG_A | SEG_F | SEG_B | SEG_G | SEG_E, // P
SEG_A | SEG_F | SEG_E, // r
0,
0, // -
};
const uint8_t SEG_DONE29[] = {
SEG_A | SEG_F | SEG_B | SEG_G | SEG_E, // P
SEG_A | SEG_F | SEG_E, // r
SEG_A | SEG_F | SEG_G | SEG_E | SEG_D, // E
0, // -
};
///////////////JC
const uint8_t SEG_DONE[] = {
SEG_A | SEG_F | SEG_B | SEG_G | SEG_E, // P
SEG_A | SEG_F | SEG_E, // r
SEG_A | SEG_F | SEG_G | SEG_E | SEG_D, // E
SEG_G, // -
};
TM1637Display display2(CLK2, DIO2);
int count2 = 0; // Initial count value for the first display
int savedCount2 = 0; //JC
boolean isCounting2 = false; // Flag to track if counting is in progress for the second display
bool brewActive2 = false;
bool savedBrew2Active = false;
bool firstSavedBrew2 = false; //CC
void setup() {
// Set relay pins as OUTPUT
pinMode(PRE_INFUSION_RELAY, OUTPUT);
pinMode(BREW_RELAY2, OUTPUT);
pinMode(PUMP_RELAY, OUTPUT);
pinMode(SAVED_BREW_BUTTON2, INPUT_PULLUP);
// Set switch pins as INPUT_PULLUP
pinMode(BREW_SWITCH2, INPUT_PULLUP);
display2.setBrightness(0x0F); // Set brightness to maximum for the second display
///////////////JC
{
display2.setSegments(SEG_DONE5);
delay(80);
display2.setSegments(SEG_DONE6);
delay(80);
display2.setSegments(SEG_DONE7);
delay(80);
display2.setSegments(SEG_DONE8);
delay(80);
display2.setSegments(SEG_DONE9);
delay(80);
display2.setSegments(SEG_DONE10);
delay(80);
display2.setSegments(SEG_DONE11);
delay(80);
display2.setSegments(SEG_DONE12);
delay(80);
display2.setSegments(SEG_DONE1);
delay(80);
display2.setSegments(SEG_DONE2);
delay(80);
display2.setSegments(SEG_DONE3);
delay(80);
display2.setSegments(SEG_DONE4);
delay(80);
display2.setSegments(SEG_DONE13);
delay(80);
display2.setSegments(SEG_DONE14);
delay(80);
display2.setSegments(SEG_DONE15);
delay(80);
display2.setSegments(SEG_DONE16);
delay(80);
display2.setSegments(SEG_DONE17);
delay(80);
display2.setSegments(SEG_DONE18);
delay(80);
//display2.clear();
}
////////////////JC
display2.showNumberDecEx(0, 0b01000000); // Display blank screen for the second display
Serial.begin(9600);
}
void loop() {
// Check the Brew Switch for the second display
if (digitalRead(BREW_SWITCH2) == LOW && !brewActive2) {
if (!isCounting2) {
isCounting2 = true;
count2 = 0;
}
//digitalWrite(PRE_INFUSION_RELAY, HIGH);
//display2.clear();
// display2.setSegments(SEG_DONE19);
// delay(80);
// display2.setSegments(SEG_DONE20);
//delay(80);
//display2.setSegments(SEG_DONE21);
//delay(80);
//display2.setSegments(SEG_DONE22);
//delay(80);
//display2.setSegments(SEG_DONE23);
//delay(80);
//display2.setSegments(SEG_DONE24);
//delay(80);
// display2.setSegments(SEG_DONE25);
// delay(80);
// display2.setSegments(SEG_DONE26);
// delay(80);
// display2.setSegments(SEG_DONE27);
// delay(80);
// display2.setSegments(SEG_DONE28);
// delay(80);
// display2.setSegments(SEG_DONE29);
// delay(80);
// display2.setSegments(SEG_DONE);
// delay(TEST_DELAY);
// digitalWrite(PRE_INFUSION_RELAY, LOW);
// delay(1000);
digitalWrite(BREW_RELAY2, HIGH);
digitalWrite(PUMP_RELAY, HIGH);
brewActive2 = true;
}
if (brewActive2) {
count2++;
savedCount2 = count2; //CC
firstSavedBrew2 = true; //CC
display2.showNumberDec(count2);
delay(1000);
if (digitalRead(BREW_SWITCH2) == HIGH) {
digitalWrite(BREW_RELAY2, LOW);
digitalWrite(PUMP_RELAY, LOW);
brewActive2 = false;
delay(3000);
display2.showNumberDec(0);
isCounting2 = false;
///////////////************
display2.setSegments(SEG_DONE5);
delay(80);
display2.setSegments(SEG_DONE6);
delay(80);
display2.setSegments(SEG_DONE7);
delay(80);
display2.setSegments(SEG_DONE8);
delay(80);
display2.setSegments(SEG_DONE9);
delay(80);
display2.setSegments(SEG_DONE10);
delay(80);
display2.setSegments(SEG_DONE11);
delay(80);
display2.setSegments(SEG_DONE12);
delay(80);
display2.setSegments(SEG_DONE1);
delay(80);
display2.setSegments(SEG_DONE2);
delay(80);
display2.setSegments(SEG_DONE3);
delay(80);
display2.setSegments(SEG_DONE4);
delay(80);
display2.setSegments(SEG_DONE13);
delay(80);
display2.setSegments(SEG_DONE14);
delay(80);
display2.setSegments(SEG_DONE15);
delay(80);
display2.setSegments(SEG_DONE16);
delay(80);
display2.setSegments(SEG_DONE17);
delay(80);
display2.setSegments(SEG_DONE18);
delay(80);
//display2.clear();
/////////////********
}
}
if (digitalRead(SAVED_BREW_BUTTON2) == LOW && !savedBrew2Active && firstSavedBrew2) { //CC
if (!isCounting2) {
isCounting2 = true;
count2 = savedCount2; //CC******??
}
// digitalWrite(PRE_INFUSION_RELAY, HIGH);
// display2.clear();
// display2.setSegments(SEG_DONE19);
// delay(80);
// display2.setSegments(SEG_DONE20);
// delay(80);
// display2.setSegments(SEG_DONE21);
// delay(80);
// display2.setSegments(SEG_DONE22);
// delay(80);
// display2.setSegments(SEG_DONE23);
// delay(80);
// display2.setSegments(SEG_DONE24);
// delay(80);
// display2.setSegments(SEG_DONE25);
// delay(80);
// display2.setSegments(SEG_DONE26);
// delay(80);
// display2.setSegments(SEG_DONE27);
// delay(80);
// display2.setSegments(SEG_DONE28);
// delay(80);
// display2.setSegments(SEG_DONE29);
// delay(80);
// display2.setSegments(SEG_DONE);
// delay(TEST_DELAY);
// digitalWrite(PRE_INFUSION_RELAY, LOW);
// delay(1000);
//count++;
//display.showNumberDec(count);
//delay(1000); // Count up every second
//delay(000);
digitalWrite(BREW_RELAY2, HIGH);
digitalWrite(PUMP_RELAY, HIGH);
savedBrew2Active = true;
}
if (savedBrew2Active) {
count2--;
display2.showNumberDec(count2 +1);
delay(1000); // Count down every second
if (count2 == 0 || count2 < 0) {
digitalWrite(BREW_RELAY2, LOW);
digitalWrite(PUMP_RELAY, LOW);
savedBrew2Active = false;
delay(500);
display2.showNumberDec(0);
isCounting2 = false;
display2.setSegments(SEG_DONE5);
delay(80);
display2.setSegments(SEG_DONE6);
delay(80);
display2.setSegments(SEG_DONE7);
delay(80);
display2.setSegments(SEG_DONE8);
delay(80);
display2.setSegments(SEG_DONE9);
delay(80);
display2.setSegments(SEG_DONE10);
delay(80);
display2.setSegments(SEG_DONE11);
delay(80);
display2.setSegments(SEG_DONE12);
delay(80);
display2.setSegments(SEG_DONE1);
delay(80);
display2.setSegments(SEG_DONE2);
delay(80);
display2.setSegments(SEG_DONE3);
delay(80);
display2.setSegments(SEG_DONE4);
delay(80);
//display1.setSegments(SEG_DONE5);
//delay(100);
display2.setSegments(SEG_DONE13);
delay(80);
display2.setSegments(SEG_DONE14);
delay(80);
display2.setSegments(SEG_DONE15);
delay(80);
display2.setSegments(SEG_DONE16);
delay(80);
display2.clear();
////////////////JC
display2.showNumberDecEx(0, 0b01000000);
}}}