Global Timers

A global timer ends an infinite loop when 5 seconds have passed.

../../_images/global_timers.svg
from bpod_core.fsm import StateMachine

fsm = StateMachine()

fsm.set_global_timer(
    index=0,
    duration=5,
)

fsm.add_state(
    name='StartGlobalTimer',
    timer=0.25,
    transitions={'Tup': 'Port1Light'},
    actions={'GlobalTimerTrig': 0},
)
fsm.add_state(
    name='Port1Light',
    timer=0.25,
    transitions={
        'Tup': 'Port3Light',
        'GlobalTimer0_End': '>exit',
    },
    actions={'PWM1': 255},
)
fsm.add_state(
    name='Port3Light',
    timer=0.25,
    transitions={
        'Tup': 'Port1Light',
        'GlobalTimer0_End': '>exit',
    },
    actions={'PWM3': 255},
)
{
  "states": {
    "StartGlobalTimer": {
      "timer": 0.25,
      "transitions": {
        "Tup": "Port1Light"
      },
      "actions": {
        "GlobalTimerTrig": 0
      }
    },
    "Port1Light": {
      "timer": 0.25,
      "transitions": {
        "Tup": "Port3Light",
        "GlobalTimer0_End": ">exit"
      },
      "actions": {
        "PWM1": 255
      }
    },
    "Port3Light": {
      "timer": 0.25,
      "transitions": {
        "Tup": "Port1Light",
        "GlobalTimer0_End": ">exit"
      },
      "actions": {
        "PWM3": 255
      }
    }
  },
  "global_timers": {
    "0": {
      "duration": 5.0
    }
  }
}
states:
  StartGlobalTimer:
    timer: 0.25
    transitions:
      Tup: Port1Light
    actions:
      GlobalTimerTrig: 0
  Port1Light:
    timer: 0.25
    transitions:
      Tup: Port3Light
      GlobalTimer0_End: '>exit'
    actions:
      PWM1: 255
  Port3Light:
    timer: 0.25
    transitions:
      Tup: Port1Light
      GlobalTimer0_End: '>exit'
    actions:
      PWM3: 255
global_timers:
  0:
    duration: 5.0