Фрагмент исходного кода

Программный модуль для мультиварки RMC-M800S

v1.12


ПО является неотъемлемой частью мультиварки RMC-M800S, отдельно потребителю не поставляется и эксплуатируется только в составе устройства.

//
//RMC-M800S
//

//v1.12
//

#include "common.h"

#include "cooking.h"
#include "cookprog.h"

#include "clk.h"
#include "ind.h"
#include "ind_service.h"
#include "adc.h"
#include "heat.h"
#include "keyb.h"
#include "buz.h"
#include "temp.h"
#include "err.h"	//ash
#include "test.h"

U16	iMilliSec, iSecond;
U16	iAnalizeTermInterval; 		// Интервал регулирования сек

U16	iCurTime;					// текущее время готовки в минутах

U8	cStage;						// этапы готовки
U8	cCookPWM;					// счетчик ШИМ нагрева макс 6
U16	iLastPostPonementTime;		// время Отложенного старта

U8	cOldMode, cMode;

B8 bChangeTime, bChangeTimeTemp;
B8 bLockEnabled;	

U8 stateCT;

// Клавиатура
U8	cKeyBuf[16];				// буфере нажатых клавиш
U8	cKeyHead;
U8	cTimeToStandBy;	

U8 	cKey, cOldKey, cKeyRepeat;
I16	iTimeKeyRepeat;				// Знаковое!!!

U8	cClrPairing;

//ash
U8 /*iOldTermTop,*/ iTermTop, iTermBot;	//(ash) U16->U8

//(ash)
U16 Cook_TempErrBlockTimer;

////////////////////////////////////////////////////////////////

//перенес из ind.h (ash)
static void _Ind_PutProgram_On(U8 num);
static void _Ind_PutProgram_Off(U8 num);
static void _Ind_PutProduct(U8 num);

////////////////////////////////////////////////////////////////

//----------------------------------------------------------
void Cooking_init(void)
{
	U8 i;
	
///	GetTemperatureCalibration();
	cOldMode = 0xFF;
	cMode = MODE_STANDBY;			// режим по включению

	Buz_On();
	for(i = 1; i < 13; i++) _Ind_PutProgram_On(i);
	Ind_LED_On(VEGETABLES_LED);	Ind_LED_On(FISH_LED);	Ind_LED_On(MEAT_LED);
	Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
	Ind_LED_On(DEF_START_1_LED); Ind_LED_On(DEF_START_2_LED);
	Ind_LED_On(TEMP1_LED); Ind_LED_On(TEMP2_LED);
	Ind_LED_On(HEAT_LED); Ind_LED_On(START_LED); Ind_LED_On(LOCK_LED);
	Ind_PutInt(8888); Ind_MP_On();
	Ind_Release();
	Clk_Delay_ms(250);	//ash
	Buz_Off();
	Clk_Delay_ms(250);	//ash
}

// В основном цикле возможные ркжимы работы
void Cooking(void)
{	
	if(cMode == MODE_STANDBY)						ModeStandBy();
	else if(cMode == MODE_COOKING)					ModeCooking();
	else if(cMode == MODE_INPUT_PROGRAM)			ModeInputProgram();
	else if(cMode == MODE_INPUT_COOKTIME)			ModeInputCookTime();
//	else if(cMode == MODE_INPUT_COOKTIME_MSL)		ModeInputCookTimeMSL();
	else if(cMode == MODE_INPUT_POSTTIME)			ModeInputPostponementTime();
	else if(cMode == MODE_INPUT_TEMP)				ModeInputTemperature();
//	else if(cMode == MODE_INPUT_TEMP_MSL)			ModeInputTemperatureMSL();
	else if(cMode == MODE_PAIRING)					ModePairing();
	else if (cMode == MODE_VER)						ModeVer();
	else if (cMode == MODE_TEST)					ModeTest();
	else if (cMode == MODE_ERROR)					ModeError();
}

////////////////////////////////////////////////////////////////

void SetModeTest(void)
{
	cOldMode = cMode = MODE_TEST;
	Test_Start();
}

void ModeTest(void)
{
	Test();
}

////////////////////////////////////////////////////////////////

void SetModeError(void)
{	
	cOldMode = cMode = MODE_ERROR;
	cStage = STAGE_NONE;

	AllWarmOff();

	DisableIndUpdate();
	Ind_Clr();
	Ind_PutInt(Err_GetError());
	Ind_PutDig1(SEG7_E);
	Ind_Release();
}

void ModeError(void)
{
	if(cOldMode != cMode) SetModeError();
}

////////////////////////////////////////////////////////////////

void SetModeVer(void)
{
	cOldMode = cMode = MODE_VER;

	Ind_Clr();
	Ind_PutDig1(FIRMWARE_VER_SEG7_1);
	Ind_PutDig2(FIRMWARE_VER_SEG7_2);
	Ind_PutDig3(FIRMWARE_VER_SEG7_3);
	Ind_PutDig4(FIRMWARE_VER_SEG7_4);
	Ind_MP_On();
	if(bLockEnabled) Ind_LED_On(LOCK_LED);
	Ind_Release();
}

void ModeVer(void)
{
	if(Keyb_GetKey() == LOCK_KEY)
	{
		SetModeTest();
		return;
	}

	if(Keyb_GetOnKey() != SELECT_KEY) SetModeStandBy();
}

////////////////////////////////////////////////////////////////

void SetModeStandBy(void)
{	
	cMode = MODE_STANDBY;
	cOldMode = cMode;
  cStage = STAGE_NONE;
	AllWarmOff();
	Ind_Clr();
	Ind_PutDig1(SEG7_MINUS);
	Ind_PutDig2(SEG7_MINUS);
	Ind_PutDig3(SEG7_MINUS);
	Ind_PutDig4(SEG7_MINUS);
	if(bLockEnabled) Ind_LED_On(LOCK_LED);	//добавил индикацию лока (ash)
	Ind_Release();
	SetMainProgram(1);
	DisableIndUpdate();
}

void ModeStandBy(void)
{
	if(cOldMode != cMode)
	{
		SetModeStandBy();
	}

	if(KbHit())
	{
		InKey();
		if(cKey == HEAT_KEY) 
		{
			ShortBeep();
			SetMainProgram(0);
			bProgramNumberChanged = FALSE;
			cMode = MODE_COOKING;			
			SetStage(STAGE_KEEPWARM);
		}		
		else if(cKey == MENU_KEY)			 
		{
			ShortBeep();
			cMode = MODE_INPUT_PROGRAM;
		}		
		else if(cKey == MULTICOOK_KEY)			 
		{
			ShortBeep();
			SetMainProgram(0);
			bProgramNumberChanged = FALSE;
			cMode = MODE_INPUT_TEMP;			
		}		

	}
	if(Keyb_GetOnKey() == TIMER_KEY
		&& Keyb_GetOnKeyTime() >= 1000 && !Keyb_bLongPress
		&& cMode != MODE_PAIRING)
	{
			Keyb_bLongPress = TRUE;
			ShortBeep();
			Clk_Delay_ms(250);
			ShortBeep();
			Clk_Delay_ms(250);
			ShortBeep();
			cClrPairing = 0;
			cMode = MODE_PAIRING;
			return;
	}
	if(Keyb_GetOnKey() == START_KEY
		&& Keyb_GetOnKeyTime() >= 2000 && !Keyb_bLongPress
		&& !cClrPairing)
	{
			Keyb_bLongPress = TRUE;
			LongBeep(3);	
			cClrPairing = TRUE;
			return;
	}

	if(Keyb_GetOnKey() == SELECT_KEY && Keyb_GetOnKeyTime() >= 200)
	{
		SetModeVer();
		return;
	}
}

void SetModePairing(void)
{	
	cMode = MODE_PAIRING;
	cOldMode = cMode;
	stateCT = 0; BlinkPairing();
	SetIndUpdate(BlinkPairing, 50);	//(ash)
	cTimeToStandBy = 0;
}

void ModePairing(void)
{
	if(cOldMode != cMode)
	{
		SetModePairing();
	}
	
	if(cTimeToStandBy > 10)
	{
		cMode = MODE_STANDBY;			
	}	
	
	if(KbHit())
	{
		InKey();
		ShortBeep();
		cMode = MODE_STANDBY;				
	}
}

//----------------------------------------------------------
// Режим выбора программы
void SetModeInputProgram(void)
{
	cMode = MODE_INPUT_PROGRAM;
	cOldMode = cMode;
	bProgramNumberChanged = FALSE;
	cStage = STAGE_NONE;
	stateCT = 0; BlinkInpProgram();
	SetIndUpdate(BlinkInpProgram, 50);	//(ash)
	cTimeToStandBy = 0;
}	

void ModeInputProgram(void)
{
	if(cOldMode != cMode)
	{
		SetModeInputProgram();
	}
	
	if(bProgramNumberChanged)
	{
		bProgramNumberChanged = FALSE;
		if(CP_MainProgram.cProgramNumber == 0)
			cMode = MODE_INPUT_TEMP;								// Переход на Мултиповар
		else
		{	
			stateCT = 0; BlinkInpProgram();
		}			
	}		
	if(bProuctNumberChanged)
	{
		bProuctNumberChanged = FALSE;
		BlinkInpProgram();
	}		
	
	if(cTimeToStandBy > 60)
	{
		cMode = MODE_STANDBY;			
	}	

	if(KbHit())
	{
		InKey();
		if(cKey == MENU_KEY)			 
		{
			ShortBeep();
			if(++CP_MainProgram.cProgramNumber > 12)
				CP_MainProgram.cProgramNumber = 1;	
			SetMainProgram(CP_MainProgram.cProgramNumber);
			bProgramNumberChanged = FALSE;
			SetMainProuct(CP_MainProgram.cProductNumber);	
			bProuctNumberChanged = FALSE;
			stateCT = 0; BlinkInpProgram();
			RstIndUpdate();				
		}		
		else if(cKey == SELECT_KEY)			 
		{
			ShortBeep();
			if(GetMainProuctCount() == 3)				
			{
				if(CP_MainProgram.cProductNumber == 3) 			CP_MainProgram.cProductNumber = 2;	
				else if(CP_MainProgram.cProductNumber == 2) CP_MainProgram.cProductNumber = 1;	
				else																				CP_MainProgram.cProductNumber = 3;	
				SetMainProuct(CP_MainProgram.cProductNumber);	
				bProuctNumberChanged = FALSE;
				_Ind_PutProduct(CP_MainProgram.cProductNumber);
				Ind_Release();
			}			
		}	
		else if(cKey == TIMER_KEY)			 
		{
			ShortBeep();
			cMode = MODE_INPUT_COOKTIME;
		}
		else if(cKey == MULTICOOK_KEY)			 
		{
			ShortBeep();
			SetMainProgram(0);
			bProgramNumberChanged = FALSE;
			cMode = MODE_INPUT_TEMP;			
		}		
		else if(cKey == HEAT_KEY) 
		{
			ShortBeep();
			cMode = MODE_STANDBY;			
		}		
		else if(cKey == START_KEY) 
		{
			ShortBeep();
			cMode = MODE_COOKING;			
		}		
	}
}

//----------------------------------------------------------
// Режим ввода времени готовки
void SetModeInputCookTime(void)
{
	cMode = MODE_INPUT_COOKTIME;
	cOldMode = cMode;
	stateCT = 0; BlinkInpCookTime();
	SetIndUpdate(BlinkInpCookTime, 50);	//((ash)
	cTimeToStandBy = 0;
}	

void ModeInputCookTime(void)
{
	U8 st;
	
	if(cOldMode != cMode)
	{
		SetModeInputCookTime();
	}
	
	if(bCookTimeChanged)
	{	
		bCookTimeChanged = FALSE;
		stateCT = 0; BlinkInpCookTime();
	}	

	if(cTimeToStandBy > 60)
	{
		cMode = MODE_STANDBY;	
	}	

	if(KbHit())
	{
		InKey();
		if(cKey == MENU_KEY)			 
		{
			ShortBeep();
			if(++CP_MainProgram.cProgramNumber > 12)
				CP_MainProgram.cProgramNumber = 1;	
			SetMainProgram(CP_MainProgram.cProgramNumber);
			bProgramNumberChanged = FALSE;
			SetMainProuct(CP_MainProgram.cProductNumber);	
			bProuctNumberChanged = FALSE;
			stateCT = 0; BlinkInpProgram();
			RstIndUpdate();				
			cMode = MODE_INPUT_PROGRAM;	
		}		
		else if(cKey == PLUS_KEY)			 
		{
			if(CP_MainProgram.iCookTime < 60) st = CP_MainProgram.cStepTime[0];
			else 															st = CP_MainProgram.cStepTime[1];
			if(CP_MainProgram.iCookTime <= CP_MainProgram.iMaxTime-st)
			{	
				CP_MainProgram.iCookTime += st;
			}			
			else
			{	
				CP_MainProgram.iCookTime = CP_MainProgram.iMinTime;
			}	
			stateCT = 0; BlinkInpCookTime();
			RstIndUpdate();				
		}	
		else if(cKey == MINUS_KEY)			 
		{
			if(CP_MainProgram.iCookTime <= 60) st = CP_MainProgram.cStepTime[0];
			else 															st = CP_MainProgram.cStepTime[1];
			if(CP_MainProgram.iCookTime >= CP_MainProgram.iMinTime+st)
			{	
				CP_MainProgram.iCookTime -= st;
			}			
			else
			{	
				CP_MainProgram.iCookTime = CP_MainProgram.iMaxTime;
			}			
			stateCT = 0; BlinkInpCookTime();
			RstIndUpdate();				
		}	
		else if(cKey == TIMER_KEY)			 
		{
			if(CP_MainProgram.bPostPonementEnabled)
			{
				ShortBeep();
				cMode = MODE_INPUT_POSTTIME;
			}	
		}
		else if(cKey == MULTICOOK_KEY)			 
		{
			ShortBeep();
			SetMainProgram(0);
			bProgramNumberChanged = FALSE;
			cMode = MODE_INPUT_TEMP;			
		}		
		else if(cKey == HEAT_KEY) 
		{
			ShortBeep();
			cMode = MODE_STANDBY;			
		}		
		else if(cKey == START_KEY) 
		{
			ShortBeep();
			cMode = MODE_COOKING;			
		}		
	}
}


// Режим ввода времени отложенного старта
void SetModeInputPostponementTime(void)
{
	cMode = MODE_INPUT_POSTTIME;
	cOldMode = cMode;
//	CP_MainProgram.iPostPonementTime = 60;
	stateCT = 0; BlinkInpPostponementTime();
	SetIndUpdate(BlinkInpPostponementTime, 50);	//(ash)
	cTimeToStandBy = 0;
}

void ModeInputPostponementTime(void)
{
	if(cOldMode != cMode)
	{
		SetModeInputPostponementTime();
	}

	if(bPostPonementTimeChanged)
	{	
		bPostPonementTimeChanged = FALSE;
		BlinkInpPostponementTime();
	}	

	if(cTimeToStandBy > 60)
	{
		cTimeToStandBy = 0;
		cMode = MODE_STANDBY;	
	}	

	if(KbHit())
	{
		InKey();
		if(cKey == MENU_KEY)			 
		{
			ShortBeep();
			if(++CP_MainProgram.cProgramNumber > 12)
				CP_MainProgram.cProgramNumber = 1;	
			SetMainProgram(CP_MainProgram.cProgramNumber);
			bProgramNumberChanged = FALSE;
			SetMainProuct(CP_MainProgram.cProductNumber);	
			bProuctNumberChanged = FALSE;
			stateCT = 0; BlinkInpProgram();
			RstIndUpdate();				
			cMode = MODE_INPUT_PROGRAM;	
		}		
		else if(cKey == PLUS_KEY)			 
		{
			if(CP_MainProgram.iPostPonementTime < 24*60-5)
			{	
				CP_MainProgram.iPostPonementTime += 5;
			}			
			else
			{	
				CP_MainProgram.iPostPonementTime = 0;
			}			
			stateCT = 0; BlinkInpPostponementTime();
			RstIndUpdate();				
		}	
		else if(cKey == MINUS_KEY)			 
		{
			if(CP_MainProgram.iPostPonementTime > 5)
			{	
				CP_MainProgram.iPostPonementTime -= 5;
			}			
			else
			{	
				CP_MainProgram.iPostPonementTime = 24*60;
			}			
			stateCT = 0; BlinkInpPostponementTime();
			RstIndUpdate();				
		}	
		else if(cKey == TIMER_KEY)			 
		{
			CP_MainProgram.iPostPonementTime = 0;
			ShortBeep();
			cMode = MODE_INPUT_COOKTIME;
		}
		else if(cKey == MULTICOOK_KEY)
		{
			ShortBeep();
			SetMainProgram(0);
			bProgramNumberChanged = FALSE;
			cMode = MODE_INPUT_TEMP;			
		}		
		else if(cKey == HEAT_KEY) 
		{
			ShortBeep();
			cMode = MODE_STANDBY;			
		}		
		else if(cKey == START_KEY) 
		{
			ShortBeep();
			cMode = MODE_COOKING;			
		}		
	}
}

//-------------------------------------------------------
void SetModeInputTemperature(void)
{
	cMode = MODE_INPUT_TEMP;
	cOldMode = cMode;
	stateCT = 0; BlinkInpTemperature();
	SetIndUpdate(BlinkInpTemperature, 50);	//(ash)
	cTimeToStandBy = 0;
}

void ModeInputTemperature(void)
{
	if(cOldMode != cMode)
	{
		SetModeInputTemperature();
	}
	
	if(bCookTempChanged)
	{	
		bCookTempChanged = FALSE;
		stateCT = 0; BlinkInpTemperature();
		RstIndUpdate();				
	}

	if(cTimeToStandBy > 60)
	{
		cMode = MODE_STANDBY;			
	}	
	
	if(KbHit())
	{
		InKey();
		if(cKey == MENU_KEY)			 
		{
			ShortBeep();
			SetMainProgram(1);
			bProgramNumberChanged = FALSE;
			cMode = MODE_INPUT_PROGRAM;	
		}		
		else if(cKey == PLUS_KEY)			 
		{
			if(CP_MainProgram.cCookTemp <= CP_MainProgram.cMaxValueTemp-5)	//поменял < на <= (ash)
			{	
				CP_MainProgram.cCookTemp += 5;
				CP_MainProgram.cBotTempWarm += 5;		// Нагрев до температуры (разгон)
//(ash)				CP_MainProgram.cBotTempStat += 5;		// Выход на статику до температур
				stateCT = 0; BlinkInpTemperature();
				RstIndUpdate();				
			}
		}	
		else if(cKey == MINUS_KEY)			 
		{
			if(CP_MainProgram.cCookTemp >= CP_MainProgram.cMinValueTemp+5)	//поменял > на >= (ash)
			{	
				CP_MainProgram.cCookTemp -= 5;
				CP_MainProgram.cBotTempWarm -= 5;		// Нагрев до температуры (разгон) 
//(ash)				CP_MainProgram.cBotTempStat -= 5;		// Выход на статику до температур 
				stateCT = 0; BlinkInpTemperature();
				RstIndUpdate();				
			}			
		}
		else if(cKey == TIMER_KEY)			 
		{
			ShortBeep();
			cMode = MODE_INPUT_COOKTIME;
		}
		else if(cKey == HEAT_KEY) 
		{
			ShortBeep();
			cMode = MODE_STANDBY;			
		}		
		else if(cKey == START_KEY) 
		{
			ShortBeep();
			cMode = MODE_COOKING;			
		}		
	}
}

//--------------------------------------------------------
void SetModeCooking(void)
{
  cMode = MODE_COOKING;
  cOldMode = cMode;
	if(cStage != STAGE_KEEPWARM)	// Подогрев
	{	
		cStage = STAGE_NONE;
		ResetCurTime();
		Ind_Clr();
		_Ind_PutProduct(CP_MainProgram.cProductNumber);
		_Ind_PutProgram_On(CP_MainProgram.cProgramNumber);       //_Ind_PutProgram_Off ??????? ?? _Ind_PutProgram_On

		if(CP_MainProgram.cProgramNumber == 0 && CP_MainProgram.cCookTemp < 75)		// Мултиповар
			CP_MainProgram.bKeepWarmEnabled = FALSE;
		else
		{	
			if(CP_MainProgram.bKeepWarmEnabled)
				Ind_LED_On(HEAT_LED);
		}		
		Ind_LED_On(START_LED);
		if(CP_MainProgram.iPostPonementTime == 0)
		{	
			Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		}
		else	
		{	
			Ind_LED_On(DEF_START_1_LED); Ind_LED_On(DEF_START_2_LED);
		}
		Ind_Release();
	}
	//(ash)
	//если температура готовки ниже текущей
	if(CP_MainProgram.cCookTemp < Temp_GetBotTemp())
			Cook_TempErrBlockTimer = COOK_TEMP_ERR_BLOCK_TIME;
	else	Cook_TempErrBlockTimer = 0;
}

void RestoreModeCooking(void)
{
  cMode = MODE_COOKING;
  cOldMode = cMode;
	Ind_Clr();
	_Ind_PutProduct(CP_MainProgram.cProductNumber);
	_Ind_PutProgram_On(CP_MainProgram.cProgramNumber);       //_Ind_PutProgram_Off ??????? ?? _Ind_PutProgram_On

	if(CP_MainProgram.cProgramNumber == 0 && CP_MainProgram.cCookTemp < 75)		// Мултиповар
		CP_MainProgram.bKeepWarmEnabled = FALSE;
	else
	{	
		if(CP_MainProgram.bKeepWarmEnabled)
			Ind_LED_On(HEAT_LED);
	}		
	Ind_LED_On(START_LED);
	if(CP_MainProgram.iPostPonementTime == 0)
	{	
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
	}
	else	
	{	
		Ind_LED_On(DEF_START_1_LED); Ind_LED_On(DEF_START_2_LED);
	}
	SetIndUpdate(BlinkMP, 50);	//(ash)

	Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
	Ind_Release();
}

void ModeCooking(void)
{
	if(cOldMode != cMode)
	{
		SetModeCooking();
		StartCooking();
	}	
	if(KbHit())
	{
		InKey();
		if(cKey == HEAT_KEY) 
		{
			ShortBeep();
			cMode = MODE_STANDBY;			
		}
		else if(cKey == START_KEY) 
		{
//			ShortBeep();	//(ash)
			if(cStage == STAGE_WAIT)					// Ожидание закладки продуктов
			{
				ShortBeep();	//(ash)
				SetStage(STAGE_WARM);
			}
			else
			{
				if(CP_MainProgram.cKeepWarmTime && (cStage != STAGE_KEEPWARM)) //вкл/выкл подогрев только на программах, где он предусмотрен (ash)
				{
					ShortBeep();	//(ash)
					if(CP_MainProgram.bKeepWarmEnabled)
					{	
						CP_MainProgram.bKeepWarmEnabled = FALSE;
						Ind_LED_Off(HEAT_LED);
					}
					else
					{	
						CP_MainProgram.bKeepWarmEnabled = TRUE;
						Ind_LED_On(HEAT_LED);
					}
				}
			}
		}


#ifdef TEMP_IND_EN
		//индикация температуры датчиков

		else if(cKey == MINUS_KEY)
		{
			Ind_PutInt(Temp_GetBotTemp());
			Ind_Release();
			Clk_Delay_ms(1000);	//ash

		}

		else if(cKey == PLUS_KEY)
		{
			Ind_PutInt(Temp_GetTopTemp());
			Ind_Release();
			Clk_Delay_ms(1000);	//ash

		}
#endif

////////////////////////////////////////////////////////////////

	}
	ProcessCooking();
	if(bChangeTime) ShowCookingTime();
	if(bChangeTimeTemp) ShowMultiCookTime();
}

void	ShowCookingTime(void)
{
	U8 hour, minute;
	U16	iIndTime;
	
	bChangeTime = FALSE;
	if(cStage == STAGE_POSTPONEMENT)
		iIndTime = GetRemainingTime(CP_MainProgram.iPostPonementTime);
	else if(cStage == STAGE_BOOST || cStage == STAGE_WAIT)
	{
		iIndTime = CP_MainProgram.iCookTime;
	}	
	else if(cStage == STAGE_WARM || cStage == STAGE_STAT)
		iIndTime = GetRemainingTime(CP_MainProgram.iCookTime);
	else
		iIndTime = iCurTime;
	hour = iIndTime / 60;
	minute = iIndTime % 60;
	Ind_PutTime(hour, minute);
	if(bLockEnabled) Ind_LED_On(LOCK_LED);
	else						 Ind_LED_Off(LOCK_LED);
	Ind_Release();
}

void	ShowMultiCookTime(void)
{
	U8 hour, minute;
	U16	iIndTime;
	
	bChangeTimeTemp = FALSE;
	iIndTime = GetRemainingTime(CP_MainProgram.iCookTime);
	if(stateCT < 5)
	{	
		Ind_LED_Off(TEMP1_LED); Ind_LED_Off(TEMP2_LED);
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		hour = iIndTime / 60;
		minute = iIndTime % 60;
		Ind_PutTime(hour, minute);
	}		
	else
	{
		Ind_PutInt(CP_MainProgram.cCookTemp);
		Ind_LED_Off(TIMER_1_LED); Ind_LED_Off(TIMER_2_LED);
		Ind_LED_On(TEMP1_LED); Ind_LED_On(TEMP2_LED);
		Ind_MP_Off();
	}
	if(bLockEnabled) Ind_LED_On(LOCK_LED);
	else						 Ind_LED_Off(LOCK_LED);
	Ind_Release();
}	

//-----------------------------------------
void	IsModeLock(void)
{
	if(cKey == LOCK_KEY) 
	{
		ShortBeep();		//добавил звук (ash)
		if(bLockEnabled)
		{	
			bLockEnabled = FALSE;
			Ind_LED_Off(LOCK_LED);
			Ind_Release();
		}	
		else
		{		
			bLockEnabled = TRUE;
			Ind_LED_On(LOCK_LED);
			Ind_Release();
		}	
	}
	if(bLockEnabled) cKey = 255;		// Запрет дальнейше обработки
}

//-----------------------------------------
void	BlinkInpProgram(void)
{
	U8 i, hour, minute;
	
	switch(stateCT)
	{
	case 0:
		Ind_Clr();
		_Ind_PutProduct(CP_MainProgram.cProductNumber);
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		hour = CP_MainProgram.iCookTime / 60;
		minute = CP_MainProgram.iCookTime % 60;
		Ind_PutTime(hour, minute);
		for(i = 1; i < 13; i++) _Ind_PutProgram_On(i);
		_Ind_PutProgram_Off(CP_MainProgram.cProgramNumber);
		Ind_LED_On(START_LED);
		Ind_MP_On();
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 1;
		break;
	case 1:
		Ind_Clr();
		_Ind_PutProduct(CP_MainProgram.cProductNumber);
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		hour = CP_MainProgram.iCookTime / 60;
		minute = CP_MainProgram.iCookTime % 60;
		Ind_PutTime(hour, minute);
		for(i = 1; i < 13; i++) _Ind_PutProgram_On(i);
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 0;
		break;
	}
}	

void	BlinkInpCookTime(void)
{
	U8 hour, minute;
	
	switch(stateCT)
	{
	case 0:
		Ind_Clr();
		_Ind_PutProduct(CP_MainProgram.cProductNumber);
		_Ind_PutProgram_On(CP_MainProgram.cProgramNumber);
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		Ind_LED_On(START_LED);
		hour = CP_MainProgram.iCookTime / 60;
		minute = CP_MainProgram.iCookTime % 60;
		Ind_PutTime(hour, minute);
		Ind_MP_On();
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 1;
		break;
	case 1:
		Ind_Clr();
		_Ind_PutProduct(CP_MainProgram.cProductNumber);
		_Ind_PutProgram_On(CP_MainProgram.cProgramNumber);
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 0;
		break;
	}
}	

void	BlinkInpPostponementTime(void)
{
	U8 hour, minute;
	
	switch(stateCT)
	{
	case 0:
		Ind_Clr();
		_Ind_PutProduct(CP_MainProgram.cProductNumber);
		_Ind_PutProgram_On(CP_MainProgram.cProgramNumber);
		Ind_LED_On(DEF_START_1_LED); Ind_LED_On(DEF_START_2_LED);
		Ind_LED_On(START_LED);
		hour = CP_MainProgram.iPostPonementTime / 60;
		minute = CP_MainProgram.iPostPonementTime % 60;
		Ind_PutTime(hour, minute);
		Ind_MP_On();
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 1;
		break;
	case 1:
		Ind_Clr();
		_Ind_PutProduct(CP_MainProgram.cProductNumber);
		_Ind_PutProgram_On(CP_MainProgram.cProgramNumber);
		Ind_LED_On(DEF_START_1_LED); Ind_LED_On(DEF_START_2_LED);
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 0;
		break;
	}
}	



void	BlinkInpTemperature(void)
{
	switch(stateCT)
	{
	case 0:
		Ind_Clr();
		Ind_PutInt(CP_MainProgram.cCookTemp);
		Ind_LED_On(TEMP1_LED); Ind_LED_On(TEMP2_LED);
		Ind_LED_On(START_LED);
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 1;
		break;
	case 1:
		Ind_Clr();
		Ind_LED_On(TEMP1_LED); Ind_LED_On(TEMP2_LED);
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		Ind_Release();
		stateCT = 0;
		break;
	}
}

void	BlinkMP(void)
{
	static int state;
	
	switch(state)
	{
	case 0:
		Ind_MP_On();
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		state = 1;
		break;
	case 1:
		Ind_MP_Off();
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		state = 0;
		break;
  }	
	bChangeTime = TRUE;
}	

void	BlinkTimer(void)
{
	static int state;
	
	Ind_MP_On();
	switch(state)
	{
	case 0:
		Ind_LED_On(TIMER_2_LED);
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		state = 1;
		break;
	case 1:
		Ind_LED_Off(TIMER_2_LED);
		if(bLockEnabled) Ind_LED_On(LOCK_LED);
		state = 0;
		break;
  }	
	bChangeTime = TRUE;
}	

void	BlinkMultiCook(void)
{
	if(++stateCT > 11) 
			stateCT = 0;
	if(stateCT < 5)
	{
		if(stateCT & 1) Ind_MP_Off();
		else						Ind_MP_On();
	}
	else if(stateCT >= 5 && stateCT < 11)
	{
		if(cStage != STAGE_WARM && cStage != STAGE_STAT)
			stateCT = 0;
	}
	bChangeTimeTemp = TRUE;
}	

void	BlinkPairing(void)
{
	static int statep;
	
	switch(statep)
	{
	case 0:
		Ind_Clr();
		Ind_PutDig2(F_SEG|G_SEG|B_SEG|A_SEG);
		Ind_PutDig3(C_SEG|D_SEG|E_SEG|G_SEG);
		Ind_Release();
		statep = 1;
		break;
	case 1:
		Ind_Clr();
		Ind_PutDig3(F_SEG|G_SEG|B_SEG|A_SEG);
		Ind_PutDig2(C_SEG|D_SEG|E_SEG|G_SEG);
		Ind_Release();
		statep = 0;
		break;
	}
}

//--------------------------------------------------------
// вызов каждые 10ms
// времена, связанные с готовкой
void Cooking_Clk(void)
{	
	iTimeKeyRepeat++;
	if(++iMilliSec >= 100)	//(ash)>=
	{
		iMilliSec = 0;
		iAnalizeTermInterval++;
		cTimeToStandBy++;
		if(Cook_TempErrBlockTimer) Cook_TempErrBlockTimer--;
	}
}

void Cooking_Clk_1s(void)
{
	if(++iSecond >= 60)
	{
		iSecond = 0;
		iCurTime++;
	}
}

void ResetCurTime(void)
{
	iSecond = 0;
	iCurTime = 0;
}

//----------------------------------------------------------
//	Остаток времени (мин) между заданным и iCurTime
U16 GetRemainingTime(U16 time)
{
	if(iCurTime > time) return(0);
	else return(time - iCurTime);
}

//------------------------------------------------------------------------	
// Старт рабочей программы
void StartCooking(void)								
{
	if(cStage == STAGE_KEEPWARM) return;	// Подогрев
	
	if(CP_MainProgram.iPostPonementTime > 0)	SetStage(STAGE_POSTPONEMENT);	// отложенный старт
	else if(CP_MainProgram.bBoost == TRUE)		SetStage(STAGE_BOOST);			// Нагрев до кипения перед закладкой продуктов
	else										SetStage(STAGE_WARM);			// Нагрев с продуктами до рабочей температуры
}		

//------------------------------------------------------------------------
// Установка этапов готовки
void SetStage(U8 st)
{
	if(st == STAGE_POSTPONEMENT)	// Отложенный старт
	{
		SetIndUpdate(BlinkMP, 50);	//(ash)
		Ind_LED_On(DEF_START_1_LED); Ind_LED_On(DEF_START_2_LED);
		Ind_LED_Off(TIMER_1_LED); Ind_LED_Off(TIMER_2_LED);
		if(CP_MainProgram.iPostPonementTime > CP_MainProgram.iCookTime)
			iLastPostPonementTime = CP_MainProgram.iPostPonementTime - CP_MainProgram.iCookTime;
		else
			iLastPostPonementTime = 0;
		ResetCurTime();
		cStage = STAGE_POSTPONEMENT;	
	}		
	else if(st == STAGE_BOOST)		// Нагрев до кипения перед закладкой продуктов
	{
		SetIndUpdate(BlinkTimer, 50);	//(ash)
		Ind_LED_Off(DEF_START_1_LED); Ind_LED_Off(DEF_START_2_LED);
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		Ind_Release();
		ResetCurTime();
		cStage = STAGE_BOOST;	
	}		
	else if(st == STAGE_WAIT)	// Ожидание закладки продуктов
	{
		ShowCookingTime();
		cTimeToStandBy = 0;
		cStage = STAGE_WAIT;
	}		
	else if(st == STAGE_WARM)		// Нагрев с продуктами
	{
		if(CP_MainProgram.cProgramNumber > 0)	SetIndUpdate(BlinkMP, 50);			//(ash)
		else									SetIndUpdate(BlinkMultiCook, 50);	//(ash)
		Ind_LED_Off(DEF_START_1_LED); Ind_LED_Off(DEF_START_2_LED);
		Ind_LED_On(TIMER_1_LED); Ind_LED_On(TIMER_2_LED);
		Ind_Release();
		ResetCurTime();
		cStage = STAGE_WARM;
	}		
	else if(st == STAGE_STAT)		// Поддержание заданной температуры
	{
		if(CP_MainProgram.cProgramNumber > 0)	SetIndUpdate(BlinkMP, 50);			//(ash)
		else									SetIndUpdate(BlinkMultiCook, 50);	//((ash)
		cStage = STAGE_STAT;
	}		
	else if(st == STAGE_KEEPWARM)	// Подогрев
	{
		CP_MainProgram.cBotTempWarm = 0;		
		CP_MainProgram.cTopTempStat = 0;		 
//(ash)		CP_MainProgram.cBotTempStat = 0;
		SetIndUpdate(BlinkMP, 50);	//(ash)
		Ind_Clr();
		Ind_LED_On(HEAT_LED);
		Ind_Release();
		ResetCurTime();
		cStage = STAGE_KEEPWARM;
	}	
}	

//------------------------------------------------------------------------	
// Готовка
void ProcessCooking(void)								
{
//ash	U8 ct;
	
	if(cStage == STAGE_POSTPONEMENT)						// Отложенный старт
	{
		if(iCurTime >= iLastPostPonementTime)
		{
			LongBeep(3);												// Звонок
			if(CP_MainProgram.bBoost == TRUE) SetStage(STAGE_BOOST);	// Нагрев до кипения перед закладкой продуктов
			else SetStage(STAGE_WARM);									// Нагрев с продуктами
		}		
		return;
	}		

	if(cStage == STAGE_BOOST)		// Нагрев до кипения перед закладкой продуктов
	{
		if(Heating(CP_MainProgram.cCookTemp)) SetStage(STAGE_WAIT);
		return;
	}

	/*else*/ if(cStage == STAGE_WAIT)	// Ожидание закладки продуктов
	{
		if(CP_MainProgram.cProgramNumber == STEAM) SetStage(STAGE_WARM);
		else
		{
			FiveBeepTimeOut30Sec();					// 5 звонков через 30 сек	
//ash			

			Heating(CP_MainProgram.cCookTemp + 30);
		}
		return;
	}
	/*else*/ if(cStage == STAGE_WARM)								// Нагрев с продуктами до рабочей температуры 
	{
		if(Heating(CP_MainProgram.cCookTemp)) SetStage(STAGE_STAT);
		if(iCurTime >= CP_MainProgram.iCookTime)	// переход на подогрев
		{	
			ShowCookingTime();
			LongFiveBeep();
			SetStage(STAGE_KEEPWARM);
		}
		return;
	}
	/*else*/ if(cStage == STAGE_STAT)								// Поддержание рабочей температуры
	{
		Heating(CP_MainProgram.cCookTemp);
		if(iCurTime >= CP_MainProgram.iCookTime)
		{	
			ShowCookingTime();
			LongFiveBeep();
			SetStage(STAGE_KEEPWARM);
		}
		return;
	}
	/*else*/ if(cStage == STAGE_KEEPWARM)							// Подогрев 2/3 плана или 70
	{
		if(CP_MainProgram.bKeepWarmEnabled)
		{
			if(CP_MainProgram.cCookTemp < 95)	Heating(CP_MainProgram.cCookTemp*2/3);		//(ash) 70->95
			else								Heating(70);		

			if(iCurTime >= CP_MainProgram.cKeepWarmTime*60) StopCooking();
		}
		else StopCooking();
		return;
	}
}		

void FiveBeepTimeOut30Sec(void)	//  5 звонков через 30 сек конец Boost	
{
	if(cTimeToStandBy == 1)			LongFiveBeep();
 	else if(cTimeToStandBy == 31)	LongFiveBeep();
 	else if(cTimeToStandBy == 61)	LongFiveBeep();
 	else if(cTimeToStandBy == 91)	LongFiveBeep();
 	else if(cTimeToStandBy == 121)	LongFiveBeep();
 	else if(cTimeToStandBy == 151)	LongFiveBeep();
 	else if(cTimeToStandBy == 181)	LongFiveBeep();
 	else if(cTimeToStandBy == 211)	LongFiveBeep();
 	else if(cTimeToStandBy == 241)	LongFiveBeep();
 	if(cTimeToStandBy > 250)
	{
		cMode = MODE_STANDBY;			
	}	
}	

//-----------------------------------------------------
// Нагрев ШИМ 6 ступеней по 4 секунды 
BOOL Heating(U8 iTempPlan)	//(ash) U16->U8
{	
	if(iAnalizeTermInterval < 4) return(FALSE);
	iAnalizeTermInterval = 0;
	if(++cCookPWM >= 6) cCookPWM = 0;

//	iOldTermTop = iTermTop;
	iTermTop = Temp_GetTopTemp();
	iTermBot = Temp_GetBotTemp();

	//(ash) при готовке пасты с открытой крышкой кипим на полную мощность
	if(CP_MainProgram.cProgramNumber == PASTA && (cStage == STAGE_WARM || cStage == STAGE_STAT))	//(ash) готовится паста
	{
		WarmOn();
		return TRUE;
	}

	//доводим до заданной температуры
	if(iTempPlan == CP_MainProgram.cCookTemp)	//для готовки (ash)
	{
		//разгон
		if(iTermBot < CP_MainProgram.cBotTempWarm /*&& iTermTop < CP_MainProgram.cTopTempWarm*/)	//(ash)
		{
			WarmOn();
			return(FALSE);
		}

		//по верхнему датчику (используется только в диапазоне готовки 95...115гр) //(ash)
		if(CP_MainProgram.cCookTemp >= 95 && CP_MainProgram.cCookTemp <= 115)
		{
			if(/*iTermBot < CP_MainProgram.cBotTempStat ||*/ iTermTop < CP_MainProgram.cTopTempStat)
			{
				if(!Cook_TempErrBlockTimer && iTermBot > CP_MainProgram.cCookTemp + 40) Err_Stop(EMPTY_POT_ERR);	//(ash)

				if(cCookPWM	< 4 && iTermBot < CP_MainProgram.cCookTemp + 30) WarmOn();	//(ash)
				else WarmOff();
				return(FALSE);
			}
		}
	}
	else //(ash) для подогрева и пасты при ожидании закладки продуктов
	{
		if(iTermBot < iTempPlan-6)
		{
			WarmOn();
			return FALSE;
		}
	}

	//поддержание температуры (верхний датчик не используется) //(ash)
	if(iTermBot > iTempPlan+1)
	{
		WarmOff();
		return TRUE;		// достигли заданной температуры
	}
	/*else*/ if(iTermBot > iTempPlan-1)	//ash
	{
		if(cCookPWM	< 1) WarmOn();
		else WarmOff();
		return TRUE;
	}
	/*else*/ if(iTermBot > iTempPlan-2)	//ash
	{
		if(cCookPWM	< 2) WarmOn();
		else WarmOff();
		return TRUE;
	}
	/*else*/ if(iTermBot > iTempPlan-3)	//ash
	{
		if(cCookPWM	< 3) WarmOn();
		else WarmOff();
		return TRUE;
	}
	if(cCookPWM	< 4) WarmOn();
	else WarmOff();

	return TRUE;
}

//------------------------------------------------------------------------	
// Стоп рабочей программы
void	StopCooking(void)								
{
	cMode = MODE_STANDBY;						// Ничего не делать
}		

//------------------------------------------------------------------------	
void WarmOn(void)
{	
	if(CP_MainProgram.cHeatEnable & HEAT_TOP_ENABLE)	Heat_TopOn();
	if(CP_MainProgram.cHeatEnable & HEAT_SIDE_ENABLE)	Heat_SideOn();
	if(CP_MainProgram.cHeatEnable & HEAT_MAIN_ENABLE)	Heat_MainOn();
}

void WarmOff(void)
{	
	Heat_MainOff();	

	if(CP_MainProgram.cProgramNumber != PASTRY || cStage == STAGE_KEEPWARM || iTermTop >= 170)	//(ash) STAGE_KEEPWARM
	{
		Heat_SideOff();
		Heat_TopOff();
	}
}

void AllWarmOff(void)
{	
	Heat_MainOff();	
	Heat_SideOff();
	Heat_TopOff();
}

//---------------------------------------------------------------------
U8	KbHit(void)            // сканирование в поисках нажатой клавиши
{
	U8 cKeyInp;
	
	cKeyInp = Keyb_GetOnKey();
  if(cOldKey != cKeyInp) 			  // буферизация нажатых клавиш
  {                 
		cOldKey = cKeyInp;
    if(cKeyInp == 0 || cKeyInp == HEAT_KEY || cKeyInp == LOCK_KEY || cKeyInp == START_KEY)
		{	
      iTimeKeyRepeat = 0;
			return(0);
		}	
    else if(cKeyInp == MINUS_KEY || cKeyInp == PLUS_KEY)
		{
			if(cMode == MODE_INPUT_COOKTIME || cMode == MODE_INPUT_POSTTIME || 
				 cMode == MODE_INPUT_TEMP /*|| 
				 cMode == MODE_INPUT_TEMP_MSL || cMode == MODE_INPUT_COOKTIME_MSL*/)
				ShortBeep();
      iTimeKeyRepeat = -80;	//(ash)			// задержка перед автоповтором
		}
    cKeyHead &= 0xf;        
    cKeyBuf[cKeyHead] = cKeyInp;
    cKeyHead++;
  } 
  else
  {
    if(cKeyInp != 0)
    {
      if(cKeyInp == MINUS_KEY || cKeyInp == PLUS_KEY)
      {
        if(iTimeKeyRepeat > 20)	// 200ms (ash)					// автоповтор 0.125 сек
        {
          iTimeKeyRepeat = 0;
          cKeyHead &= 0xf;        
          cKeyBuf[cKeyHead] = cKeyInp;  
          cKeyHead++;
        }        
      }        
			else if(cKeyInp == TIMER_KEY || cKeyInp == HEAT_KEY || cKeyInp == LOCK_KEY || cKeyInp == START_KEY)
      {
        if(iTimeKeyRepeat > 200 && iTimeKeyRepeat < 300)	//(ash)
        {
          cKeyHead &= 0xf;        
          cKeyBuf[cKeyHead] = cKeyInp;   // нажата 2 сек
          cKeyHead++;
					iTimeKeyRepeat = 300;	//(ash)				// срабатывает 1 раз
        }
 
      }        
    }
  }
  return(cKeyHead);          // голова буфера, 0 при отсутствии нажатой клавиши
}

void	InKey(void)
{
  U8  i;
  
  cKey = cKeyBuf[0];              // первая в буфере нажатая клавиша
  if(cKeyHead > 0) cKeyHead--;
  for(i = 0; i < 15; i++) cKeyBuf[i] = cKeyBuf[i+1];  // удаление ее из буфера
  cKeyBuf[15] = 0;      
	IsModeLock();					// Блокировка клавиш?
	cTimeToStandBy = 0;	
}  

//-----------------------------------------------------
void	ShortBeep(void)
{	
	Buz_On();
	Clk_Delay_ms(100);	//ash
	Buz_Off();
}	

void	LongBeep(U8 len)
{
	Buz_On();
	for(U8 i = 0; i < len; i++) Clk_Delay_ms(250);	//ash
	Buz_Off();
}

void	LongFiveBeep(void)
{
	for(U8 i = 0; i < 5; i++)
	{
//(ash)		for(U8 j = 0; j < 8; j++)	ShortBeep();						//  Звонок
		LongBeep(3);		//(ash)
		Clk_Delay_ms(750);	//(ash)
	}
}

////////////////////////////////////////////////////////////////

//перенес из ind.c (ash)

static void _Ind_PutProgram_On(U8 num)
{
	if(num == 1)		Ind_LED_On(CEREALS_LED);
	else if(num == 2)	Ind_LED_On(SOAKING_LED);
	else if(num == 3)	Ind_LED_On(PILAW_LED);
	else if(num == 4)	Ind_LED_On(FRY_LED);
	else if(num == 5)	Ind_LED_On(STEW_LED);
	else if(num == 6)	Ind_LED_On(PASTA_LED);
	else if(num == 7)	Ind_LED_On(PORRIDGE_LED);
	else if(num == 8)	Ind_LED_On(SOUP_LED);
	else if(num == 9)	Ind_LED_On(YOGURT_LED);
	else if(num == 10)	Ind_LED_On(PASTRY_LED);
	else if(num == 11)	Ind_LED_On(STEAM_LED);
	else if(num == 12)	Ind_LED_On(BOILING_LED);
}	

static void _Ind_PutProgram_Off(U8 num)
{
	if(num == 1)		Ind_LED_Off(CEREALS_LED);
	else if(num == 2)	Ind_LED_Off(SOAKING_LED);
	else if(num == 3)	Ind_LED_Off(PILAW_LED);
	else if(num == 4)	Ind_LED_Off(FRY_LED);
	else if(num == 5)	Ind_LED_Off(STEW_LED);
	else if(num == 6)	Ind_LED_Off(PASTA_LED);
	else if(num == 7)	Ind_LED_Off(PORRIDGE_LED);
	else if(num == 8)	Ind_LED_Off(SOUP_LED);
	else if(num == 9)	Ind_LED_Off(YOGURT_LED);
	else if(num == 10)	Ind_LED_Off(PASTRY_LED);
	else if(num == 11)	Ind_LED_Off(STEAM_LED);
	else if(num == 12)	Ind_LED_Off(BOILING_LED);
}	

static void _Ind_PutProduct(U8 num)
{
	Ind_LED_Off(VEGETABLES_LED);
	Ind_LED_Off(FISH_LED);
	Ind_LED_Off(MEAT_LED);
	if(num == 1)		Ind_LED_On(VEGETABLES_LED);
	else if(num == 2)	Ind_LED_On(FISH_LED);
	else if(num == 3)	Ind_LED_On(MEAT_LED);
}	

////////////////////////////////////////////////////////////////

Made on
Tilda