//************************************************************************************
//**  
//**  Source name:   C:\flowcodefiles\secondesp.fcfx
//**  Title:         
//**  Description:   
//**  Device:        ESP.ESP32.ESP32_WROOM_32
//**  
//**  Generated by:  Flowcode v9.3.0.35
//**  Date:          Thursday, November 03, 2022 16:28:43
//**  Users:         1
//**  Registered to: Tinker (30680529)
//**  Licence key: F9WF6K
//**  
//**  
//**     NOT FOR COMMERCIAL USE
//**  
//**  https://www.flowcode.co.uk
//**  
//************************************************************************************


#define MX_ESP

#define MX_CAL_ESP

#define MX_CLK_SPEED 240000000

#define FCP_NULL Unconnected_Port


#define MX_CAL_ESP32
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "esp_event_loop.h"
#include "nvs_flash.h"
#include "driver/adc.h"
#include "lwip/err.h"
#include "lwip/sys.h"
#include "sdkconfig.h"

/*========================================================================*\
   Use :Include the type definitions
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV9\CAL\internals.c"



MX_UINT8 FCLV_LOOP1;
MX_UINT8 FCLV_LOOP2;
MX_UINT8 FCLV_LOOP3;
MX_UINT8 FCLV_LOOP4;


/*========================================================================*\
   Use :panel
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCV_FALSE (0)
#define FCV_TRUE (1)
MX_GLOBAL MX_SINT16 FCV_NUMBER;


/*========================================================================*\
   Use :cal_i2c1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_I2C_SDA_PORT_1 porta
#define MX_I2C_REF1 
#define MX_I2C_0 
#define MX_I2C_SDA_AF_1 (0)
#define MX_I2C_SCL_AF_1 (0)
#define MX_I2C_BMODE_1 (0)
#define MX_I2C_SDA_TRIS_1 trisa
#define MX_I2C_SCL_PIN_1 (22)
#define MX_I2C_SCL_PORT_1 porta
#define MX_I2C_STOPDEL_1 (0)
#define MX_I2C_SDA_PIN_1 (21)
#define MX_I2C_SCL_TRIS_1 trisa
#define MX_I2C_BAUD_1 (9600)
#define MX_I2C_CLOCKSTRETCHING_1 (1)
#define MX_I2C_CHANNEL_1 (1)


/*=----------------------------------------------------------------------=*\
   Use :cal_i2c1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define MX_I2C_REMAPPABLE_1 1
#define MX_I2C_SDA_RPOR_1 PPS27
#define MX_I2C_SDA_1 1
#define MX_I2C_SDA_RPINR_1 I2C1PPS
#define MX_I2C_SDA_RP_1 27
#define MX_I2C_SCL_RPOR_1 PPS30
#define MX_I2C_SCL_1 
#define MX_I2C_SCL_RPINR_1 I2C2PPS
#define MX_I2C_SCL_RP_1 30

MX_GLOBAL MX_UINT8 FCV_07da1_cal_i2c1__TRANSADDR;
MX_GLOBAL MX_UINT32 FCV_07da1_cal_i2c1__CONSOLELOG;

void FC_CAL_I2C_Slave_Uninit_1();
void FCD_07da1_cal_i2c1__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR, MX_UINT8 FCL_APPENDTIMESTAMP);
MX_UINT16 FC_CAL_I2C_Transaction_Write_1(MX_UINT8 *FCL_BUFFER, MX_UINT16 FCLsz_BUFFER, MX_UINT16 FCL_LENGTH);
void FC_CAL_I2C_Master_Stop_1();
void FC_CAL_I2C_Slave_Init_1(MX_UINT8 FCL_ADDRESS, MX_UINT8 FCL_MASK);
void FC_CAL_I2C_Master_Uninit_1();
MX_UINT8 FC_CAL_I2C_Slave_Status_1();
MX_UINT8 FC_CAL_I2C_Slave_TxByte_1(MX_UINT8 FCL_DATA);
void FC_CAL_I2C_Transaction_Uninit_1();
MX_UINT8 FC_CAL_I2C_Slave_RxByte_1(MX_UINT8 FCL_LAST);
void FC_CAL_I2C_Master_Init_1();
void FC_CAL_I2C_Master_Start_1();
MX_UINT16 FC_CAL_I2C_Transaction_Read_1(MX_UINT8 *FCL_BUFFER, MX_UINT16 FCLsz_BUFFER, MX_UINT16 FCL_LENGTH);
MX_UINT8 FC_CAL_I2C_Master_TxByte_1(MX_UINT8 FCL_DATA);
void FC_CAL_I2C_Master_Restart_1();
MX_UINT8 FC_CAL_I2C_Master_RxByte_1(MX_UINT8 FCL_LAST);
MX_UINT8 FC_CAL_I2C_Transaction_Init_1(MX_UINT8 FCL_ADDRESS);

/*========================================================================*\
   Use :LCDI2C1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCV_0be11_LCDI2C1__RS (0)
#define FCV_0be11_LCDI2C1__BL (3)
#define FCV_0be11_LCDI2C1__EN (2)
MX_GLOBAL MX_UINT8 FCV_0be11_LCDI2C1__PINCONTROL;

void FCD_0be11_LCDI2C1__Clear();
void FCD_0be11_LCDI2C1__PrintString(MX_CHAR *FCL_TEXT, MX_UINT16 FCLsz_TEXT);
void FCD_0be11_LCDI2C1__PrintAscii(MX_UINT8 FCL_CHARACTER);
void FCD_0be11_LCDI2C1__PrintNumber(MX_SINT16 FCL_NUMBER);
void FCD_0be11_LCDI2C1__RAMWrite(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_D0, MX_UINT8 FCL_D1, MX_UINT8 FCL_D2, MX_UINT8 FCL_D3, MX_UINT8 FCL_D4, MX_UINT8 FCL_D5, MX_UINT8 FCL_D6, MX_UINT8 FCL_D7);
void FCD_0be11_LCDI2C1__SendPinsToExpander();
void FCD_0be11_LCDI2C1__ClearLine(MX_UINT8 FCL_LINE);
void FCD_0be11_LCDI2C1__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y);
void FCD_0be11_LCDI2C1__Command(MX_UINT8 FCL_INSTRUCTION);
void FCD_0be11_LCDI2C1__PrintFormattedNumber(MX_UINT32 FCL_NUMBER, MX_BOOL FCL_FORMAT);
void FCD_0be11_LCDI2C1__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION);
void FCD_0be11_LCDI2C1__RawSend(MX_UINT8 FCL_DATA, MX_BOOL FCL_TYPE);
void FCD_0be11_LCDI2C1__Backlight(MX_UINT8 FCL_MODE);
void FCD_0be11_LCDI2C1__RemapCharacter(MX_UINT8 FCL_REMAPIDX, MX_UINT8 FCL_SEARCHCHARACTER, MX_UINT8 FCL_REPLACEMENTCHARACTER);
void FCD_0be11_LCDI2C1__Start();
void FCD_03d91_led_base1__TurnOn();
void FCD_03d91_led_base1__TurnOff();

/*========================================================================*\
   Use :Include the chip adaption layer
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV9\CAL\includes.c"


/*========================================================================*\
   Use :cal_i2c1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Send text to the console
       :
       :Parameters for macro Prv_TextConsole:
       :  str[20] : MX_CHAR (by-ref)
       :  Colour : MX_UINT8
       :  AppendTimestamp : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_07da1_cal_i2c1__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR, MX_UINT8 FCL_APPENDTIMESTAMP)
{
	//Local variable definitions
#define FCLsz_TSTR 20
	MX_CHAR FCL_TSTR[FCLsz_TSTR];


	#if (0)

	//Code has been optimised out by the pre-processor
	// #else

	#endif

	//Local variable definitions
#undef FCLsz_TSTR
}


/*========================================================================*\
   Use :LCDI2C1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Clears the entire contents of the display.
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__Clear()
{







	FCD_0be11_LCDI2C1__RawSend(0x01, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x02, 0);

	FCI_DELAYBYTE_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Breaks down a string of text and sends it to the LCD via the private RawSend(byte, mask) macro
       :
       :Parameters for macro PrintString:
       :  Text[20] : Enter the text or variable to print to the LCD
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__PrintString(MX_CHAR *FCL_TEXT, MX_UINT16 FCLsz_TEXT)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_UINT8 FCL_COUNT;


	// .count = Length$ (.Text)
	FCL_COUNT = FCI_GETLENGTH(FCL_TEXT, FCLsz_TEXT);

	while (FCL_IDX < FCL_COUNT)
	{

		#if (0) // 0 > 0

		//Code has been optimised out by the pre-processor
		#else



			FCD_0be11_LCDI2C1__RawSend(FCL_TEXT[FCL_IDX], 0x10);

		#endif

		// .Idx = .Idx + 1
		FCL_IDX = FCL_IDX + 1;


	}



}

/*=----------------------------------------------------------------------=*\
   Use :Takes the ascii value for a character and prints the character
       :
       :Parameters for macro PrintAscii:
       :  character : Holds an ascii value.
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__PrintAscii(MX_UINT8 FCL_CHARACTER)
{

	FCD_0be11_LCDI2C1__RawSend(FCL_CHARACTER, 0x10);





}

/*=----------------------------------------------------------------------=*\
   Use :Based on v5 macro, will allow you to print a number. This is limited to a signed-INT, -32768 to 32767
       :
       :Parameters for macro PrintNumber:
       :  Number : Enter the number or variable to print to the LCD
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__PrintNumber(MX_SINT16 FCL_NUMBER)
{
	//Local variable definitions
#define FCLsz_S 10
	MX_CHAR FCL_S[FCLsz_S];


	// .s = ToString$ (.Number)
	FCI_TOSTRING(FCL_NUMBER, FCL_S,10);

	FCD_0be11_LCDI2C1__PrintString(FCL_S, FCLsz_S);

	//Local variable definitions
#undef FCLsz_S
}

/*=----------------------------------------------------------------------=*\
   Use :Modifies the internal memory of the LCD to allow for up to 8 customised characters to be created and stored in the device memory
       :
       :Parameters for macro RAMWrite:
       :  Index : Values 0 to 7
       :  d0 : MX_UINT8
       :  d1 : MX_UINT8
       :  d2 : MX_UINT8
       :  d3 : MX_UINT8
       :  d4 : MX_UINT8
       :  d5 : MX_UINT8
       :  d6 : MX_UINT8
       :  d7 : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__RAMWrite(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_D0, MX_UINT8 FCL_D1, MX_UINT8 FCL_D2, MX_UINT8 FCL_D3, MX_UINT8 FCL_D4, MX_UINT8 FCL_D5, MX_UINT8 FCL_D6, MX_UINT8 FCL_D7)
{

	FCD_0be11_LCDI2C1__RawSend(64 + (FCL_INDEX << 3), 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(FCL_D0, 0x10);

	FCD_0be11_LCDI2C1__RawSend(FCL_D1, 0x10);

	FCD_0be11_LCDI2C1__RawSend(FCL_D2, 0x10);

	FCD_0be11_LCDI2C1__RawSend(FCL_D3, 0x10);

	FCD_0be11_LCDI2C1__RawSend(FCL_D4, 0x10);

	FCD_0be11_LCDI2C1__RawSend(FCL_D5, 0x10);

	FCD_0be11_LCDI2C1__RawSend(FCL_D6, 0x10);

	FCD_0be11_LCDI2C1__RawSend(FCL_D7, 0x10);

	FCD_0be11_LCDI2C1__Clear();

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__SendPinsToExpander()
{

	FC_CAL_I2C_Master_Start_1();

	FC_CAL_I2C_Master_TxByte_1(63 << 1);

	FC_CAL_I2C_Master_TxByte_1(FCV_0be11_LCDI2C1__PINCONTROL);

	FC_CAL_I2C_Master_Stop_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Clears a single line on the display and then moves the cursor to the start of the line to allow you to start populating the line with data.
       :
       :Parameters for macro ClearLine:
       :  Line : The line to clear, zero being the first (top) line of the display
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__ClearLine(MX_UINT8 FCL_LINE)
{
	//Local variable definitions
	MX_UINT8 FCL_X;


	if (FCL_LINE < 2)
	{

		FCD_0be11_LCDI2C1__Cursor(0, FCL_LINE);

		// .x = 0
		FCL_X = 0;

		while (FCL_X < 16)
		{



			FCD_0be11_LCDI2C1__RawSend(' ', 0x10);

			// .x = .x + 1
			FCL_X = FCL_X + 1;


		}

		FCD_0be11_LCDI2C1__Cursor(0, FCL_LINE);

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Moves the cursor on the LCD Display
       :
       :Parameters for macro Cursor:
       :  x : Set the cursor position in the X plane, 0 is the left most cell
       :  y : Set the cursor position in the Y plane, 0 is the top most cell
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y)
{





	#if (0) // 2 == 1

	//Code has been optimised out by the pre-processor
	// #else

	#endif

	#if (1) // 2 == 2

		if (FCL_Y == 0)
		{

			// .y = 0x80
			FCL_Y = 0x80;

		} else {

			// .y = 0xC0
			FCL_Y = 0xC0;

		}

	// #else

	//Code has been optimised out by the pre-processor
	#endif

	#if (0) // 2 == 4

	//Code has been optimised out by the pre-processor
	// #else

	#endif

	FCD_0be11_LCDI2C1__RawSend(FCL_Y + FCL_X, 0);

	FCI_DELAYBYTE_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Use this method/macro to send a specific command to the LCD. Refer to the Matrix Multimedia EB006 datasheet for a list of supported instructions. For Non-Matrix LCD's refer to the manufacturers datasheet.
       :
       :Parameters for macro Command:
       :  instruction : Send a defined command to the LCD Screen. See datasheet for supported commands.
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__Command(MX_UINT8 FCL_INSTRUCTION)
{

	FCD_0be11_LCDI2C1__RawSend(FCL_INSTRUCTION, 0);

	FCI_DELAYBYTE_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Will allow you to print a number up to 32-bits with signed or unsigned formatting.
       :Signed = -2147483648 to 2147483647
       :Unsigned = 0 to 4294967295
       :
       :Parameters for macro PrintFormattedNumber:
       :  Number : Enter the number or variable to print to the LCD
       :  Format : 0=Signed, 1=Unsigned
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__PrintFormattedNumber(MX_UINT32 FCL_NUMBER, MX_BOOL FCL_FORMAT)
{
	//Local variable definitions
#define FCLsz_S 15
	MX_CHAR FCL_S[FCLsz_S];


	if (FCL_FORMAT == 1)
	{

		// .s = STRING UNSIGNED .Number
		FCI_UTOS32(FCL_NUMBER, FCL_S,15);

	} else {

		// .s = STRING SIGNED .Number
		FCI_ITOS32((MX_SINT32)(FCL_NUMBER), FCL_S,15);

	}

	FCD_0be11_LCDI2C1__PrintString(FCL_S, FCLsz_S);

	//Local variable definitions
#undef FCLsz_S
}

/*=----------------------------------------------------------------------=*\
   Use :Scrolls the display left or right by a number of given positions.
       :
       :Parameters for macro ScrollDisplay:
       :  Position : Holds the number of positions to shift the display
       :  Direction : 0 = left, 1 = right
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION)
{
	//Local variable definitions
	MX_UINT8 FCL_CMD = (0x0);


	// .cmd = 0
	FCL_CMD = 0;

	if (FCL_DIRECTION == 0)
	{

		// .cmd = 0x18
		FCL_CMD = 0x18;



	} else {

		// .cmd = 0x1C
		FCL_CMD = 0x1C;



	}

	if (FCL_CMD != 0 && FCL_POSITION != 0)
	{

		while (FCL_POSITION != 0)
		{

			FCD_0be11_LCDI2C1__RawSend(FCL_CMD, 0);

			// .Position = .Position - 1
			FCL_POSITION = FCL_POSITION - 1;


		}

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sends data to the LCD display
       :
       :Parameters for macro RawSend:
       :  data : The data byte to send to the LCD
       :  type : A boolean to indicate command type: true to write data, false to write a command
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__RawSend(MX_UINT8 FCL_DATA, MX_BOOL FCL_TYPE)
{
	//Local variable definitions
	MX_UINT8 FCL_NIBBLE;


	//Comment:
	//Output upper nibble of the byte

	// PinControl = PinControl & (1 << BL)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL & (1 << FCV_0be11_LCDI2C1__BL);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	if (FCL_TYPE)
	{

		// PinControl = PinControl | (1 << RS)
		FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL | (1 << FCV_0be11_LCDI2C1__RS);

	// } else {

	}

	// PinControl = PinControl & 0x0F
	// PinControl = PinControl | (.data & 0xF0)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL & 0x0F;
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL | (FCL_DATA & 0xF0);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	FCI_DELAYBYTE_US(100);

	//Comment:
	//Set Enable high, pause then set low
	//to acknowledge the data has been 
	//submitted.

	// PinControl = PinControl | (1 << EN)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL | (1 << FCV_0be11_LCDI2C1__EN);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	FCI_DELAYBYTE_US(100);

	// PinControl = PinControl & ~ (1 << EN)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL & ~(1 << FCV_0be11_LCDI2C1__EN);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	FCI_DELAYBYTE_US(100);

	// PinControl = PinControl & (1 << BL)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL & (1 << FCV_0be11_LCDI2C1__BL);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	if (FCL_TYPE)
	{

		// PinControl = PinControl | (1 << RS)
		FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL | (1 << FCV_0be11_LCDI2C1__RS);

	// } else {

	}

	// PinControl = PinControl & 0x0F
	// PinControl = PinControl | ((.data & 0x0F) << 4)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL & 0x0F;
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL | ((FCL_DATA & 0x0F) << 4);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	FCI_DELAYBYTE_US(100);

	// PinControl = PinControl | (1 << EN)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL | (1 << FCV_0be11_LCDI2C1__EN);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	FCI_DELAYBYTE_US(100);

	// PinControl = PinControl & ~ (1 << EN)
	FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL & ~(1 << FCV_0be11_LCDI2C1__EN);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	FCI_DELAYBYTE_US(100);

}

/*=----------------------------------------------------------------------=*\
   Use :Controls the backlight on the display module
       :
       :Parameters for macro Backlight:
       :  Mode : 0 = Backlight Off / 1 = Backlight On
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__Backlight(MX_UINT8 FCL_MODE)
{

	if (FCL_MODE)
	{

		// PinControl = PinControl | (1 << BL)
		FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL | (1 << FCV_0be11_LCDI2C1__BL);

	} else {

		// PinControl = PinControl & ~ (1 << BL)
		FCV_0be11_LCDI2C1__PINCONTROL = FCV_0be11_LCDI2C1__PINCONTROL & ~(1 << FCV_0be11_LCDI2C1__BL);

	}

	FCD_0be11_LCDI2C1__SendPinsToExpander();

}

/*=----------------------------------------------------------------------=*\
   Use :Assigns a remap character allowing the PrintString function to automatically swap between pre-defined characters. 
       :The characters can be custom (in the range 0-9) or can point to an existing character in the LCD character map.
       :
       :Parameters for macro RemapCharacter:
       :  RemapIdx : Remap Index, Range: 0 to (Remap Characters - 1)
       :  SearchCharacter : Character to look for a replace
       :  ReplacementCharacter : New character value to use in place of the search character.
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__RemapCharacter(MX_UINT8 FCL_REMAPIDX, MX_UINT8 FCL_SEARCHCHARACTER, MX_UINT8 FCL_REPLACEMENTCHARACTER)
{

	#if (0) // 0 > 0

	//Code has been optimised out by the pre-processor
	// #else

	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Startup routine required by the hardware device.
       :Automatically clears the display after initialising.
\*=----------------------------------------------------------------------=*/
void FCD_0be11_LCDI2C1__Start()
{







	FC_CAL_I2C_Master_Init_1();

	// PinControl = (1 << BL)
	FCV_0be11_LCDI2C1__PINCONTROL = (1 << FCV_0be11_LCDI2C1__BL);

	FCD_0be11_LCDI2C1__SendPinsToExpander();

	FCI_DELAYBYTE_MS(12);

	FCD_0be11_LCDI2C1__RawSend(0x33, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x33, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x32, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x2c, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x06, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x0c, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x01, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__RawSend(0x02, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_0be11_LCDI2C1__Clear();

	#if (0) // 0 > 0

	//Code has been optimised out by the pre-processor
	// #else

	#endif

}


/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_03d91_led_base1__TurnOn()
{

	#if (1)

		// pin = polarity
		SET_PORT_PIN(A, 16, 0);

	// #else

	//Code has been optimised out by the pre-processor
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_03d91_led_base1__TurnOff()
{

	#if (1)

		// pin = 1 - polarity
		SET_PORT_PIN(A, 16, 1 - 0);

	// #else

	//Code has been optimised out by the pre-processor
	#endif

}



/*========================================================================*\
   Use :Main
\*========================================================================*/
void app_main()
{
    // Initialize NVS
    esp_err_t ret = nvs_flash_init();
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK( ret );
	ESP_ERROR_CHECK(esp_event_loop_create_default());


	// Name: Component Macro, Type: Component Macro: 

	// Name: Component Macro, Type: Component Macro: LCDI2C1::Start()
	FCD_0be11_LCDI2C1__Start();

	// Name: Delay, Type: Delay: 10 ms
	FCI_DELAYBYTE_MS(10);

	// Name: Component Macro, Type: Component Macro: LCDI2C1::Cursor(0, 0)
	FCD_0be11_LCDI2C1__Cursor(0, 0);

	// Name: Calculation, Type: Calculation:
	// number = 0
	FCV_NUMBER = 0;

	// Name: Loop, Type: Loop: While 1
	while (1)
	{

		// Name: Component Macro, Type: Component Macro: LCDI2C1::Clear()
		FCD_0be11_LCDI2C1__Clear();

		// Name: Component Macro, Type: Component Macro: LCDI2C1::PrintString("HERE")
		FCD_0be11_LCDI2C1__PrintString("HERE", 5);

		// Name: Output, Type: Output: 1 -> pin16
		SET_PORT_PIN(A,16,(1));

		// Name: Calculation, Type: Calculation:
		// number = number + 1
		FCV_NUMBER = FCV_NUMBER + 1;

		// Name: Decision, Type: Decision: number = 9?
		if (FCV_NUMBER == 9)
		{

			// Name: Calculation, Type: Calculation:
			// number = 1
			FCV_NUMBER = 1;

		// } else {

		}

		// Name: Delay, Type: Delay: 1 s
		FCI_DELAYBYTE_S(1);

		// Name: Component Macro, Type: Component Macro: LCDI2C1::Clear()
		FCD_0be11_LCDI2C1__Clear();

		// Name: Component Macro, Type: Component Macro: LCDI2C1::PrintString("GOING SOON")
		FCD_0be11_LCDI2C1__PrintString("GOING SOON", 11);

		// Name: Output, Type: Output: 0 -> pin16
		SET_PORT_PIN(A,16,(0));

		// Name: Component Macro, Type: Component Macro: LCDI2C1::Clear()
		FCD_0be11_LCDI2C1__Clear();

		// Name: Component Macro, Type: Component Macro: LCDI2C1::PrintNumber(number)
		FCD_0be11_LCDI2C1__PrintNumber(FCV_NUMBER);

		// Name: Delay, Type: Delay: 1 s
		FCI_DELAYBYTE_S(1);

		// Name: Component Macro, Type: Component Macro: LCDI2C1::Clear()
		FCD_0be11_LCDI2C1__Clear();

		// Name: Component Macro, Type: Component Macro: LCDI2C1::PrintString("GONE")
		FCD_0be11_LCDI2C1__PrintString("GONE", 5);

		// Name: Delay, Type: Delay: 1 s
		FCI_DELAYBYTE_S(1);


	}

	mainendloop: goto mainendloop;
}



/*========================================================================*\
   Use :Interrupt
\*========================================================================*/




