From f738304e3a92a2ee05c1991cf0f927bd59c7f8b8 Mon Sep 17 00:00:00 2001 From: David Gray Date: Mon, 4 May 2020 09:52:17 +1000 Subject: [PATCH 1/2] Add support for 1, 2 or 3 filler tubes --- Config.h | 1 + OpenBeerFiller.ino | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Config.h b/Config.h index d680bbc..a7ace96 100644 --- a/Config.h +++ b/Config.h @@ -30,6 +30,7 @@ #define CO2_PURGE_RETRACTION_PERIOD 500 #define FILL_SENSORS_TIMER_FREQUENCY 100000 // 100ms This value needs to be defined in microseconds. #define FILL_SENSORS_TRIGGER 400 // Int between 0 and 1023 used to trigger the fill sensor: operating voltage(5v or 3.3v) / 1024 +#define NUMBER_OF_FILLERS 3 // Supports 1 to 3 fillers /** * Feature flags diff --git a/OpenBeerFiller.ino b/OpenBeerFiller.ino index a0b45af..7f83065 100644 --- a/OpenBeerFiller.ino +++ b/OpenBeerFiller.ino @@ -109,7 +109,7 @@ void triggerFullFillSensor1() { * Fired when fill sensor 1 is triggered as full. */ void triggerFullFillSensor2() { - if (!fillSensor2Triggered && hasProgramState(FILLING)) { + if (!fillSensor2Triggered && hasProgramState(FILLING) && NUMBER_OF_FILLERS > 1) { closeBeerFillerTube(BEER_INLET_SOL_2); fillSensor2Triggered = true; Serial.println("Filler tube 2 closed"); @@ -120,7 +120,7 @@ void triggerFullFillSensor2() { * Fired when fill sensor 1 is triggered as full. */ void triggerFullFillSensor3() { - if (!fillSensor3Triggered && hasProgramState(FILLING)) { + if (!fillSensor3Triggered && hasProgramState(FILLING) && NUMBER_OF_FILLERS > 2) { closeBeerFillerTube(BEER_INLET_SOL_3); fillSensor3Triggered = true; Serial.println("Filler tube 3 closed"); @@ -131,7 +131,14 @@ void triggerFullFillSensor3() { * Return whether all fill sensors have been triggered or not. */ bool allFillSensorsTriggered() { - return fillSensor1Triggered && fillSensor2Triggered && fillSensor3Triggered; + switch(NUMBER_OF_FILLERS) { + case 1: + return fillSensor1Triggered; + case 2: + return fillSensor1Triggered && fillSensor2Triggered; + case 3: + return fillSensor1Triggered && fillSensor2Triggered && fillSensor3Triggered; + } } void resetFillSensorTriggers() { @@ -232,7 +239,20 @@ void startState() { moveBeerBelt(); lowerFillerTubes(); purgeCO2(); - openAllBeerFillerTubes(); + switch(NUMBER_OF_FILLERS) { + case 1: + openBeerFillerTube(BEER_INLET_SOL_1); + break; + case 2: + openBeerFillerTube(BEER_INLET_SOL_1); + openBeerFillerTube(BEER_INLET_SOL_2); + break; + case 3: + openBeerFillerTube(BEER_INLET_SOL_1); + openBeerFillerTube(BEER_INLET_SOL_2); + openBeerFillerTube(BEER_INLET_SOL_3); + break; + } changeProgramState(FILLING); } From 6042be9223b9f38e97bac691a14922f3aaf44bff Mon Sep 17 00:00:00 2001 From: David Gray Date: Tue, 12 May 2020 18:34:50 +1000 Subject: [PATCH 2/2] Use array to determine number of fillers --- Config.h | 2 - InputConfig.h | 8 +--- OpenBeerFiller.ino | 110 +++++++++++++++------------------------------ 3 files changed, 39 insertions(+), 81 deletions(-) diff --git a/Config.h b/Config.h index a7ace96..f81a610 100644 --- a/Config.h +++ b/Config.h @@ -30,8 +30,6 @@ #define CO2_PURGE_RETRACTION_PERIOD 500 #define FILL_SENSORS_TIMER_FREQUENCY 100000 // 100ms This value needs to be defined in microseconds. #define FILL_SENSORS_TRIGGER 400 // Int between 0 and 1023 used to trigger the fill sensor: operating voltage(5v or 3.3v) / 1024 -#define NUMBER_OF_FILLERS 3 // Supports 1 to 3 fillers - /** * Feature flags */ diff --git a/InputConfig.h b/InputConfig.h index 7631c4f..f2bf6af 100644 --- a/InputConfig.h +++ b/InputConfig.h @@ -23,13 +23,9 @@ /** * Pin definitions */ +const int BEER_INLET_SOL[] = {5, 6, 7}; //Pin numbers of the inlet solenoids +const byte BEER_FILL_SENSOR[] = {A0, A1, A2}; //Pin numbers of the fill sensors #define START_BUTTON 8 -#define BEER_INLET_SOL_1 5 -#define BEER_INLET_SOL_2 6 -#define BEER_INLET_SOL_3 7 -#define BEER_FILL_SENSOR_1 A0 -#define BEER_FILL_SENSOR_2 A1 -#define BEER_FILL_SENSOR_3 A2 #define CO2_PURGE_SOL 4 #define FILL_RAIL_SOL 3 #define BEER_BELT_SOL 2 diff --git a/OpenBeerFiller.ino b/OpenBeerFiller.ino index 7f83065..b3528ad 100644 --- a/OpenBeerFiller.ino +++ b/OpenBeerFiller.ino @@ -35,13 +35,11 @@ * ******************************* VARIABLES ********************************* * *************************************************************************** */ -volatile bool fillSensor1Triggered = false; -volatile bool fillSensor2Triggered = false; -volatile bool fillSensor3Triggered = false; +bool triggerState[9]; // Maximum number of fillers bool idleMessageDisplayed = false; enum ProgramState {UNDEF,IDLE,START,FILLING,STOP}; ProgramState currentState = UNDEF; - +int numberFillers; /** * *************************************************************************** * ******************************** FUNCTIONS ******************************** @@ -49,9 +47,9 @@ ProgramState currentState = UNDEF; */ void setupPins() { // Filler solenoids. - pinMode(BEER_INLET_SOL_1, OUTPUT); - pinMode(BEER_INLET_SOL_2, OUTPUT); - pinMode(BEER_INLET_SOL_3, OUTPUT); + for(int i=0; i 1) { - closeBeerFillerTube(BEER_INLET_SOL_2); - fillSensor2Triggered = true; - Serial.println("Filler tube 2 closed"); + for(int i=0; i 2) { - closeBeerFillerTube(BEER_INLET_SOL_3); - fillSensor3Triggered = true; - Serial.println("Filler tube 3 closed"); +void triggerFullFillSensor(int sensor) { + if (!triggerState[sensor] && hasProgramState(FILLING)) { + closeBeerFillerTube(BEER_INLET_SOL[sensor]); + triggerState[sensor] = true; + Serial.print("Filler tube "); + Serial.print(sensor); + Serial.println(" closed"); } } @@ -131,18 +105,18 @@ void triggerFullFillSensor3() { * Return whether all fill sensors have been triggered or not. */ bool allFillSensorsTriggered() { - switch(NUMBER_OF_FILLERS) { - case 1: - return fillSensor1Triggered; - case 2: - return fillSensor1Triggered && fillSensor2Triggered; - case 3: - return fillSensor1Triggered && fillSensor2Triggered && fillSensor3Triggered; + for(int i=0; i