예제 #1
0
def _start():
    """Start the module
    This uses the global variables from setup and adds a set of global variables
    """
    global parser, args, config, r, response, patch
    global monitor, debug, delay, ft_host, ft_port, ft_output, board_id, streamer_params, params, board

    # this can be used to show parameters that have changed
    monitor = EEGsynth.monitor(name=name,
                               debug=patch.getint("general", "debug"))

    # get the general options from the configuration file
    debug = patch.getint("general", "debug")
    delay = patch.getfloat("general", "delay")

    try:
        ft_host = patch.getstring("fieldtrip", "hostname")
        ft_port = patch.getint("fieldtrip", "port")
        monitor.success("Trying to connect to buffer on %s:%i ..." %
                        (ft_host, ft_port))
        ft_output = FieldTrip.Client()
        ft_output.connect(ft_host, ft_port)
        monitor.success("Connected to output FieldTrip buffer")
    except:
        raise RuntimeError("cannot connect to output FieldTrip buffer")

    # get the options that are specific for BrainFlow
    board_id = patch.getint("brainflow", "board_id", default=-1)
    streamer_params = patch.getstring("brainflow",
                                      "streamer_params",
                                      default=None)
    params = BrainFlowInputParams()
    params.ip_port = patch.getint("brainflow", "ip_port", default=0)
    params.serial_port = patch.getstring("brainflow",
                                         "serial_port",
                                         default="/dev/cu.usbmodem11")
    params.mac_address = patch.getstring("brainflow",
                                         "mac_address",
                                         default="")
    params.other_info = patch.getstring("brainflow", "other_info", default="")
    params.serial_number = patch.getstring("brainflow",
                                           "serial_number",
                                           default="")
    params.ip_address = patch.getstring("brainflow", "ip_address", default="")
    params.ip_protocol = patch.getint("brainflow", "ip_protocol", default=0)
    params.timeout = patch.getint("brainflow", "timeout", default=0)
    params.file = patch.getstring("brainflow", "file", default="")

    monitor.success("Starting BrainFlow ...")

    BoardShim.disable_board_logger()
    # BoardShim.enable_board_logger()
    # BoardShim.enable_dev_board_logger()

    board = BoardShim(board_id, params)
    board.prepare_session()
    board.start_stream(45000, streamer_params)

    # get all data and remove it from internal buffer
    board.get_board_data()

    monitor.success("Connected to " + board.get_device_name(board_id))
    monitor.info("fsample =", board.get_sampling_rate(board_id))
    monitor.info("nchans  =", board.get_num_rows(board_id))

    ft_output.putHeader(board.get_num_rows(board_id),
                        float(board.get_sampling_rate(board_id)),
                        FieldTrip.DATATYPE_FLOAT32)

    # there should not be any local variables in this function, they should all be global
    if len(locals()):
        print("LOCALS: " + ", ".join(locals().keys()))
예제 #2
0
        label_extractor(BoardShim.get_analog_channels, board_id, True),
        "Gyro":
        label_extractor(BoardShim.get_gyro_channels, board_id, True),
        "Other":
        label_extractor(BoardShim.get_other_channels, board_id, True)
    }
    for key, value in label_dict.items():
        for count, channel in enumerate(value):
            label_list[channel] = key + " " + str(count) if len(
                value) > 1 else key

    with open(output_file, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(np.arange(BoardShim.get_num_rows(board_id)))
        writer.writerow([
            "Sampling Rate: " + str(BoardShim.get_sampling_rate(board_id)) +
            " Hz"
        ])
        writer.writerow(["Board: " + BoardShim.get_device_name(board_id)])
        writer.writerow(label_list)

time.sleep(display_interval / 1000)
ani = FuncAnimation(plt.gcf(),
                    animate,
                    fargs=(board, ),
                    interval=display_interval)
plt.show()

board.stop_stream()
board.release_session()
예제 #3
0
def main():
    show_img = None
    event_img = None
    screen_col = None
    counter = 3
    #number of trials
    trials = 3
    event_function = random_prompt()
    pygame.time.set_timer(pygame.USEREVENT, 1000)
    run = True
    print_first = True
    raise_indicate = False
    clench_indicate = False

    BoardShim.enable_dev_board_logger()
    params = BrainFlowInputParams()
    # for synthetic board:
    board_id = BoardIds.SYNTHETIC_BOARD.value
    # for openbci ganglion board_id:
    #board_id = BoardIds.GANGLION_BOARD.value
    #params.serial_port = 'COM3'
    #params.mac_address = '12345'
    board = BoardShim(board_id, params)
    board.prepare_session()
    board.start_stream()
    BoardShim.log_message(LogLevels.LEVEL_INFO.value,
                          'start sleeping in the main thread')

    label_list = [None] * BoardShim.get_num_rows(board_id)
    label_dict = {
        "Battery":
        label_extractor(BoardShim.get_battery_channel, board_id, False),
        "EEG":
        label_extractor(BoardShim.get_eeg_channels, board_id, True),
        "EMG":
        label_extractor(BoardShim.get_emg_channels, board_id, True),
        "ECG":
        label_extractor(BoardShim.get_ecg_channels, board_id, True),
        "Temperature":
        label_extractor(BoardShim.get_temperature_channels, board_id, True),
        "Resistance":
        label_extractor(BoardShim.get_resistance_channels, board_id, True),
        "EOG":
        label_extractor(BoardShim.get_eog_channels, board_id, True),
        "EXG":
        label_extractor(BoardShim.get_exg_channels, board_id, True),
        "EDA":
        label_extractor(BoardShim.get_eda_channels, board_id, True),
        "PPG":
        label_extractor(BoardShim.get_ppg_channels, board_id, True),
        "Accel":
        label_extractor(BoardShim.get_accel_channels, board_id, True),
        "Analog":
        label_extractor(BoardShim.get_analog_channels, board_id, True),
        "Gyro":
        label_extractor(BoardShim.get_gyro_channels, board_id, True),
        "Other":
        label_extractor(BoardShim.get_other_channels, board_id, True)
    }

    for key, value in label_dict.items():
        for count, channel in enumerate(value):
            label_list[channel] = key + " " + str(count) if len(
                value) > 1 else key

    with open(output_file, 'w', newline='') as file:
        writer = csv.writer(file)
        #writer.writerow(np.arange(BoardShim.get_num_rows(board_id)))
        writer.writerow([
            "Sampling Rate: " + str(BoardShim.get_sampling_rate(board_id)) +
            " Hz"
        ])
        writer.writerow(["Board: " + BoardShim.get_device_name(board_id)])
        writer.writerow(np.append(np.append(label_list, "Raise"), "Clench"))

    while run:
        data = board.get_board_data().T

        with open(output_file, 'a', newline='') as file:
            writer = csv.writer(file)
            # if (print_first):
            #     writer.writerow(np.arange(data[0].size))
            #     print_first = False
            for i in range(data[:, 0].size):
                if raise_indicate:
                    raise_event = 1
                else:
                    raise_event = 0
                if clench_indicate:
                    clench_event = 1
                else:
                    clench_event = 0
                writer.writerow(
                    np.append(np.append(data[i, :], raise_event),
                              clench_event))

        for event in pygame.event.get():
            if event.type == pygame.USEREVENT:
                show_img, screen_col, event_img, raise_indicate, clench_indicate = event_function(
                    counter)
                counter -= 1
                if counter < 0 and trials > 1:
                    trials -= 1
                    counter = 3
                    event_function = random_prompt()
            if event.type == pygame.QUIT:
                run = False

        if screen_col:
            WIN.fill(screen_col)
        if event_img:
            WIN.blit(event_img, (100, 100))
        if show_img:
            WIN.blit(show_img, (300, 300))
        pygame.display.update()

    pygame.quit()
    board.stop_stream()
    board.release_session()