<root>
<document scada='0' projtype='1' schema='103' license='1,65920724,5Q78FW' title='New Embedded Project' description='' fcversion='720898' target='ESP.ESP32.ESP32' >
	<config data='' clkspd='240000000' simspd='0' usewdt='0' constif='0' commport='11' Use3V3='0' />
	<plugins >
		<dll_models enabled='1' />
	</plugins>
	<supplement use='0' head='' body='' />
	<debug />
	<traces />
	<ghost >
		<FK2 >
			<data name='FK2D0' port='4294967295' pin='4294967295' />
			<data name='FK2D1' port='4294967295' pin='4294967295' />
			<data name='FK2D2' port='4294967295' pin='4294967295' />
			<data name='FK2D3' port='4294967295' pin='4294967295' />
			<data name='FK2D4' port='4294967295' pin='4294967295' />
			<data name='FK2D5' port='4294967295' pin='4294967295' />
			<data name='FK2D6' port='4294967295' pin='4294967295' />
			<data name='FK2D7' port='4294967295' pin='4294967295' />
			<data name='FK2D8' port='4294967295' pin='4294967295' />
			<data name='FK2D9' port='4294967295' pin='4294967295' />
			<data name='FK2D10' port='4294967295' pin='4294967295' />
			<data name='FK2D11' port='4294967295' pin='4294967295' />
			<data name='FK2D12' port='4294967295' pin='4294967295' />
			<data name='FK2D13' port='4294967295' pin='4294967295' />
			<data name='FK2D14' port='4294967295' pin='4294967295' />
			<data name='FK2D15' port='4294967295' pin='4294967295' />
			<data name='FK2A0' port='4294967295' pin='4294967295' />
			<data name='FK2A1' port='4294967295' pin='4294967295' />
			<data name='FK2A2' port='4294967295' pin='4294967295' />
			<data name='FK2A3' port='4294967295' pin='4294967295' />
			<data name='FK2A4' port='4294967295' pin='4294967295' />
			<data name='FK2A5' port='4294967295' pin='4294967295' />
		</FK2>
		<ICD >
			<data name='AnalogPrescaleValue' value='19' />
			<data name='DigitalSampleRate' value='100000' />
			<data name='BreakpointCount' value='8' />
			<data name='CallStackDepthCount' value='8' />
			<data name='ClockPort' value='1' />
			<data name='ClockPin' value='6' />
			<data name='DataPort' value='1' />
			<data name='DataPin' value='7' />
			<data name='UseDefaultPins' value='1' />
			<data name='WrapEnabled' value='1' />
			<data name='CommsDelayOverridden' value='0' />
			<data name='CommsDelay' value='1' />
			<data name='CalculatedCommsDelay' value='1' />
			<data name='AnalogEB2PrescaleValue' value='2' />
			<data name='DigitalEB2SampleRate' value='100000' />
		</ICD>
		<pins >
			<digital A='0' B='0' C='0' D='0' E='0' F='0' G='0' H='0' I='0' J='0' K='0' L='0' M='0' N='0' O='0' P='0' Q='0' R='0' S='0' T='0' U='0' V='0' W='0' X='0' Y='0' Z='0' />
			<analog A='0' B='0' C='0' D='0' E='0' F='0' G='0' H='0' I='0' J='0' K='0' L='0' M='0' N='0' O='0' P='0' Q='0' R='0' S='0' T='0' U='0' V='0' W='0' X='0' Y='0' Z='0' />
		</pins>
	</ghost>
	<components >
		<settings autoimg='0' center='1' unitscale='0' fixedscale='0' fixedx='25' fixedy='25' fixedz='25' headcode='0' />
		<definition guid='1090e929-0d1a-4437-922a-9a95aeea9ce8' vstate='40' vmin='0' vmaj='1' srcleaf='' visiblename='' description='' category='' category2='' category3='' bIs2dOnly='0' bIs3dOnly='0' bIsWysiwyg='0' catenable='1' author='' manuname='' manucode='' sysinfo='0' keywords='' dynamic='1' scadaCompatible='0' embeddedCompatible='1' showmacros='1' iconpath='' />
		<component class_type='root' codename='ComponentRoot' panelId='-1' x='0' y='0' z='0' xsz='1' ysz='1' zsz='1' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='0' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
			<resources />
			<properties />
			<values />
			<events />
			<apis />
			<variables >
				<variable public='0' >
					<def class_type='variable' name='LastResetReason' type='u8' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='false' type='b1' description='' isconst='1' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='LastResetReasonStr' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;&quot;' setinit='&quot;&quot;' >
						<array size='70' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='true' type='b1' description='' isconst='1' isHidden='0' isinit='1' usrinit='1' setinit='1' />
				</variable>
			</variables>
			<macros >
				<macro >
					<flowline name='Main' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<command class_type='comment' title='' comment='The ESP32&apos;s own bootloader prints its own raw reset line automatically, before any of your code runs.
Resetting the board and watching the COM port at 115200 baud gives you a first clue for free, even without adding anything from this guide.
Your own decoded message appears afterwards, once your program actually starts.
If nothing shows up at all when you open the COM port, don&apos;t assume the technique has failed - check the actual baud rate on your project&apos;s UART/Console component first.
A mismatched baud rate just shows garbled characters or nothing at all, not an error message.
Seeing EXT (code 2) after you press the board&apos;s reset button, or POWERON (code 1) right after uploading new firmware, is completely normal - don&apos;t go looking for a bug there.
Seeing DEEPSLEEP (code 8) is only worth worrying about if you&apos;re not intentionally using deep sleep in your project. If you are, it&apos;s expected behaviour.
If you get PANIC (code 4), the reset reason alone only tells you that it crashed, not where.
Look further up the same serial log, right before the reset happened - the ESP32 prints a full crash dump there (registers and a backtrace) with far more detail.
If you get BROWNOUT (code 9) repeatedly, it&apos;s almost always a power supply problem rather than a code problem.
Try a different USB cable/port or a powered USB hub before spending time debugging your flowchart.
WiFi transmitting causes brief current spikes that a marginal supply can&apos;t always keep up with.
The default watchdog timeout is 5 seconds, so a stuck loop won&apos;t actually reset the board until roughly 5 seconds after it got stuck.
This is worth knowing so the timing of the reset doesn&apos;t mislead you about when the real problem started.
Keep the reset-reason C Code icon as the very first thing in Main, before you initialise anything else.
If your board is stuck in a boot loop crashing early in your normal startup code, this maximises your chance of actually getting the message displayed
or printed before the same crash happens again.
Make sure LastResetReasonStr&apos;s array size is genuinely big enough for your longest message (70+ characters) - strcpy doesn&apos;t check bounds.
If the array&apos;s too small, it&apos;ll silently overwrite whatever memory comes after it, which can cause a different, much harder to diagnose crash.' textarea='12,0,12,0' />
						<command class_type='native' title='Code' ccode='// Ask the ESP32&apos;s own operating system (ESP-IDF) why the LAST reset happened.
// esp_reset_reason() is a built-in ESP-IDF function, not a Flowcode icon,
// which is why we&apos;re using a C Code icon to call it directly.
#include &quot;esp_system.h&quot;

// FCV_LASTRESETREASON is how Flowcode&apos;s generated C code refers to our
// &quot;LastResetReason&quot; variable. Flowcode ALWAYS converts your variable name
// to FCV_ followed by the name in CAPITAL LETTERS, no matter how you typed
// it when you created it.
//
// esp_reset_reason() returns a special ESP-IDF type, so we convert (&quot;cast&quot;)
// it to a plain small number (uint8_t) that fits neatly into our Byte variable.
FCV_LASTRESETREASON = (uint8_t)esp_reset_reason();' language='C' />
						<command class_type='call' title='Component Macro' component='UART1' macro='Initialise' />
						<command class_type='decision' title='Decision' exp='LastResetReason &gt; 10' swap='0' >
							<flowline >
								<command class_type='calculation' title='value over 10 not documented so use 0 for unknown' >
									<exp exp='LastResetReason = 0' />
								</command>
							</flowline>
							<flowline />
						</command>
						<command class_type='switch' title='Switch' textarea='36,25,36,25' exp='LastResetReason' >
							<case >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;UNKNOWN - Reset reason not reported by hardware&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='1' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;POWERON - Board switched on or plugged in&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='2' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;EXT - External reset pin pulled low (e.g. a button)&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='3' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;SW - Code called esp_restart()&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='4' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;PANIC - Code hit a fault (bad memory access, etc.)&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='5' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;INT_WDT - An interrupt handler ran too long&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='6' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;TASK_WDT - Loop ran too long without a pause - try adding 1ms delay&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='7' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;WDT - Other watchdog reset&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='8' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;DEEPSLEEP - Woke up from deep sleep&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='9' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;BROWNOUT - Supply voltage dropped too low (check power supply)&quot;' />
									</command>
								</flowline>
							</case>
							<case exp='10' >
								<flowline >
									<command class_type='calculation' title='Calculation' >
										<exp exp='LastResetReasonStr = &quot;SDIO - ESP32 used as an SDIO slave device (not an SD card issue)&quot;' />
									</command>
								</flowline>
							</case>
						</command>
						<command class_type='call' title='Component Macro' component='UART1' macro='SendString' >
							<argument exp='&quot;\n\r Reset Code = &quot;' />
						</command>
						<command class_type='call' title='Component Macro' component='UART1' macro='SendNumber' >
							<argument exp='LastResetReason' />
						</command>
						<command class_type='call' title='Component Macro' component='UART1' macro='SendString' >
							<argument exp='&quot;, Reason = &quot;' />
						</command>
						<command class_type='call' title='Component Macro' component='UART1' macro='SendString' >
							<argument exp='LastResetReasonStr' />
						</command>
						<command class_type='loop' title='Loop' type='3' exp='1' for1='' for3='' >
							<flowline >
								<command class_type='delay' title='Delay' exp='2' type='2' />
								<command class_type='native' title='Delete this when ready to add  your own code' ccode='//Test should show code 3 - SW - Code called esp_restart()
esp_restart();' language='C' />
								<command class_type='comment' title='' comment='Your code here.' textarea='12,0,12,0' />
							</flowline>
						</command>
					</flowline>
				</macro>
			</macros>
			<component class_type='ref' guid='c73616d1-7ad0-45d9-aada-69ccfa4c5efc' vmin='0' vmaj='3' codename='UART1' panelId='0' x='214' y='-105' z='0' xsz='25.1778' ysz='25.1392' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='1' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='cal_uart::CHANNEL' data='001' />
					<value target='cal_uart::BAUD_LIST' data='009' />
					<value target='cal_uart::BAUD' data='115200' />
					<value target='cal_uart::DBITS' data='008' />
					<value target='cal_uart::RETURN' data='001' />
					<value target='cal_uart::ECHO' data='000' />
					<value target='cal_uart::UseTX' data='1' />
					<value target='cal_uart::TX' data='$PORTA.1' />
					<value target='cal_uart::OutputPins' data='000' />
					<value target='cal_uart::TXAlt' data='0' />
					<value target='cal_uart::UseRX' data='0' />
					<value target='cal_uart::RX' data='$PORTA.3' />
					<value target='cal_uart::InputPins' data='001' />
					<value target='cal_uart::RXAlt' data='0' />
					<value target='cal_uart::FLOWEN' data='000' />
					<value target='cal_uart::RTS' data='$PORTB.2' />
					<value target='cal_uart::CTS' data='$PORTB.1' />
					<value target='label' data='UART' />
					<value target='cal_uart::ScopeTraces' data='0' />
					<value target='cal_uart::ConsoleData' data='1' />
					<value target='cal_uart::ConsoleFormat' data='000' />
					<value target='cal_uart::ConsoleColumns' data='64' />
					<value target='cal_uart::DataSource' data='000' />
					<value target='cal_uart::com_port' data='000' />
					<value target='cal_uart::Injector' data='000' />
					<value target='cal_uart::APIUseDDR' data='' />
					<value target='cal_uart::APIDDRPin' data='' />
					<value target='cal_uart::APIDDRRXState' data='' />
					<value target='cal_uart::APIUseFC' data='' />
					<value target='cal_uart::APICTSPin' data='' />
					<value target='cal_uart::APIRTSPin' data='' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
		</component>
	</components>
	<scadaresourcelookup />
	<keymap />
	<panel2d shadows='0' lighting='2' brightness='0' >
		<background rgb='7292207' img='' style='0' />
		<camera xe='0' ye='0' ze='525.14' xt='0' yt='0' zt='0' xquat='0' yquat='0' zquat='0' wquat='1' />
		<viewport dx='128' dy='128' zoom='29.4931' fix_topleft='0' />
		<page x='1000' y='1000' show='0' rgb='7360576' />
		<winpos ID='7005' RectRecentFloat='1162,367,1812,817' RectRecentDocked='0,0,454,769' RecentFrameAlignment='16384' RecentRowIndex='0' IsFloating='0' MRUWidth='32767' PinState='0' IsMaximized='0' IsVisible='0' />
	</panel2d>
	<panel3d shadows='0' lighting='2' brightness='0' perspective='1' >
		<background rgb='8409120' img='' style='0' />
		<table rgb='7360576' img='' style='0' size='0' />
		<camera xe='0' ye='0' ze='781.66' xt='0' yt='0' zt='0' xquat='0' yquat='0' zquat='0' wquat='1' />
		<camerakey0 xe='0' ye='0' ze='300' xt='0' yt='0' zt='0' xquat='0' yquat='0' zquat='0' wquat='1' />
		<camerakey1 xe='-3.67394e-14' ye='0' ze='-300' xt='0' yt='0' zt='0' xquat='0' yquat='1' zquat='0' wquat='6.12323e-17' />
		<camerakey2 xe='0' ye='-300' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-0.707107' yquat='0' zquat='0' wquat='0.707107' />
		<camerakey3 xe='-3.67394e-14' ye='300' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-4.32978e-17' yquat='0.707107' zquat='0.707107' wquat='4.32978e-17' />
		<camerakey4 xe='-300' ye='-6.66134e-14' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-0.5' yquat='0.5' zquat='0.5' wquat='0.5' />
		<camerakey5 xe='300' ye='-6.66134e-14' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-0.5' yquat='-0.5' zquat='-0.5' wquat='0.5' />
		<camerakey6 xe='-173.205' ye='-173.205' ze='173.205' xt='0' yt='0' zt='0' xquat='-0.424708' yquat='0.17592' zquat='0.339851' wquat='0.820473' />
		<winpos ID='7004' RectRecentFloat='0,425,654,1002' RectRecentDocked='0,0,210,698' RecentFrameAlignment='16384' RecentRowIndex='0' IsFloating='0' MRUWidth='32767' PinState='0' IsMaximized='0' IsVisible='0' />
	</panel3d>
	<panels2d count='1' >
		<panel2d_0 id='0' name='NewPanel' type='0' >
			<winpos ID='1171' RectRecentFloat='1116,487,1538,788' RectRecentDocked='0,0,650,450' RecentFrameAlignment='16384' RecentRowIndex='0' IsFloating='1' MRUWidth='32767' PinState='0' IsMaximized='0' IsVisible='1' />
			<background fill='288230376151053813' showgrid='1' gridstyle='1' gridsize='10' gridbrush='71776119075691740' snaptogrid='1' fitcomp='0' disp_x='300' disp_y='400' scale='100' disp_col='16777215' />
		</panel2d_0>
	</panels2d>
	<layout >
		<view type='0' name='Main' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAeAAAAXQQAACcDAAA' zoom='100' scrollx='0' scrolly='80' flags='0' />
	</layout>
</document>
</root>
