Roboten Bartender - Arduino baserat (10 / 12 steg)
Steg 10: kod
Jag var kort om tid och så mycket av min kod hittar du dåligt skriven och konstruerat. Jag kommer att lägga upp en kod senare som är mer lätt ändras, men kommer inte att kunna testa det med bartendern som det har varit demonteras för delar.
I allmänhet koden tar input från knappsatsen, utvärderar markeringen med växeln/fall uttalanden och sedan doserar en drink. Varje dryck är skriven som en funktion. En drink hälls genom att stänga reläet och slår pumpar på specifika belopp av tid. Jag kontrollerade tiden reläer stängdes med funktionen delay() istället för att använda timers. Detta gör koden konstigt att skriva när ingredienser är på för olika mängder av tid, och svårt att ändra och expandera. Den nya koden ersätter delay() med timers.
Den I2C bibliotek och information kan hittas här: http://arduino-info.wikispaces.com/LCD-Blue-I2C
#include / / kommer med Arduino IDE
#include
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, positiv); Ställa in LCD-I2C adress
int nycklar [] = {//Stores totala knappsatsen ingång
1, 2, 3, 10, 4, 5, 6, 11, 7, 8, 9, 12,-3,0, -2, 14}; "123A456B789C * 0 #D";
int nyckel; Butiker senaste nedtryckt
booleska key_lockout = false;
int ordning [4].
int värde = 0;
Initiera
CONST int vodka = 3; Baserat på 6v klart pump, 13,3 SEK/oz (20 SEK/1,5 oz)
CONST int gin = 4; Baserat på 12v svart pumpar, 25.3 SEK/oz (38 SEK/1,5 oz)
CONST int whiskey = 5;
CONST int tripleSec = 6;
CONST int tequila = 7.
CONST int Rom = 8.
CONST int vatten = 9.
CONST int simpleSyrup = 10;
void setup() {
Serial.BEGIN(9600);
LCD.BEGIN(16,2);
pinMode (vodka, produktionen);
pinMode (gin, OUTPUT);
pinMode (whiskey, produktionen);
pinMode (tripleSec, produktionen);
pinMode (tequila, produktionen);
pinMode (Rom, produktionen);
pinMode (simpleSyrup, produktionen);
pinMode (vatten, OUTPUT);
digitalWrite (vodka, hög);
digitalWrite (gin, hög);
digitalWrite (whiskey, hög);
digitalWrite (tripleSec, hög);
digitalWrite (tequila, hög);
digitalWrite (Rom, hög).
digitalWrite (simpleSyrup, hög);
digitalWrite (vatten, hög).
---3 blinkar av bakgrundsbelysning---
för (int jag = 0; jag < 3; i ++)
{
LCD.backlight();
Delay(250);
lcd.noBacklight();
Delay(250);
}
LCD.backlight(); avsluta med bakgrundsbelysning på
}
void loop() {
Början:
{
---Skriv tecken på displayen---
Obs: Markörens Position: (CHAR, linje) börjar på 0
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Enter din order");
Delay(500);
lcd.setCursor(0,1);
LCD.Print ("*-Clr, #-ange");
Delay(1000);
//-----------------------------------------------------------
värde = 0;
för (int x = 0; x < 4; x ++) {
Key=getKeypad(); Få nedtryckt
IF(Key==-1) {//If giltig nyckel inte pressad omstart iteration
x = x-1;
}
annat {
om (nyckel! = 14 & & nyckel! = 12) {//If inte klar eller RETUR
värde = (10*(value)) + (keys[key]);
Delay(10);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("element #");
Delay(10);
lcd.setCursor(6,0);
LCD.Print(Value);
Delay(500);
}
annat if(key==14) {//If ENTER, utgång
x = 4.
}
annars om (nyckel == 12) {//If klar, starta om
x =-1;
}
}
}
LCD.Clear();
lcd.setCursor(0,0);
LCD.Print ("Tryck på # till");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("bekräfta dryck");
Delay(10);
lcd.setCursor(14,1);
LCD.Print(Value);
göra {
Key=getKeypad();
}
medan (nyckel! = 12 & & nyckel! = 14);
IF(Key==12) {//Restart beställningsprocessen
gå till början; Tillbaka till början av loop()
}
annat if(key==14) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("bekräftat");
Delay(1000);
Växla (värde) {
fall 1:
longIslandIcedTea();
bryta;
fall 2:
jackAndCoke();
bryta;
fall 3:
rumAndCoke();
bryta;
fall 4:
capeCod();
bryta;
fall 5:
Cosmopolitan();
bryta;
fall 6:
Kamikazee();
bryta;
fall 7:
skruvmejsel;
bryta;
mål 8:
Highball();
bryta;
mål 9:
gt();
bryta;
mål 10:
vodkaTonic();
bryta;
mål 11:
Margarita();
bryta;
ärende 12:
seaBreeze();
bryta;
}
Delay(5); dröjsmål i mellan läser för stabilitet
}
}
}
---Funktioner---
int getKeypad() {//Returns vilken tangent trycks
int ret =-1;
booleska reset_lockout = false;
IF(analogRead(a0) < 120)
key_lockout = false;
annat if(!key_lockout) {
Delay(100);
ret=15.5-(log((analogRead(a0)-183.9)/58.24)/0.1623);//+0.5;
key_lockout = sant;
}
återvändande ret;
}
Menyn
Long Island Iced Tea
int longIslandIcedTea() {
digitalWrite (vodka, låg);
Delay(80);
digitalWrite (gin, låg);
Delay(80);
digitalWrite (tripleSec, låg);
Delay(80);
Serial.println ("i matrisen");
digitalWrite (tequila, låg);
Delay(80);
digitalWrite (Rom, låg).
Delay(80);
digitalWrite (vatten, låg).
Delay(6600);
digitalWrite (vodka, hög);
Delay(6400);
digitalWrite (vatten, hög).
digitalWrite (gin, hög);
digitalWrite (tripleSec, hög);
digitalWrite (tequila, hög);
digitalWrite (Rom, hög).
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("lägga till 1oz Sour Mix");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("sedan blandning");
Delay(5000);
LCD.Clear();
LCD.Print ("Lägg ice och");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("top med koks");
Delay(3000);
}
}
Jack och cola
int jackAndCoke() {
2 oz av whisky
Serial.println ("Jack och cola");
digitalWrite (whiskey, låg);
Delay(10);
digitalWrite (vatten, låg).
Delay(4500);
digitalWrite (vatten, hög).
Delay(33500);
digitalWrite (whiskey, hög);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print (Lägg till is och 2-5");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("uns av koks");
Delay(8000);
}
Rom och cola
int rumAndCoke() {
2 oz av Rom
Serial.println ("Rom och cola");
digitalWrite (Rom, låg).
Delay(10);
digitalWrite (vatten, låg).
Delay(4500);
digitalWrite (vatten, hög).
Delay(33500);
digitalWrite (Rom, hög).
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print (Lägg till is och 2-5");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("uns av koks");
Delay(8000);
}
Cape Cod
int capeCod() {
2 oz av vodka, 3 oz cranberry juice, limeklyfta
Serial.println ("Cape Cod");
digitalWrite (vodka, låg);
Delay(10);
digitalWrite (vatten, låg).
Delay(4500);
digitalWrite (vatten, hög).
Delay(15500);
digitalWrite (vodka, hög);
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Lägg till ice & 2-3 oz");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("Cranberry Juice-");
Delay(3000);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print (och en limeklyfta");
Delay(3000);
}
}
Bay Breeze
int bayBreeze() {
2 oz av vodka, 5 oz tranbärsjuice, 2 oz ananasjuice (eller lika delar ~2.5 oz varje), limeklyfta
Serial.println ("Bay Breeze");
digitalWrite (vodka, låg);
Delay(10);
digitalWrite (vatten, låg).
Delay(4500);
digitalWrite (vatten, hög).
Delay(15500);
digitalWrite (vodka, hög);
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Lägg till ice & 4-5 oz");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("tranbärsjuice");
Delay(4000);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print (och 2oz av");
lcd.setCursor(0,1);
LCD.Print ("ananasjuice");
Delay(3000);
}
}
Kosmopolitiska
int cosmopolitan() {
1 1/2 uns vodka eller citrus vodka, 1 uns Cointreau apelsin likör, 1/2 ounce färsk limejuice, 1/4 uns cranberry juice
Serial.println("Cosmopolitan");
digitalWrite (tripleSec, låg);
Delay(10);
digitalWrite (vodka, låg);
Delay(10);
digitalWrite (vatten, låg).
Delay(13000);
digitalWrite (vatten, hög).
Delay(7000);
digitalWrite (vodka, hög);
Delay(5323);
digitalWrite (tripleSec, hög);
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Lägg till 1/2 oz lime");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("Juice och MIX");
Delay(4000);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Top med");
lcd.setCursor(0,1);
LCD.Print ("tranbärsjuice");
Delay(3000);
}
}
Kamikazee
int kamikazee() {
1 1/2-1 uns vodka, 1 uns limejuice, 1 uns triple sec, limeklyfta till garnering
Shake
Serial.println("Kamikazee");
digitalWrite (tripleSec, låg);
Delay(10);
digitalWrite (vodka, låg);
Delay(10);
digitalWrite (vatten, låg).
Delay(13000);
digitalWrite (vatten, hög).
Delay(7000);
digitalWrite (vodka, hög);
Delay(5323);
digitalWrite (tripleSec, hög);
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Add 1 oz Lime");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("Juice och MIX");
Delay(4000);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Lägg till is");
lcd.setCursor(0,1);
LCD.Print (och limeklyfta");
Delay(3000);
}
}
Skruvmejsel
int screwdriver() {
1 1/2-1 uns vodka, 5 oz orange juice
Serial.println("Screwdriver");
digitalWrite (vodka, låg);
Delay(20000);
digitalWrite (vodka, hög);
för (int x = 0; x < 2; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("lägga till is och ~ 5);
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("oz Orange Juice");
Delay(3000);
}
}
Highball
int highball() {
1.5 uns whiskey, ginger ale
Serial.println("Highball");
digitalWrite (whiskey, låg);
Delay(38000);
digitalWrite (whiskey, hög);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("lägga till is och");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("Ginger Ale");
Delay(8000);
}
Gin och Tonic
int gt() {
1.5 uns gin, 2,25 tonic eller 2:3, 1/4 oz limejuice
Serial.println ("Gin och Tonic");
digitalWrite (gin, låg);
Delay(38000);
digitalWrite (gin, hög);
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("lägga till is, 2-5 oz");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("av Tonic och...");
Delay(3000);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("1/4 oz");
lcd.setCursor(0,1);
LCD.Print ("limejuice");
Delay(3000);
}
}
Vodka Tonic
int vodkaTonic() {
1.5 uns vodka, 3-4.5 tonic, 1/4 oz limejuice
Serial.println ("Vodka Tonic");
digitalWrite (vodka, låg);
Delay(20000);
digitalWrite (vodka, hög);
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("lägga till is, 2-5 oz");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("av Tonic och...");
Delay(3000);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("1/4 oz");
lcd.setCursor(0,1);
LCD.Print ("limejuice");
Delay(3000);
}
}
Margarita
int margarita() {
digitalWrite (tripleSec, låg);
Delay(10);
digitalWrite (tequila, låg);
Delay(10);
digitalWrite (vatten, låg).
Delay(13000);
digitalWrite (vatten, hög).
Delay(12700);
digitalWrite (tripleSec, hög);
Delay(12870);
digitalWrite (tequila, hög);
för (int x = 0; x < 3; x ++) {
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("Lägg till 1/2 oz av");
Delay(10);
lcd.setCursor(0,1);
LCD.Print ("Lime Juice &...");
Delay(3000);
LCD.Clear();
lcd.setCursor(0,0); Börja med tecknet 4 på rad 0
LCD.Print ("blandning");
lcd.setCursor(0,1);
LCD.Print ("sedan Lägg till is");
Delay(4000);
}
}
Sea Breeze
int seaBreeze() {
1,35 vodka, 4 tranbärsjuice, grapefruktjuice 1
Serial.println ("havsbris");
digitalWrite (vodka, låg);
Delay(18000);
digitalWrite (vodka, hög);
}