An updated and more polished version of the earlier TeaBasic. This is now finished and works like a treat.
main.cpp
- Committer:
- Eggotape
- Date:
- 2011-06-29
- Revision:
- 0:36264f703f1c
File content as of revision 0:36264f703f1c:
#include "mbed.h" #include "Servo.h" #include "TextLCD.h" #include "DebouncedIn.h" TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7 DebouncedIn setbutton(p5); DebouncedIn gobutton(p6); Servo myservo(p21); DigitalOut leda(LED1); DigitalOut ledb(LED2); DigitalOut ledc(LED3); DigitalOut ledd(LED4); Timer t; Timer t2; int set(); int dip(); int set (int currentstate); int displaystate(int currentstate); int maketea(int currentstate); int dipping(); int alert(); int alertoff(); int main() { int state; state = 1; myservo = 1; lcd.cls(); lcd.printf("Start?\n"); while(1) { if (setbutton.rising()) { state = set(state); } else if (gobutton.rising()) { maketea(state); } } } int set(int currentstate) { //For setting which mode to use t.start(); //Inactivity timer lcd.cls(); displaystate(currentstate); while (gobutton != 1 and t < 10) { if (setbutton.rising()) { currentstate = currentstate + 1; //Advances state if (currentstate > 9) { //Loops back to start currentstate = 1; } lcd.cls(); displaystate(currentstate); //Update current state wait(0.25); //Debounce t.reset(); t.start(); //Reset inactivity timer } } lcd.cls(); lcd.printf("Start?\n"); //Reset screen return currentstate; } int displaystate(int currentstate) { //Displays current setting if (currentstate == 1) { lcd.printf("1 min - dip\n"); } else if (currentstate == 2) { lcd.printf("2 mins - dip\n"); } else if (currentstate == 3) { lcd.printf("3 mins - dip\n"); } else if (currentstate == 4) { lcd.printf("1 min - no dip\n"); } else if (currentstate == 5) { lcd.printf("2 mins - no dip\n"); } else if (currentstate == 6) { lcd.printf("3 mins - no dip\n"); } else if (currentstate == 7) { lcd.printf("4 mins - no dip\n"); } else if (currentstate == 8) { lcd.printf("5 mins - no dip\n"); } else if (currentstate == 9) { lcd.printf("QTEST\n"); } return 0; } int maketea(int currentstate) { //Main teamaking routine lcd.cls(); lcd.printf("Brewing...\n"); displaystate(currentstate); //Display status int time; int dip; if (currentstate == 1) { //Initialise time and dipping status time = 60; dip = 1; } else if (currentstate == 2) { time = 120; dip = 1; } else if (currentstate == 3) { time = 180; dip = 1; } else if (currentstate == 4) { time = 60; dip = 0; } else if (currentstate == 5) { time = 120; dip = 0; } else if (currentstate == 6) { time = 180; dip = 0; } else if (currentstate == 7) { time = 240; dip = 0; } else if (currentstate == 8) { time = 300; dip = 0; } else if (currentstate == 9) { time = 10; dip = 0; } myservo = 0; //Dunk teabag t.start(); //Start tea timer while (t < time) { //While there's still time left if (dip == 1) { //If dipping, dip teabag wait(1); dipping(); } if (gobutton.rising()) { //If cancelling lcd.cls(); lcd.printf("Press again to\n"); lcd.printf("stop brewing.\n"); t2.start(); //Start (secondary) inactivity timer while (t2 <= 5) { if (gobutton.rising()) { time = 0; //Resets time to run to 0, thus pulling out of main while loop break; //Pulls out of this loop } } t2.reset(); lcd.cls(); lcd.printf("Brewing...\n"); displaystate(currentstate); //Reset screen to brewing } } t.reset(); myservo = 1; lcd.cls(); lcd.printf("Done!\n"); lcd.printf("Reset?\n"); t.start(); while ((!setbutton.rising()) && (!gobutton.rising())) { //If not reset in 90 seconds, alert if (t > 90) { alert(); } } alertoff(); lcd.cls(); lcd.printf("Start?\n"); //Reset wait(1); return 0; } int dipping() { //Dipping routine myservo = 0.5; wait(1); myservo = 0; return 0; } int alert() { //Alert using on-board LEDs int y; for ( y = 0; y != 1; y++ ) { leda = 1; ledb = 0; ledc = 1; ledd = 0; wait(0.2); leda = 0; ledb = 1; ledc = 0; ledd = 1; wait(0.2); } return 0; } int alertoff() { //Resets on-board LEDs to 0 leda = 0; ledb = 0; ledc = 0; ledd = 0; return 0; }