#include <main.h>


unsigned int a=10;					//define variables.
unsigned int flag=0;
unsigned int selection=0;
unsigned int sugar=0;
unsigned int milk=0;
									//define variables end

#INT_TIMER2
void  TIMER2_isr(void) 
{
    a--;												// increment a in the interrupt routine half second
	if(!a)	flag+=0x01;


}
#define m_tea	PIN_C0
#define m_cof	Pin_C1
#define m_choc	PIN_C2
#define m_milk  Pin_C3
#define m_sug	Pin_C4
#define m_water PIN_C5
									// prototypes for our functions
void func1();						// display menu
unsigned int func2(unsigned int);	// allow button selection --  pass in mask and return button value
void func3();						// ask for sugar input
void func4();						// ask for milk input
void func5();						// display selections
void func6();						// dispanse the beverage 1sec for tea/choc/coffee 1 sec per sugar, 1 sec for milk and 10secs for water

									// prototypes for our functions end
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7



#include <lcd.c>



void main()
{
	unsigned int dispense=0;

	setup_timer_2(T2_DIV_BY_16,178,14);				//716 us overflow, 10.0 ms interrupt


	enable_interrupts(INT_TIMER2);					// enable timer 2 overflow interrupt
	enable_interrupts(GLOBAL);						// enable global interrupts
	
   lcd_init();										// initiate LCD

	while(TRUE)										// Main program while loop
	{

		dispense=0;
		while(dispense !=1)
			{
					func1();								// display selection screen
					selection=func2(0x07);					// call function 2 too get button value
					func3();								// set screen for sugar
					sugar=func2(0x07);						// call function 2 too get button value
					func4();								// set screen for sugar
					milk=func2(0x05);						// call function 2 too get button value
					func5();								// display selection
					dispense=func2(0x03);					// call function 2 too get button value
			}
			printf(lcd_putc,"\f dispensing");
			func6();										// dispense
			printf(lcd_putc,"\f ");
			lcd_gotoxy(21,1);
			printf(lcd_putc,"Take your drink");

			delay_ms(5000);


	}												// main program while loop end
	

}													// END PROGRAM

void func6()						// dispense the beverage 1sec for tea/choc/coffee 1 sec per sugar, 1 sec for milk and 10secs for water
	{
		switch(selection)
			{
				case 1: output_high(m_tea);				// dispanse tea
						delay_ms(1000);
						output_low(m_tea);
						break;
				case 2: output_high(m_cof);				// dispanse coffee
						delay_ms(1000);
						output_low(m_cof);
						break;
				case 4: output_high(m_choc);				// dispanse chocolate
						delay_ms(1000);
						output_low(m_choc);
						break;
			default   : break;
			}
		switch(sugar)
			{
				case 2: output_high(m_sug);				// dispanse tea
						delay_ms(1000);
						output_low(m_sug);
				case 1: output_high(m_sug);				// dispanse coffee
						delay_ms(1000);
						output_low(m_sug);
						break;
			default   : break;
	
			}
		output_high(m_water);							// dispense water
		delay_ms(10000);
		output_low(m_water);	
		if(milk==1)
			{
				output_high(m_milk);					// dispense milk
				delay_ms(1000);
				output_low(m_milk);
			}


	}

void func5(void)														// confirm selection
	{
		switch (selection)												// print line 1
				{
					case 1: 		printf(lcd_putc,"\f  Tea");
									break;
					case 2:			printf(lcd_putc,"\f  Coffee");
									break;
					case 4:			printf(lcd_putc,"\f  Chocolate");
									break;
					default:		break;
				}
		lcd_gotoxy(1,2);												// get ready to display line 2
		switch (sugar)
				{
					case 1: 		printf(lcd_putc,"  1 Sugar");
									break;
					case 2:			printf(lcd_putc,"  2 Sugars");
									break;
					case 4:			printf(lcd_putc,"  no Sugar");
									break;
					default:		break;
				}
		lcd_gotoxy(21,1);												// get ready to display line 3
		switch (milk)
				{
					case 1: 		printf(lcd_putc,"  Milk");
									break;
					case 4:			printf(lcd_putc,"  No Milk");
									break;
					default:		break;
				}
		lcd_gotoxy(21,2);	
		printf(lcd_putc,"1 confirm 2 cancel");		
	}

void func4(void)
	{
		printf(lcd_putc,"\f1.. YES");

		lcd_gotoxy(21,1);
		printf(lcd_putc,"3.. NO ");
		lcd_gotoxy(21,2);
		printf(lcd_putc,"MILK PLEASE SELECT");
		

	}
void func3(void)
	{
		printf(lcd_putc,"\f1.. 1 sugar");
		lcd_gotoxy(1,2);
		printf(lcd_putc,"2.. 2 sugars");
		lcd_gotoxy(21,1);
		printf(lcd_putc,"3.. no sugar");
		lcd_gotoxy(25,2);
		printf(lcd_putc,"PLEASE SELECT");
		

	}

unsigned int func2(unsigned int mask)
	{
		unsigned int buttons=0;
		while(input_a());
		while (!buttons)
			{
				buttons = input_a();						// fetch port A status
				buttons = buttons & mask;					// remove any unwanted buttons or signals
			}
		return (buttons);

	}


void func1(void)
	{
															// display primary screen
		printf(lcd_putc,"\f1.. Tea");
		lcd_gotoxy(1,2);
		printf(lcd_putc,"2.. Coffee");
		lcd_gotoxy(21,1);
		printf(lcd_putc,"3.. Bovril");
		lcd_gotoxy(25,2);
		printf(lcd_putc,"PLEASE SELECT");

	}

