def advance(self, direction=None):
        self.log.debug("Received command advance Reel in direction: '%s'",
                       direction)

        if not direction:
            # A direction wasn't specified, but let's see if this reel wants
            # to be in another position and fire it if so
            if (self._destination_index != self.assumed_value and
                    self.config['rollover']):
                direction = 1
            elif (self._destination_index < self.assumed_value and
                      self.config['coil_dec']):
                direction = -1
            else:  # no direction specified and everything seems ok
                return

        self.set_destination_value(direction)
        # above line also sets self._destination_index

        if self.next_pulse_time > time.time():
            # This reel is not ready to pulse again
            # Note we don't allow this to be overridden. Figure the
            # recycle time is there for a reason and we don't want to
            # potentially break an old delicate mechanism
            self.log.debug("Received advance request but this reel is not "
                           "ready")
            return False  # since we didn't advance...in case anyone cares?

        if direction == 1:
            # Ensure we're not at the limit of a reel that can't roll over
            if not ((self.physical_value == self.config['limit_hi']) and
                        not self.config['rollover']):
                self.log.debug("Ok to advance")

                # Since we're firing, assume we're going to make it
                self.assumed_value = self._destination_index
                self.log.debug("+++Setting assumed value to: %s",
                               self.assumed_value)

                # Reset our statuses (stati?) :)
                self.ready = False
                self.hw_sync = False

                # fire the coil
                self.config['coil_inc'].pulse()

                # set delay to notify when this reel can be fired again
                self.delay.add(name='ready_to_fire',
                               ms=self.config['repeat_pulse_time'],
                               callback=self._ready_to_fire)

                self.next_pulse_time = (time.time() +
                                        (self.config['repeat_pulse_time'] /
                                         1000.0))
                self.log.debug("@@@ New Next pulse ready time: %s",
                               self.next_pulse_time)

                # set delay to check the hw switches
                self.delay.add(name='hw_switch_check',
                               ms=self.config['hw_confirm_time'],
                               callback=self.check_hw_switches)

                return True

            else:
                self.log.warning("Received command to increment reel, but "
                                 "we're at the max limit and this reel "
                                 "cannot roll over")
                return False

        # if direction is not 1 we'll assume down, but only if we have
        # the ability to decrement this reel
        elif 'coil_dec' in self.config:
            return False  # since we haven't written this yet  todo

            # todo log else error?
Function for plotting the components as epochs.
dataset/ETHPy150Open missionpinball/mpf/mpf/devices/score_reel.py/ScoreReel.advance--crossover with--dataset/ETHPy150Open mne-tools/mne-python/mne/viz/ica.py/_plot_sources_epochs