Close

Ready for testing

A project log for Sous Vide cooker and more

A sous vide cooker built from a Raspberry Pi with Adafruit LCD and code generated from a state machine.

richard-deiningerRichard Deininger 03/09/2016 at 13:290 Comments

Finally got an update for the project. I managed to make the state machine and all the activity diagrams ready to run the python code and added a buzzer to alert me when some user interaction has to be done.


Here you see the dependencies of the SousVide class to "external" "state machine" and "internal" classes.

One big state machine,... coming up:

and finally for all interested the XMI-Export from my Enterprise Architect model and some example code (generated from the model)

"""
#  Model File: file:///C:/Projects/Python/SousVide/SousVide.eap
#  Model Path: Model.LCD Menu.SousVide.SousVide
#  
#  Montag, 7. März 2016 - 09:43:43
"""
from enum import Enum
import time
# Include for relation to classifier Adafruit_CharLCD
import Adafruit_CharLCD as LCD
# Include for relation to classifier FSM
from FSM import *
# Include for relation to classifier time
from time import *
# Include for relation to classifier RPi.GPIO
import RPi.GPIO as GPIO
# Include for relation to classifier os
import os as os
# Include for relation to classifier TempSensor
from TempSensor import *
# Include for relation to classifier sys
import sys as sys
# Include for relation to classifier time_unit
from time_unit import *
# Include for signals
from Signals import *
...
...

	"""
	# Activity CheckSingleClick of class SousVide
	"""
	def CheckSingleClick(self, button):
		return_1 = False
		# start of activity code
		if(self.lcd.is_pressed(button)):
			while(True):
				self.ButtonWaitTime()
				
				
				if not (self.lcd.is_pressed(button)):
					 break
			return_1 = True

		else: 
			return_1 = False			
			
		return return_1
...
...
...
        """
	# Handles the state machine
	"""
	def StateMachineFnc(self, stm, msg):
		evConsumed = False
		if (stm.mainState.activeSubState == SousVide_StateMachine_States.SousVide_StateMachine_StateMachine_FINAL_1):
			""" empty block """
			
		elif (stm.mainState.activeSubState == SousVide_StateMachine_States.SousVide_StateMachine_Running):
			if (stm.Running.activeSubState == SousVide_StateMachine_States.SousVide_StateMachine_alert_user_end):
				
				if(FSM.checkTimeEvent(stm.alert_user_end, 500, time_unit.TIME_MILLISECONDS) != False):
					evConsumed = True
					# transition effect for transition alert user end -> alert user end
					self.BuzzerAlert()
					# end of transition effect for transition alert user end -> alert user end
					# alert user end -> alert user end
					
					stm.Running.activeSubState = SousVide_StateMachine_States.SousVide_StateMachine_alert_user_end
					stm.alert_user_end.startTime = FSM.getTime()
					
				
				elif( self.CheckSingleClick(LCD.SELECT)):
					evConsumed = True
					# alert user end -> wait for user
					
					stm.Running.activeSubState = SousVide_StateMachine_States.SousVide_StateMachine_wait_for_user
					# entry actions for state wait for user
					self.EndMessage()
					# end of entry actions for state wait for user
					
				
			elif (stm.Running.activeSubState...
...
...


Discussions