Barista championship brouwen stopwatch • Inleiding (4 / 7 stap)

Stap 4: Code


De volgende code moet worden gekopieerd en geplakt in de Arduino IDE, en vervolgens, als sommige noodzakelijke wijzigingen had aangebracht, moet worden geüpload naar de Arduino board.

Voor directe download als .ide bestand, te klikken gelieve deze link.

 // ========== // World Barisa Championship brew time stopper // coded and designed by Tamas Szekffy // 2v0 as of 15. march 2014. // For improvements, notes, hints and bug reports, please contact professzore // Creative Commons Licence Attribution Non-Commercial Share Alike (CC-BY-NC-SA-4.0) // ========== // included Libraries #include // Basic LCD library #include // I2C Wiring library #include // MAX7221 library // ========== // pre-Setup // ========== LiquidCrystal lcd(8, 9, 5, 4, 3, 2); // LCD pinout const byte dot = B10100101; const byte full = B11111111; const int LCDBK = 6; // LCD Backlight pin const int ss1 = A3; // Start/Stop 1 pin const int ss2 = A2; // Start/Stop 2 pin const int rst = A1; // Reset pin int bcklght = 200; // LCD Backlight value (0 = turn off backlight) // Timer variables boolean timer1 = false; // true, if timer1 is running boolean timer2 = false; // true, if timer2 is running boolean ssastate = false; // became true, if ss1 button pressed (used for debouncing) boolean ssbstate = false; // became true, if ss2 button pressed (used for debouncing) boolean rststate = false; // became true, if rst button pressed (used for debouncing) boolean finish = false; // became true, as soon as all measurements finished unsigned long atime; // temporary variable for first time, indicates the time spent since start unsigned long btime; // temporary variable for second time, indicates the time spent since start unsigned long astime; // variable for first time, indicates the time when stopper started unsigned long bstime; // variable for second time, indicates the time when stopper started unsigned long debounce; int atimes[3]; // arrays of variables to store first time measured, one after another int btimes[3]; // arrays of variables to store second time measured, one after another int validtime = 3000; // maximum time allowed as difference between measured times to meet WBC rules (milliseconds, 3 sec = 3000) unsigned long menudelay = 0; // variable to measure the time how long "reset" pressed boolean menustate = false; // boolean variable to point out if the system is in MENU mode for validation time boolean menustate2 = false; // boolean variable to point out if the system is in MENU mode for backlight setting time byte atimecount = 0; // variable to count which measurement (first, second or first) are 'in line' for first time byte btimecount = 0; // variable to count which measurement (first, second or first) are 'in line' for second time /* pin 11 is connected to the DataIn pin 13 is connected to the CLK pin 10 is connected to LOAD We have only a single (1) MAX72XX. */ LedControl lc=LedControl(11,13,10,1); // =========== // Main Setup // =========== void setup() { Wire.begin(); // Turn on I2C analogWrite(LCDBK, bcklght); // LCD backlight is ON lcd.begin(16, 2); // set the size of the LCD (16 digits, 2 rows) lcd.clear(); /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ lc.shutdown(0,false); /* Set the brightness */ lc.setIntensity(0,8); /* and clear the display */ lc.clearDisplay(0); pinMode(ss1, INPUT); pinMode(ss2, INPUT); pinMode(rst, INPUT); // testrun(); // unmark '//' if you need the initial test of the system // delay(1); lcd.clear(); lcd.setCursor(0,0); lcd.print("WBC valid time"); lcd.setCursor(0,1); lcd.print(validtime); lcd.print(" msec"); delay(2000); lcd.clear(); rstall(); } // ============= // Main routine // ============= void loop() { if (digitalRead(ss1) == HIGH && ssastate == false && finish != true && debounce + 200 < millis()) { startstopa(); debounce = millis(); } if (digitalRead(ss1) == LOW && ssastate == true) { ssastate = false; } if (digitalRead(ss2) == HIGH && ssbstate == false && finish != true && debounce + 200 < millis()) { startstopb(); debounce = millis(); } if (digitalRead(ss2) == LOW && ssbstate == true) { ssbstate = false; } if (digitalRead(rst) == HIGH && rststate == false && finish == true && debounce + 200 < millis()) { rstall(); debounce = millis(); finish = false; menudelay = 0; } if (digitalRead(rst) == HIGH && rststate == false && finish == false && menudelay == 0) { menudelay = millis() + 3000; rststate = true; } if (digitalRead(rst) == HIGH && rststate == true && menudelay != 0 && menudelay < millis()) { menustate = true; lcd.clear(); } if (digitalRead(rst) == LOW && rststate == true) { rststate = false; menudelay = 0; } if (atimecount == btimecount && atimecount != 0) { validate(); } if (atimecount == 3 && btimecount == 3) { finish = true; } // ============================ // Time check value setup/menu // ============================ while(menustate) { lc.clearDisplay(0); lcd.setCursor(0,0); lcd.print("WBC valid time"); lcd.setCursor(0,1); lcd.print(validtime); lcd.print(" msec "); if (digitalRead(ss1) == HIGH && ssastate == false && validtime > 0 && debounce + 200 < millis()) { ssastate = true; validtime -= 100; debounce = millis(); } if (digitalRead(ss1) == LOW && ssastate == true) { ssastate = false; } if (digitalRead(ss2) == HIGH && ssbstate == false && validtime < 32700 && debounce + 200 < millis()) { ssbstate = true; validtime += 100; debounce = millis(); } if (digitalRead(ss2) == LOW && ssbstate == true) { ssbstate = false; } if (digitalRead(rst) == LOW && rststate == true) { rststate = false; menudelay = 0; } if (digitalRead(rst) == HIGH && rststate == false && menudelay == 0) { menustate = false; menustate2 = true; rststate = true; menudelay = millis() + 200; } } // END of submenu1 // ===================== // Backlight setup menu // ===================== while(menustate2) { lc.clearDisplay(0); lcd.setCursor(0,0); lcd.print("Backlight value"); lcd.setCursor(0,1); lcd.print(bcklght); lcd.print(" "); if (digitalRead(ss1) == HIGH && ssastate == false && bcklght > 0 && debounce + 200 < millis()) { ssastate = true; bcklght -= 10; debounce = millis(); } if (digitalRead(ss1) == LOW && ssastate == true) { ssastate = false; } if (digitalRead(ss2) == HIGH && ssbstate == false && bcklght < 250 && debounce + 200 < millis()) { ssbstate = true; bcklght += 10; debounce = millis(); } if (digitalRead(ss2) == LOW && ssbstate == true) { ssbstate = false; } if (digitalRead(rst) == LOW && rststate == true) { rststate = false; menudelay = 0; } if (digitalRead(rst) == HIGH && rststate == false && menudelay > millis()) { menustate2 = false; rststate = true; delay(1); rstall(); delay(1); } analogWrite(LCDBK, bcklght); } // END of submenu2 delay(1); } // ======================== // Start/stop of stopper 1 // ======================== void startstopa() { ssastate = true; // the button has pressed if (timer1 == false) // if the timer is NOT running... { astime = millis(); // record start time timer1 = true; // indicate the start of the timer lcd.setCursor(2,0); lcd.print("RUN"); lc.setChar(0,3,'-',false); } else // if the timer is running... { timer1 = false; // indicate the stop of the timer atime = millis() - astime; // calculates the time spent since start lcd.setCursor(2,0); lcd.print("..."); lc.setChar(0,3,' ',false); atime = atime/100; atime = atime * 100; atimes[atimecount] = atime; write7Segment(atimes[atimecount], 0); if (atimecount < 3) { lcd.setCursor(6+(atimecount*2),0); lcd.write(full); atimecount ++; } } } // ======================== // Start/stop of stopper 2 // ======================== void startstopb() { ssbstate = true; // the button has pressed if (timer2 == false) // if the timer is NOT running... { bstime = millis(); // record start time timer2 = true; // indicate the start of the timer lcd.setCursor(2,1); lcd.print("RUN"); lc.setChar(0,7,'-',false); } else // if the timer is running... { timer2 = false; // indicate the stop of the timer btime = millis() - bstime; // calculates the time spent since start lcd.setCursor(2,1); lcd.print("..."); lc.setChar(0,7,' ',false); btime = btime/100; btime = btime * 100; btimes[btimecount] = btime; write7Segment(btimes[btimecount], 4); if (btimecount < 3) { lcd.setCursor(6+(btimecount*2),1); lcd.write(full); btimecount ++; } } } // =================== // Write time on 7221 // =================== void write7Segment(unsigned long v, byte i) { byte ones; byte tens; byte fractions; v = v/100; fractions = v%10; v = v/10; ones = v%10; v = v/10; tens = v%10; lc.setDigit(0,i,tens,false); lc.setDigit(0,i+1,ones,true); lc.setDigit(0,i+2,fractions,false); } // ================================ // Validate each measurement-pairs // ================================ void validate() { unsigned int lowest; unsigned int highest; unsigned int difference; lowest = min(atimes[atimecount-1],btimes[btimecount-1]); highest = max(atimes[atimecount-1],btimes[btimecount-1]); difference = highest - lowest; if (difference > validtime) { lcd.setCursor(12,0); lcd.print("FAIL"); byte ones; byte tens; byte fractions; difference = difference/100; fractions = difference%10; difference = difference/10; ones = difference%10; difference = difference/10; tens = difference%10; lcd.setCursor(12,1); lcd.print(tens); lcd.setCursor(13,1); lcd.print(ones); lcd.setCursor(14,1); lcd.print('.'); lcd.setCursor(15,1); lcd.print(fractions); } else { lcd.setCursor(12,0); lcd.print(" OK "); byte ones; byte tens; byte fractions; difference = difference/100; fractions = difference%10; difference = difference/10; ones = difference%10; difference = difference/10; tens = difference%10; lcd.setCursor(12,1); lcd.print(tens); lcd.setCursor(13,1); lcd.print(ones); lcd.setCursor(14,1); lcd.print('.'); lcd.setCursor(15,1); lcd.print(fractions); } } // =========================================== // Reset all values, returns to initial state // =========================================== void rstall() { rststate = true; lc.clearDisplay(0); delay(100); write7Segment(0, 0); write7Segment(0, 4); //reset all variables timer1 = false; timer2 = false; atime = 0; btime = 0; astime = 0; bstime = 0; atimes[0] = 0; atimes[1] = 0; atimes[2] = 0; btimes[0] = 0; btimes[1] = 0; btimes[2] = 0; atimecount = 0; btimecount = 0; lcd.clear(); lcd.setCursor(0,0); lcd.print('1'); lcd.setCursor(0,1); lcd.print('2'); lcd.setCursor(2,0); lcd.print("..."); lcd.setCursor(2,1); lcd.print("..."); lcd.setCursor(6,0); lcd.write(dot); lcd.setCursor(8,0); lcd.write(dot); lcd.setCursor(10,0); lcd.write(dot); lcd.setCursor(6,1); lcd.write(dot); lcd.setCursor(8,1); lcd.write(dot); lcd.setCursor(10,1); lcd.write(dot); lcd.setCursor(12,0); lcd.print("...."); lcd.setCursor(12,1); lcd.print("...."); } // ======================================================================== // Test routine, may be started by un-// the call at the end of void.Setup // ======================================================================== void testrun() { lc.clearDisplay(0); lcd.clear(); lcd.setCursor(0,0); lcd.print("WBC Stopwatch"); lcd.setCursor(0,1); lcd.print("Made by Tamas Szekffy in 2014"); delay(2000); for (int scroll = 0; scroll < 18; scroll++) { lcd.scrollDisplayLeft(); delay(500); } lcd.clear(); lcd.setCursor(0,0); lcd.print("Test run will"); lcd.setCursor(0,1); lcd.print("undergo in 5 s"); delay(5000); lcd.clear(); lc.clearDisplay(0); for (int i = 0; i < 10; i++) { lc.setDigit(0,0,i,false); lc.setDigit(0,1,i,true); lc.setDigit(0,2,i,false); lc.setDigit(0,4,i,false); lc.setDigit(0,5,i,true); lc.setDigit(0,6,i,false); delay(500); } lc.clearDisplay(0); delay(500); lcd.clear(); delay(250); lcd.setCursor(0,0); lcd.print('1'); delay(250); lcd.setCursor(0,1); lcd.print('2'); delay(250); lcd.setCursor(2,0); lcd.print("..."); delay(250); lcd.setCursor(2,0); lcd.print("RUN"); delay(250); lcd.setCursor(2,1); lcd.print("..."); delay(250); lcd.setCursor(2,1); lcd.print("RUN"); delay(250); lcd.setCursor(6,0); lcd.write(dot); delay(250); lcd.setCursor(6,0); lcd.write(full); delay(250); lcd.setCursor(8,0); lcd.write(dot); delay(250); lcd.setCursor(8,0); lcd.write(full); delay(250); lcd.setCursor(10,0); lcd.write(dot); delay(250); lcd.setCursor(10,0); lcd.write(full); delay(250); lcd.setCursor(6,1); lcd.write(dot); delay(250); lcd.setCursor(6,1); lcd.write(full); delay(250); lcd.setCursor(8,1); lcd.write(dot); delay(250); lcd.setCursor(8,1); lcd.write(full); delay(250); lcd.setCursor(10,1); lcd.write(dot); delay(250); lcd.setCursor(10,1); lcd.write(full); delay(250); lcd.setCursor(12,0); lcd.print("...."); delay(250); lcd.setCursor(12,1); lcd.print("...."); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Ready to GO!"); delay(3000); lcd.clear();} 

Gerelateerde Artikelen

Inleiding tot chainmaille

Inleiding tot chainmaille

U hebben ooit begonnen breien een trui en dacht: "Ik wou dat dit betere bescherming tegen pijlen?" U kunt overwegen om onderaan uw breinaalden voor een paar tang en beginnen met het maken van sommige chainmaille.*Chainmaille is een sterke maar f
Brouwen op een begroting: koude handen naar beneden - beste brouwen koffie methode zonder een brouwer

Brouwen op een begroting: koude handen naar beneden - beste brouwen koffie methode zonder een brouwer

Dus, ik gebruikte om te zeggen dat ik alleen ijskoffie van Dunkin Donuts voor de room en suiker dronk. Ik heb mijn koffie snobiness voor een lekker warm kopje Chemex giet opgeslagen.MAAR... Na een bezoek aan Bow Truss koffiebranders in Chicago, ontde
Hoe te brouwen kombucha thuis

Hoe te brouwen kombucha thuis

Maken van uw eigen kombucha thuis is veel makkelijker dan je zou denken! Als je wil gaan Thuisbrouwer of gistende, dit is een leuke eerste project om uit te proberen. : DZodra u hebt verworven of een SCOBY gegroeid, alles wat je echt nodig hebt is so
Brouwen van uw eigen Ierse Stout - alle graan

Brouwen van uw eigen Ierse Stout - alle graan

Voor velen, wordt de komst van de lente gekenmerkt door de bloei van de tulpen en narcissen en het getjilp van vogels. Terwijl alle dat is groot en alle, kan u vertellen voorjaar komt in mijn huis door de geur van geroosterde gerst en het bottelen va
Eenvoudig Filter voor het brouwen

Eenvoudig Filter voor het brouwen

thuis brouwen van bier is een grote hobby - zodra u de apparatuur hebt, u gepersonaliseerd, heerlijke ambachtelijke bieren kunt churn voor helft van de prijs van gebotteld ales uit de supermarkt, of een derde, zelfs een kwart van de pub prijzen.Laats
Oogst, gebraden en brouwen groene thee met behulp van een gemeenschappelijk struik

Oogst, gebraden en brouwen groene thee met behulp van een gemeenschappelijk struik

Terwijl het niet echt honger, bevat het oude gezegde "honger in het midden van overvloed" veel waarheid. Hier is hoe te maken van een zeer smakelijk en voedzaam groene thee uit een gemeenschappelijk struik door velen beschouwd als een ongewenste
2 x 4 Championship Wrestling riem

2 x 4 Championship Wrestling riem

In dit Instructable ik zal u laten zien hoe een bescheiden 2 x 4 nemen en zet hem een championship wrestling belt! U zult de afgunst van uw vrienden en de kampioen van uw achtertuin worstelen!Materialen voor deze bouwstijl:1. 8 voet lange bouw rang 2
Hoe te brouwen koffie met een K-kop zonder het koffiezetapparaat Keurig

Hoe te brouwen koffie met een K-kop zonder het koffiezetapparaat Keurig

toen we dit Koffieapparaat op mijn kantoor, hierdoor echt zwak koffie, dus ik kwam met deze wijziging zodat ik een sterker/gratis kopje koffie maken kon.(afhankelijk van uw tijd, ruimte, en vaardigheden).Vereist:-K-Cup smaak van keuze (kunt u dit met
Inleiding tot Leatherworking

Inleiding tot Leatherworking

Leder is een geweldig product dat is gebruikt door de mens sinds echt, het begin van de mens. Het is in kleding, schoenen, tassen, riemen en holsters en echt, vrij veel alles wat die je van bedenken kunt kan worden gemaakt van leer.Werken met leer is
Hoe te brouwen bier met behulp van een bieruitrusting

Hoe te brouwen bier met behulp van een bieruitrusting

U nodig hebt voor uw home-brewbieruitrustingfermenteren emmer, airlock en kraansanitizerStap 1: Sanitize uw apparatuurZet alle brouwen apparatuur in de gistende emmerVoeg sanitizer en meng het dienovereenkomstig met waterStap 2: Ontbinden inhoud van
Koud brouwen ijsthee - makkelijk, perfect, losse blad!

Koud brouwen ijsthee - makkelijk, perfect, losse blad!

Moe van bittere, saai ijsthee? Hier is een perfecte oplossing... laat het steile in de koelkast!Het duurt 4-8 uur, afhankelijk van de thee, dus het is geweldig om het te beginnen voor het slapen of vroeg in de ochtend.Ik heb dit jarenlang gedaan en i
Kombucha brouwen instructies

Kombucha brouwen instructies

brouwen kombucha thee of Manchurian thee, is een gemakkelijk proces die slechts een minimale hoeveelheid tijd, sommige gemeenschappelijke keukengerei en enige basiskennis over culturen en goede hygiëne vereist. Als je na uw paddestoel cultuur kijkt e
Hoe te brouwen goede Water Kefir

Hoe te brouwen goede Water Kefir

KEFIR (KEH - ANGST)Kefir, keefir of kefir is een gegiste drank met kefir "granen" (een gist/bacteriële fermentatie starter) gemaakt en heeft zijn oorsprong in de Noord-Kaukasus.Zij is bereid door het enten van een water en suiker mengsel met kef
Hoe te brouwen thee met behulp van een Franse pers

Hoe te brouwen thee met behulp van een Franse pers

wil om te winnen een gratis Franse pers voor jezelf of om aan te geven als een geschenk dit vakantieseizoen? Check out http://bit.ly/1PGTXvZ en voer de giveaway!Ik hou van losse blad thee en met behulp van een Franse pers te brouwen het maakt het nog