Conditions

A condition (Port2 high) causes the state ‘Port2Light’ to be skipped without waiting for the timer to expire.

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

fsm = StateMachine()

fsm.set_condition(
    index=2,
    channel='Port2',
    value=True,  # condition is true when Port2 is high
)

fsm.add_state(
    name='Port1Light',
    timer=1,
    transitions={'Tup': 'Port2Light'},
    actions={'PWM1': 255},
)
fsm.add_state(
    name='Port2Light',
    timer=1,
    transitions={'Tup': 'Port3Light', 'Condition2': 'Port3Light'},
    actions={'PWM2': 255},
)
fsm.add_state(
    name='Port3Light',
    timer=1,
    transitions={'Tup': '>exit'},
    actions={'PWM3': 255},
)
{
  "states": {
    "Port1Light": {
      "timer": 1.0,
      "transitions": {
        "Tup": "Port2Light"
      },
      "actions": {
        "PWM1": 255
      }
    },
    "Port2Light": {
      "timer": 1.0,
      "transitions": {
        "Tup": "Port3Light",
        "Condition2": "Port3Light"
      },
      "actions": {
        "PWM2": 255
      }
    },
    "Port3Light": {
      "timer": 1.0,
      "transitions": {
        "Tup": ">exit"
      },
      "actions": {
        "PWM3": 255
      }
    }
  },
  "conditions": {
    "2": {
      "channel": "Port2",
      "value": true
    }
  }
}
states:
  Port1Light:
    timer: 1.0
    transitions:
      Tup: Port2Light
    actions:
      PWM1: 255
  Port2Light:
    timer: 1.0
    transitions:
      Tup: Port3Light
      Condition2: Port3Light
    actions:
      PWM2: 255
  Port3Light:
    timer: 1.0
    transitions:
      Tup: '>exit'
    actions:
      PWM3: 255
conditions:
  2:
    channel: Port2
    value: true