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()))
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()
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()