You are on page 1of 2

Safe Lock Service Pseudocode

/*
This module handles reading the inputs to the safe lock potentiometer and sending
WIN and LOSE events accordingly to GameProgressionService
*/

InitSafeLock
initialize analog input on RB15
initialize ADC AutoScan
set current state to initial pseudostate
post initial transition event

RunSafeLock
switch on current state:
initial pseudostate:
if received ES_INIT event:
set current state to SafeLockIdle
SafeLockIdle:
// if GameProgressionService tells module to start listening
for safe lock inputs
if receive START_CHECKING_SAFE_LOCK event:
set current state to Digit1
initialize USER_TIMEOUT_TIMER
Digit1:
if received SAFE_BUTTON_PRESS:
read current potentiometer value
get calibrated CurrentDigit from current raw
potentiometer value
if CurrentDigit is same as SecretCode1:
set current state to Digit2
play success sound
stop and restart USER_TIMEOUT_TIMER
else: // if digit is wrong
send LOSE event to GameProgressionService
if received END_GAME event:
set current state back to idle

Digit2:
if received SAFE_BUTTON_PRESS:
read current potentiometer value
get calibrated CurrentDigit from current raw
potentiometer value
if CurrentDigit is same as SecretCode2:
set current state to Digit3
play success sound
stop and restart USER_TIMEOUT_TIMER
else: // if digit is wrong
send LOSE event to GameProgressionService
if received END_GAME event:
set current state back to idle
Digit3:
if received SAFE_BUTTON_PRESS:
read current potentiometer value
get calibrated CurrentDigit from current raw
potentiometer value
if CurrentDigit is same as SecretCode3:
play success sound
send WIN event to GameProgressionService
set current state back to idle
else: // if digit is wrong
send LOSE event to GameProgressionService
if received END_GAME event:
set current state back to idle

// this function returns the calibrated safe lock digit from the raw potentiometer
value

getDigitFromAnalogValue
// contains a cascade of if statements like the one below but values are
calibrated for each potential digit
if(AnalogValue >= x && AnalogVlaue < y){
return 1
}

You might also like