Skip to content

Commit 867fe53

Browse files
committed
Added maintenance menu, fixed copyright in fileheader.
1 parent eeb2227 commit 867fe53

14 files changed

+79
-38
lines changed

README.md

100644100755
File mode changed.

arduino-cocktail.ino

100644100755
File mode changed.

debounce.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Arduino-Cocktail
33
*
44
* Pushbutton debouncing helper class
5-
* Copyright 2016 by Thomas Buck <[email protected]>
5+
* Copyright 2017 by Thomas Buck <[email protected]>
66
*
77
* ----------------------------------------------------------------------------
88
* "THE BEER-WARE LICENSE" (Revision 42):

debounce.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Arduino-Cocktail
33
*
44
* Pushbutton debouncing helper class
5-
* Copyright 2016 by Thomas Buck <[email protected]>
5+
* Copyright 2017 by Thomas Buck <[email protected]>
66
*
77
* ----------------------------------------------------------------------------
88
* "THE BEER-WARE LICENSE" (Revision 42):
@@ -28,5 +28,5 @@ class Debouncer {
2828
unsigned long lastTime;
2929
};
3030

31-
#endif
31+
#endif // __DEBOUNCE_H__
3232

dispenser.cpp

100644100755
+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Arduino-Cocktail
33
*
44
* Dispenser
5-
* Copyright 2016 by Thomas Buck <[email protected]>
5+
* Copyright 2017 by Thomas Buck <[email protected]>
66
*
77
* ----------------------------------------------------------------------------
88
* "THE BEER-WARE LICENSE" (Revision 42):

dispenser.h

100644100755
+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Arduino-Cocktail
33
*
44
* Dispenser
5-
* Copyright 2016 by Thomas Buck <[email protected]>
5+
* Copyright 2017 by Thomas Buck <[email protected]>
66
*
77
* ----------------------------------------------------------------------------
88
* "THE BEER-WARE LICENSE" (Revision 42):

display.cpp

100644100755
+6-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ void writeLine(int line, const char *s) {
8080
}
8181
}
8282

83-
void writeLine(int line, String &s) {
83+
void writeLine(int line, const String &s) {
8484
writeLine(line, s.c_str());
8585
}
8686

87+
void writeLine(int line, const __FlashStringHelper *s) {
88+
String st(s);
89+
writeLine(line, st.c_str());
90+
}
91+

display.h

100644100755
+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ void drawSplash(void);
3939
void drawText(void);
4040

4141
void writeLine(int line, const char *s);
42-
void writeLine(int line, String &s);
42+
void writeLine(int line, const String &s);
43+
void writeLine(int line, const __FlashStringHelper *s);
4344

4445
#define DRAW_TEXT() drawDisplay(drawText)
4546
#define DRAW_SPLASH() drawDisplay(drawSplash)

menu.cpp

100644100755
File mode changed.

menu.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,5 @@ class MenuEntry {
6666
int act(MenuEntry **entry);
6767
};
6868

69-
#endif
69+
#endif // __MENU_H__
7070

recipes.cpp

100644100755
+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Ingredient ingMate = { 3, "Club Mate", 0, 20, 20 };
2525
Ingredient *ingredients[INGREDIENT_COUNT] = { &ingCoke, &ingCokeLight, &ingRum, &ingMate };
2626

2727
// List of recipes
28-
// Name, size, list of parts: ingredient number, percentage
28+
// Name, size in ml, list of parts: ingredient pointer, percentage
2929
Recipe recRumCola = { "Rum-Cola", 350, {
3030
{ &ingCoke, 75 },
3131
{ &ingRum, 25 },

recipes.h

100644100755
File mode changed.

ui.cpp

+59-28
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@ MenuEntry mainMenuEntry("Main Menu");
2525
MenuEntry autoMixMenuEntry("Auto Mixing", &mainMenuEntry);
2626
MenuEntry manualMixMenuEntry("Manual Mixing", &mainMenuEntry);
2727
MenuEntry ingredientsMenuEntry("Ingredient List", &mainMenuEntry);
28+
MenuEntry maintenanceMenuEntry("Maintenance", &mainMenuEntry);
2829

2930
MenuEntry manualMix1MenuEntry("Valve 1 & 2", &manualMixMenuEntry, manualDrawFunc, manualActFunc, (void *)(0x01 | 0x02));
3031
MenuEntry manualMix2MenuEntry("Valve 3 & 4", &manualMixMenuEntry, manualDrawFunc, manualActFunc, (void *)(0x04 | 0x08));
3132

33+
MenuEntry maintenanceRunAllMenuEntry("Open all Valves", &maintenanceMenuEntry, maintenanceDrawFunc, maintenanceActFunc);
34+
3235
MenuEntry *ingredientMenuEntries[INGREDIENT_COUNT];
3336
MenuEntry *recipeAutoMenuEntries[RECIPE_COUNT];
3437

@@ -56,23 +59,58 @@ void initUI(void) {
5659

5760
for (int i = 0; i < INGREDIENT_COUNT; i++) {
5861
Serial.println(F("Creating Ingredient menu entry..."));
59-
62+
6063
ingredientMenuEntries[i] = new MenuEntry(ingredients[i]->name,
6164
&ingredientsMenuEntry, ingredientDrawFunc, alwaysReturnActFunc, ingredients[i]);
6265
}
6366

6467
for (int i = 0; i < RECIPE_COUNT; i++) {
6568
Serial.println(F("Creating recipe menu entry..."));
66-
69+
6770
recipeAutoMenuEntries[i] = new MenuEntry(recipes[i]->name,
6871
&autoMixMenuEntry, dispenseDrawFunc, dispenseActFunc, recipes[i]);
6972
}
7073
}
7174

75+
int maintenanceDrawFunc(MenuEntry *entry, void *userData) {
76+
writeLine(0, F("Maintenance"));
77+
writeLine(1, "");
78+
writeLine(2, F("Opening all Valves"));
79+
writeLine(3, "");
80+
writeLine(4, F("Press button to"));
81+
writeLine(5, F("close and exit"));
82+
writeLine(6, "");
83+
writeLine(7, "");
84+
85+
DRAW_TEXT();
86+
87+
for (int i = 0; i < 4; i++) {
88+
digitalWrite(valves[i], LOW);
89+
}
90+
91+
return MENU_NO_ERR;
92+
}
93+
94+
int maintenanceActFunc(MenuEntry **entry, void *userData) {
95+
int sw1 = s1.poll();
96+
int sw2 = s2.poll();
97+
int sw3 = s3.poll();
98+
99+
if ((sw1 == -1) || (sw2 == -1) || (sw3 == -1)) {
100+
for (int i = 0; i < 4; i++) {
101+
digitalWrite(valves[i], HIGH);
102+
}
103+
*entry = (*entry)->getParent();
104+
return MENU_SHOULD_DRAW;
105+
}
106+
107+
return MENU_NO_ERR;
108+
}
109+
72110
int manualDrawFunc(MenuEntry *entry, void *userData) {
73111
int valvesel = (int)userData;
74112

75-
String name("Valves:");
113+
String name(F("Valves:"));
76114
int l = 1;
77115
for (int i = 0; i < 4; i++) {
78116
if (valvesel & (1 << i)) {
@@ -84,8 +122,8 @@ int manualDrawFunc(MenuEntry *entry, void *userData) {
84122

85123
writeLine(0, name);
86124
l++;
87-
writeLine(l++, "L & R to dispense");
88-
writeLine(l++, "Center to exit!");
125+
writeLine(l++, F("L & R to dispense"));
126+
writeLine(l++, F("Center to exit!"));
89127

90128
DRAW_TEXT();
91129
return MENU_NO_ERR;
@@ -133,23 +171,19 @@ int ingredientDrawFunc(MenuEntry *entry, void *userData) {
133171
Ingredient *ing = (Ingredient *)userData;
134172

135173
writeLine(0, entry->getName());
136-
writeLine(1, String("Valve No: ") + String(ing->valve));
174+
writeLine(1, String(F("Valve No: ")) + String(ing->valve));
137175
writeLine(2, "");
138-
writeLine(3, String(" Alcohol: ") + String(ing->alcohol) + "%");
176+
writeLine(3, String(F(" Alcohol: ")) + String(ing->alcohol) + "%");
139177
writeLine(4, "");
140-
writeLine(5, " / 100ml:");
141-
writeLine(6, String("Caffeine: ") + String(ing->caffeine) + "mg");
142-
writeLine(7, String("Calories: ") + String(ing->calories) + "kcal");
178+
writeLine(5, F(" / 100ml:"));
179+
writeLine(6, String(F("Caffeine: ")) + String(ing->caffeine) + "mg");
180+
writeLine(7, String(F("Calories: ")) + String(ing->calories) + "kcal");
143181

144182
DRAW_TEXT();
145183

146184
return MENU_NO_ERR;
147185
}
148186

149-
#define FLOW_RATE (1000 / 50) // 1000ms / 50ml
150-
151-
static int lastDispensionTimes[4] = { 0, 0, 0, 0 };
152-
153187
int dispenseActFunc(MenuEntry **entry, void *userData) {
154188
static unsigned long progressTime = 0;
155189

@@ -191,18 +225,15 @@ int dispenseActFunc(MenuEntry **entry, void *userData) {
191225
if (!dispensing && !dispensed && !showStats) {
192226
if (sw2 == -1) {
193227
// start dispenser, calculate timings
194-
lastDispensionTimes[0] = 0;
195-
lastDispensionTimes[1] = 0;
196-
lastDispensionTimes[2] = 0;
197-
lastDispensionTimes[3] = 0;
228+
int dispensionTimes[4] = { 0, 0, 0, 0 };
198229
for (int i = 0; i < 4; i++) {
199230
if (recipe->parts[i].ingredient != NULL) {
200231
int targetSize = recipe->parts[i].percentage * recipe->size / 100;
201232
int targetTime = targetSize * FLOW_RATE;
202-
lastDispensionTimes[recipe->parts[i].ingredient->valve] = targetTime;
233+
dispensionTimes[recipe->parts[i].ingredient->valve] = targetTime;
203234
}
204235
}
205-
startDispensing(lastDispensionTimes[0], lastDispensionTimes[1], lastDispensionTimes[2], lastDispensionTimes[3]);
236+
startDispensing(dispensionTimes[0], dispensionTimes[1], dispensionTimes[2], dispensionTimes[3]);
206237
dispensed = true;
207238
progressTime = millis();
208239
} else {
@@ -238,7 +269,7 @@ int dispenseActFunc(MenuEntry **entry, void *userData) {
238269
static int dispenseDrawDrinkInfo(Recipe *recipe) {
239270
uint32_t sizePx = ((uint32_t)recipe->size /* - DRINK_SIZE_MINIMUM */) * OLED_WIDTH / (DRINK_SIZE_MAXIMUM /* - DRINK_SIZE_MINIMUM */);
240271

241-
String sizeInfo("Size: ");
272+
String sizeInfo(F("Size: "));
242273
sizeInfo += recipe->size;
243274
sizeInfo += "ml";
244275

@@ -298,8 +329,8 @@ static int dispenseDrawProgress(Recipe *recipe) {
298329
u8g.firstPage();
299330
do {
300331
u8g.setFont(LARGE_FONT);
301-
u8g.drawStr(50, (1 * LARGE_FONT_HEIGHT), "Dispensing");
302-
u8g.drawStr(50, (2 * LARGE_FONT_HEIGHT) + (1 * GLASS_TEXT_OFF), "Wait!");
332+
u8g.drawStr(50, (1 * LARGE_FONT_HEIGHT), F("Dispensing"));
333+
u8g.drawStr(50, (2 * LARGE_FONT_HEIGHT) + (1 * GLASS_TEXT_OFF), F("Wait!"));
303334
u8g.drawStr(50, (3 * LARGE_FONT_HEIGHT) + (2 * GLASS_TEXT_OFF), prog.c_str());
304335

305336
u8g.drawHLine(GLASS_ANIM_OFF_X, OLED_HEIGHT - GLASS_ANIM_OFF_Y, GLASS_ANIM_WIDTH);
@@ -320,9 +351,9 @@ static int dispenseShowStats(Recipe *recipe) {
320351
// to not update properly...
321352
delay(250); // just wait a bit for this to pass
322353

323-
String alcohol("Alcohol: ");
324-
String caffeine("Caffeine: ");
325-
String calories("Calories: ");
354+
String alcohol(F("Alcohol: "));
355+
String caffeine(F("Caffeine: "));
356+
String calories(F("Calories: "));
326357

327358
uint32_t alcoholPercent = 0;
328359
uint32_t caffeineCont = 0;
@@ -349,10 +380,10 @@ static int dispenseShowStats(Recipe *recipe) {
349380
u8g.firstPage();
350381
do {
351382
u8g.setFont(LARGE_FONT);
352-
u8g.drawStr(0, LARGE_FONT_HEIGHT, "Enjoy your drink!");
383+
u8g.drawStr(0, LARGE_FONT_HEIGHT, F("Enjoy your drink!"));
353384

354385
u8g.setFont(SMALL_FONT);
355-
u8g.drawStr(0, LARGE_FONT_HEIGHT + (2 * SMALL_FONT_HEIGHT), "Statistics:");
386+
u8g.drawStr(0, LARGE_FONT_HEIGHT + (2 * SMALL_FONT_HEIGHT), F("Statistics:"));
356387
u8g.drawStr(0, LARGE_FONT_HEIGHT + (3 * SMALL_FONT_HEIGHT), alcohol.c_str());
357388
u8g.drawStr(0, LARGE_FONT_HEIGHT + (4 * SMALL_FONT_HEIGHT), caffeine.c_str());
358389
u8g.drawStr(0, LARGE_FONT_HEIGHT + (5 * SMALL_FONT_HEIGHT), calories.c_str());

ui.h

100644100755
+5-1
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@
3838
#define GLASS_ANIM_WIDTH 35
3939
#define GLASS_ANIM_HEIGHT (OLED_HEIGHT - (2 * GLASS_ANIM_OFF_Y))
4040

41+
#define FLOW_RATE (1000 / 50) // 1000ms / 50ml
42+
4143
extern Debouncer s1;
4244
extern Debouncer s2;
4345
extern Debouncer s3;
4446

4547
void initUI(void);
4648

49+
int maintenanceActFunc(MenuEntry **entry, void *userData);
50+
int maintenanceDrawFunc(MenuEntry *entry, void *userData);
4751
int manualActFunc(MenuEntry **entry, void *userData);
4852
int manualDrawFunc(MenuEntry *entry, void *userData);
4953

@@ -52,5 +56,5 @@ int ingredientDrawFunc(MenuEntry *entry, void *userData);
5256
int dispenseActFunc(MenuEntry **entry, void *userData);
5357
int dispenseDrawFunc(MenuEntry *entry, void *userData);
5458

55-
#endif
59+
#endif // __UI_H__
5660

0 commit comments

Comments
 (0)