Implementierung und Funktion (Website)
Bei dem
"Order"-Button, über den ein konfigurierter Cocktail bestellt werden
kann, handelt es sich um eine Kopie der einzelnen Bestellbuttons auf
der Startseite zum Bestellen der vordefinierten Cocktails. Das
bedeutet, bei Betätigen dieses Buttons wird derselbe Code zum
Beschreiben des Glases ausgeführt. Der einzige und wesentliche
Unterschied zu den bisher verwendeten Buttons ist, dass die
Information, die auf das Glas geschrieben werden soll, nicht aus
einer Look-up-Table gelesen wird, sondern dynamisch gespeichert
werden muss. Vor der Implementierung des Konfigurators wurde die zu
schreibende Information in dem ID-Attribut des Buttons hinterlegt.
Da dieses Attribut allerdings statisch ist und nicht z.B. über
javascript-Funktionen verändert werden kann, musste dies für den
Konfigurator geändert werden. Um den Code möglichst einfach zu
halten und sich das Name-Attribut des Buttons ändern lies, wurde der
Code für die gesamte Bestellstation so verändert, dass die zu
schreibende Information nun bei allen Bestellbuttons in dem
Name-Attribut hinterlegt wird. Für die vordefinierten Cocktails ist
somit der jeweilige Cocktailname, der Name des jeweiligen
Bestellbuttons. Für die konfigurierten Cocktails wird dynamisch
nach jeder Änderung durch den Nutzer ein neuer String generiert und
als Name des Buttons festgelegt. Dieser String besteht aus einer
Aneinanderreihung von Zahlen, welche die jeweiligen
Mengenverhältnisse representieren.
Obige
Beispielkonfiguration resultiert folglich in einen String mit
folgender Struktur: 015010040155000000000000 Diese
Information wird dann auf das Glas geschrieben und von der
CocktailMaschine ausgelesen.
Implementierung und
Funktion (Cocktail Maschine) Bei dem Auslesen des Glases
an der Cocktailmaschine wird zuallererst überprüft, ob es sich um
einen vordefinierten Cocktailnamen oder um einen Zahlenstring aus
Mengenverhältnissen handelt. Dafür wurde die bereits vorhandene
Implementierung um eine Abfrage erweitert, welche prüft, ob der
empfangene String in der vorimplementierten Cocktailliste zu finden
ist:
bool
cFlashMemory::getIngredients(const
char * pCocktail, byte *
pIngredients, bool
&pCustomCocktail)
Wenn nicht, handelt es sich entweder um
einen konfigurierten Cocktail oder um einen Fehler. Die Reihenfolge
der Zutaten ist für die Bestellstation sowie die Cocktailmaschine
gleich definiert. Die Cocktailmaschine muss somit lediglich den
String in Zahlen aufteilen und in das Array schreiben:
pIngredients[h] = (byte)
temps.toInt();
Nachdem die
Zutaten als ml in der jeweiligen Stelle des Arrays beschrieben
werden, erfolgt am Ende der veränderten Funktion noch das Umschalten
der bool Variable 'pCustomCocktail'.
pCustomCocktail =
true;
Diese bool Variable
befindet sich in 'Procesdures.h' und wurde dem Struct 'sCocktailOrder'
neu hinzugefügt. Der Struct dient dem Speichern aller relevanten
Daten der Cocktailbestellung. Somit ist die Cocktailbestellung
Objektorientiert. Die neue bool Variable wird in der
'cProcedures.cpp' wichtig:
bool
determineIngredients(char*
pOrderName, byte* pIngredients,
bool &pCustomCocktail)
Die
Funktion 'determineIngredients' wird gewöhnlicherweise
verwendet, um alle Zuataten aus einem Rezept zu normieren. Das
Bedeutet, dass die Mischungverhältnisse der Zutataten auf das
Volumen des Glases (aktuell 220ml) angepasst wird. Dies ist für
den Fall des CustomCocktails nachteilig, denn die Zutaten wirden auf
der Website in ml angegeben. Die vordefinierten Cocktails
bestehen dahingegen nur aus Mischungsverhältnissen. Aus diesem
Grund wird mit einer Abfrage ermittel, ob es sich um einen
CustomCocktail oder um einen vordefinieretn Cocktail handelt.
if(pCustomCocktail ==
false)
Handelt es sich um
einen vordefinieretn Cocktail (false), so müssen die Zutaten
(ingredients[8]) normiert werden. Handelt es sich um einen
CustomCocktail, so wird das normieren übersprungen.
|