DriverFeederFSM: High-level state machine handling mode transitions and integrating responses to sensor inputs
DialService: Reads analog voltage from potentiometer-based dial and posts new value to DriverFeederFSM
GlobalTimerService: Handles global timer status for timeout updates and stores indicator flags which are accessed by DriverFeederFSM
LimitswitchButtonSwitchService: Checks for changes in limit switches, height adjust button, and power switch, and posts to DriverFeederFSM
MicrophoneService: Responds to microphone inputs (sufficiently high amplitude sound) and posts to DriverFeederFSM
WaveService: State machine handling logic to count number of waves and posts to DriverFeederFSM
EventChecker: Implements several miscellaneous event checkers
ShiftRegisterSendService: Handles logic and output sequence required to set each of 16 shift register output bits to desired value. Receives events from multiple modules to set shift register outputs
SolenoidControlService: Outputs digital output to actuate solenoid linear actuator (push and pull)Â
EncoderDecode1FSM: State machine decoding quadrature encoder readings from encoder 1 (food arm) into relative position and posts changes in position to MotorControlService
EncoderDecode2FSM: State machine decoding quadrature encoder readings from encoder 2 (napkin arm) into relative position and posts changes in position to MotorControlService
MotorControlService: Implements simple non-blocking PWM-based feedback motor control for both motors by converting position updates into control PWM (which is output through pin) and direction/braking inputs (posted to ShiftRegisterControlService)
main: Handles ME218A event-based programming framework loop