From cdc69527ab56fe578074a832662affa698b27865 Mon Sep 17 00:00:00 2001 From: adriana-lohz Date: Fri, 20 May 2022 19:55:48 +0200 Subject: [PATCH 1/2] HTML and BAT files for running the graphical interface (Biosignals Plux) The HTML for graphically depicting the EEG, ECG and EDA readings (from the Biosignals Plux device) are included in the examples>> banana_demo folder. A BAT file for running the program on the Anaconda environment is also included. In this file, the URL with the location of art-bio.py must be updated according to the local file address. --- biosignals.bat | 5 + examples/banana_demo/heart.png | Bin 0 -> 51209 bytes examples/banana_demo/lungs1.png | Bin 0 -> 15145 bytes .../banana_demo/visualize_biosignals.html | 422 ++++++++++++++++++ 4 files changed, 427 insertions(+) create mode 100644 biosignals.bat create mode 100644 examples/banana_demo/heart.png create mode 100644 examples/banana_demo/lungs1.png create mode 100644 examples/banana_demo/visualize_biosignals.html diff --git a/biosignals.bat b/biosignals.bat new file mode 100644 index 0000000..b94e080 --- /dev/null +++ b/biosignals.bat @@ -0,0 +1,5 @@ +@ECHO on +call C:\Users\MTG-user\anaconda3\Scripts\activate.bat activate art-bio +cd C:\Users\MTG-user\Desktop\art-bio-biosignalsplux +python art-bio.py -d biosignalsplux -c reeg ws -c recg ws -c reda ws -c reeg file -c recg file -c reda file --filename readings.txt +PAUSE \ No newline at end of file diff --git a/examples/banana_demo/heart.png b/examples/banana_demo/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..28dced85cd20ca693821d37504b2a0439aad54a3 GIT binary patch literal 51209 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 aiJ)23`y+16zeCGItyz`uUj4iBzy2@8#q_@b literal 0 HcmV?d00001 diff --git a/examples/banana_demo/lungs1.png b/examples/banana_demo/lungs1.png new file mode 100644 index 0000000000000000000000000000000000000000..ea2904bf303d384608c563f4fee67bfe833c79fd GIT binary patch literal 15145 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 literal 0 HcmV?d00001 diff --git a/examples/banana_demo/visualize_biosignals.html b/examples/banana_demo/visualize_biosignals.html new file mode 100644 index 0000000..14a4019 --- /dev/null +++ b/examples/banana_demo/visualize_biosignals.html @@ -0,0 +1,422 @@ + + + + Raw data visualizer + + + + + +
La sesión ha iniciado.
+ +
+ +

Ritmo cardíaco

+ +

Respiración

+ + +

Alpha

+ + +
+
+ + + + + + + From d6ca906421f3d4c0d0e8f5d4c763a28971e35b93 Mon Sep 17 00:00:00 2001 From: adriana-lohz Date: Sat, 21 May 2022 09:18:36 +0200 Subject: [PATCH 2/2] Update router.py Changes in router.py in order to print, next to each reading in the output TXT, the time elapsed since the beginning of the experiment. --- router.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/router.py b/router.py index 7254a09..7eae571 100644 --- a/router.py +++ b/router.py @@ -20,6 +20,9 @@ def digital_out(): pass self.digital_out_func = digital_out + #self.current_time = time.time() + self.ini_time = 0 + def init_destinations(self, connections): destinations = [] @@ -32,22 +35,30 @@ def init_destinations(self, connections): self.osc_client = udp_client.SimpleUDPClient(address_port[0], int(address_port[1])) if 'file' in destinations: self.file_handle = open(self.filename, 'w') - print("initializing file " + self.filename) + print("initializing file" + self.filename) + + self.ini_time = time.time() + self.file_handle.write('{}: {}\n'.format('initial time',self.ini_time)) + + if 'ws' in destinations: self.ws_server = WSServer(self.ws_port) def route_data(self, source, connections, features, raw_data): source_connections = [] + + current_time = time.time() + if source in connections: source_connections += connections[source] - current_time = time.time() - + + # raw data if 'r' + source in connections: source_connections += connections['r' + source] - for destination in connections['r' + source]: + for destination in connections['r' + source]: for i, channel in enumerate(raw_data): src = source if i > 0: @@ -59,7 +70,7 @@ def route_data(self, source, connections, features, raw_data): osc_address = self.osc_prefix + osc_dest self.osc_client.send_message(osc_address, data) elif destination == 'file': - self.file_handle.write('{} {}: {}\n'.format(current_time, osc_dest, str(raw_data))) + self.file_handle.write('{} {}: {}\n'.format(current_time-self.ini_time, osc_dest, str(raw_data))) elif destination == 'ws': self.ws_server.add_message('{}|{}/{}'.format(current_time, osc_dest, str(raw_data))) @@ -78,12 +89,9 @@ def route_data(self, source, connections, features, raw_data): if destination == 'osc': self.osc_client.send_message(self.osc_prefix + osc_dest, data) elif destination == 'file': - self.file_handle.write('{} {}: {}\n'.format(current_time, osc_dest, str(data))) + self.file_handle.write('{} {}: {}\n'.format(current_time-self.ini_time, osc_dest, str(data))) elif destination == 'ws': self.ws_server.add_message('{}|{}/{}'.format(current_time, osc_dest, str(data))) elif destination == 'digital': if self.digital_out_func: self.digital_out_func() - - -