Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +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

/**
* Feature flags
*/
Expand Down
8 changes: 2 additions & 6 deletions InputConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
94 changes: 39 additions & 55 deletions OpenBeerFiller.ino
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,21 @@
* ******************************* 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 ********************************
* ***************************************************************************
*/
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<numberFillers; ++i ){
pinMode(BEER_INLET_SOL[i], OUTPUT);
}

// CO2 solenoid.
pinMode(CO2_PURGE_SOL, OUTPUT);
Expand All @@ -63,9 +61,10 @@ void setupPins() {
pinMode(BEER_BELT_SOL, OUTPUT);

// Fill sensors.
pinMode(BEER_FILL_SENSOR_1, OUTPUT);
pinMode(BEER_FILL_SENSOR_2, OUTPUT);
pinMode(BEER_FILL_SENSOR_3, OUTPUT);
for(int i=0; i<numberFillers; ++i ){
triggerState[i] = false;
pinMode(BEER_FILL_SENSOR[i], INPUT);
}

// Start/Stop button.
pinMode(START_BUTTON, INPUT);
Expand All @@ -83,59 +82,41 @@ void setupFillSensorsTimer() {
* Check if the fill sensors have been triggered.
*/
void checkFillSensors() {
if (FILL_SENSORS_TRIGGER < analogRead(BEER_FILL_SENSOR_1)) {
triggerFullFillSensor1();
}
if (FILL_SENSORS_TRIGGER < analogRead(BEER_FILL_SENSOR_2)) {
triggerFullFillSensor2();
}
if (FILL_SENSORS_TRIGGER < analogRead(BEER_FILL_SENSOR_3)) {
triggerFullFillSensor3();
}
}

/**
* Fired when fill sensor 1 is triggered as full.
*/
void triggerFullFillSensor1() {
if (!fillSensor1Triggered && hasProgramState(FILLING)) {
closeBeerFillerTube(BEER_INLET_SOL_1);
fillSensor1Triggered = true;
Serial.println("Filler tube 1 closed");
for(int i=0; i<numberFillers; ++i ){
if (FILL_SENSORS_TRIGGER < analogRead(BEER_FILL_SENSOR[i])) {
triggerFullFillSensor(i);
}
}
}

/**
* Fired when fill sensor 1 is triggered as full.
*/
void triggerFullFillSensor2() {
if (!fillSensor2Triggered && hasProgramState(FILLING)) {
closeBeerFillerTube(BEER_INLET_SOL_2);
fillSensor2Triggered = true;
Serial.println("Filler tube 2 closed");
}
}

/**
* Fired when fill sensor 1 is triggered as full.
*/
void triggerFullFillSensor3() {
if (!fillSensor3Triggered && hasProgramState(FILLING)) {
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");
}
}

/**
* Return whether all fill sensors have been triggered or not.
*/
bool allFillSensorsTriggered() {
return fillSensor1Triggered && fillSensor2Triggered && fillSensor3Triggered;
for(int i=0; i<numberFillers; ++i ){
if(!triggerState[i]){
return false;
}
}
return true;
}

void resetFillSensorTriggers() {
fillSensor1Triggered = fillSensor2Triggered = fillSensor3Triggered = false;
for(int i=0; i<numberFillers; ++i ){
triggerState[i] = false;
}
}

/**
Expand All @@ -157,19 +138,19 @@ void closeBeerFillerTube(int fillerTubePin) {
*/
void openAllBeerFillerTubes() {
Serial.println("Opening all beer filler tubes");
digitalWrite(BEER_INLET_SOL_1, HIGH);
digitalWrite(BEER_INLET_SOL_2, HIGH);
digitalWrite(BEER_INLET_SOL_3, HIGH);
for(int i=0; i<numberFillers; ++i ){
digitalWrite(BEER_INLET_SOL[i], HIGH);
}
}

/**
* Close all beer filler solenoids.
*/
void closeAllBeerFillerTubes() {
Serial.println("Closing all beer filler tubes");
digitalWrite(BEER_INLET_SOL_1, LOW);
digitalWrite(BEER_INLET_SOL_2, LOW);
digitalWrite(BEER_INLET_SOL_3, LOW);
for(int i=0; i<numberFillers; ++i ){
digitalWrite(BEER_INLET_SOL[i], LOW);
}
}

/**
Expand Down Expand Up @@ -232,7 +213,9 @@ void startState() {
moveBeerBelt();
lowerFillerTubes();
purgeCO2();
openAllBeerFillerTubes();
for(int i=0; i<numberFillers; ++i ){
openBeerFillerTube(BEER_INLET_SOL[i]);
}
changeProgramState(FILLING);
}

Expand Down Expand Up @@ -344,6 +327,7 @@ void alwaysRun() {
*/
void setup() {
Serial.begin(115200);//Serial.begin(9600);
numberFillers = ((sizeof(BEER_INLET_SOL))/(sizeof(BEER_INLET_SOL[0])));
setupPins();
setupFillSensorsTimer();
resetUnit();
Expand Down