small bug fixes

This commit is contained in:
tillraab 2022-05-05 16:20:59 +02:00
parent 1f0020a3c4
commit be1a011e20
2 changed files with 9 additions and 180 deletions

View File

@ -1,20 +1,10 @@
from __future__ import print_function
import os
import datetime
from shutil import copyfile
try:
import RPi.GPIO as GPIO
except:
pass
import subprocess
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from time import sleep, time
from os import system
from sys import stdout
from IPython import embed
from uldaq import (get_daq_device_inventory, DaqDevice, AInScanFlag, ScanStatus,
ScanOption, create_float_buffer, InterfaceType, AiInputMode)
@ -77,31 +67,9 @@ class plot():
if show_y[enu] == False:
ax.tick_params(axis='y', which='both', left=False, right=False, labelleft=False)
self.axs.append(ax)
def GPIO_setup(LED1_pin, LED2_pin, Button1_pin, Button2_pin):
# LED output pins
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED1_pin, GPIO.OUT) # 1
GPIO.output(LED1_pin, GPIO.LOW)
GPIO.setup(LED2_pin, GPIO.OUT) # 2
GPIO.output(LED2_pin, GPIO.LOW)
LED_status = [False, False]
# switch controlled input
GPIO.setup(Button1_pin, GPIO.IN)
GPIO.setup(Button2_pin, GPIO.IN)
# GPIO.setup(Button1_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# GPIO.setup(Button2_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
return LED_status
def read_cfg(cfg_file, now, init_read=False):
cfg_f = open(cfg_file, 'r+')
cfg = cfg_f.readlines()
@ -142,76 +110,6 @@ def read_cfg(cfg_file, now, init_read=False):
return channels, samplerate, n_cols, n_rows, max_v, gain
# for line in cfg:
# if 'Columns1' in line:
# self.Grid.columns_val = int(line.split(':')[1].strip())
# elif 'Rows1' in line:
# self.Grid.rows_val = int(line.split(':')[1].strip())
# elif "ColumnDistance1" in line:
# self.Grid.col_dist_val = float(line.split(':')[-1].strip().replace('cm', ''))
# elif "RowDistance1" in line:
# self.Grid.row_dist_val = float(line.split(':')[-1].strip().replace('cm', ''))
# elif "ChannelOffset1" in line:
# self.Grid.channel_offset_val = int(line.split(':')[-1].strip())
# elif "ElectrodeType1" in line:
# self.Grid.elec_type_val = line.split(':')[-1].strip()
# elif "RefElectrodeType1" in line:
# self.Grid.ref_elec_type_val = line.split(":")[-1].strip()
# elif "RefElectrodePosX1" in line:
# self.Grid.ref_elec_posx_val = float(line.split(':')[-1].strip().replace('m', ''))
# elif 'RefElectrodePosY1' in line:
# self.Grid.ref_elec_posy_val = float(line.split(':')[-1].strip().replace('m', ''))
# elif 'WaterDepth1' in line:
# self.Grid.water_depth_val = float(line.split(':')[-1].strip().replace('m', ''))
#
# elif "AISampleRate" in line:
# self.HardWare.ai_sr_val = float(line.split(':')[-1].strip().replace('kHz', ''))
# elif "AIMaxVolt" in line:
# self.HardWare.ai_max_vol_val = float(line.split(':')[-1].strip().replace('mV', ''))
# elif "AmplName" in line:
# self.HardWare.amp_name_val = line.split(':')[-1].strip()
# elif "AmplModel" in line:
# self.HardWare.amp_model_val = line.split(':')[-1].strip()
# elif ' Type ' in line:
# self.HardWare.amp_type_val = line.split(':')[-1].strip()
# elif 'Gain' in line:
# self.HardWare.gain_val = line.split(':')[-1].strip()
# elif "HighpassCutoff" in line:
# self.HardWare.highpass_cutoff_val = int(line.split(':')[-1].strip().replace('Hz', ''))
# elif 'LowpassCutoff' in line:
# self.HardWare.lowpass_cutoff_val = float(line.split(':')[-1].strip().replace('kHz', ''))
#
# elif "Experiment.Name" in line:
# self.Recording.experiment_name_val = line.split(':')[-1].strip()
# elif "StartDate" in line:
# self.Recording.startdate_val = line.split(':')[-1].strip()
# elif "StartTime" in line:
# self.Recording.starttime_val = ':'.join(line.split(':')[1:]).strip()
# elif "Location" in line:
# self.Recording.location_val = line.split(':')[-1].strip()
# elif "Position" in line:
# self.Recording.position_val = line.split(':')[-1].strip()
# elif "WaterTemperature" in line:
# self.Recording.water_temp_val = float(line.split(':')[-1].strip().replace('C', ''))
# elif "WaterConductivity" in line:
# self.Recording.water_cond_val = float(line.split(':')[-1].strip().replace('uS/cm', ''))
# elif 'WaterpH' in line:
# self.Recording.water_ph_val = float(line.split(':')[-1].strip().replace('pH', ''))
# elif "WaterOxygen" in line:
# self.Recording.water_oxy_val = float(line.split(':')[-1].strip().replace('mg/l', ''))
# elif "Comment" in line:
# self.Recording.comment_val = ':'.join(line.split(':')[1:]).strip()
# elif "Experimenter" in line:
# self.Recording.experimenter_val = ':'.join(line.split(':')[1:]).strip()
# elif "DataTime" in line:
# self.Recording.datatime_val = int(line.split(':')[-1].strip().replace('ms', ''))
# elif "DataInterval" in line:
# self.Recording.datainterval_val = int(line.split(':')[-1].strip().replace('ms', ''))
# elif "BufferTime" in line:
# self.Recording.buffertime_val = int(line.split(':')[-1].strip().replace('s', ''))
# else:
# continue
def main():
now = datetime.datetime.now()
@ -232,15 +130,6 @@ def main():
# read and edit config file
channels, rate, n_cols, n_rows, max_v, gain = read_cfg(init_cfgfile, now)
LED1_pin = 11
LED2_pin = 13
Button1_pin = 16
Button2_pin = 18
# LED_status = GPIO_setup(LED1_pin, LED2_pin, Button1_pin, Button2_pin)
# DAQ setup
if True:
status = ScanStatus.IDLE
@ -311,34 +200,11 @@ def main():
break
print(ranges[range_index])
# range_index = 0
# if range_index >= len(ranges):
# range_index = len(ranges) - 1
# Allocate a buffer to receive the data.
data = create_float_buffer(channel_count, samples_per_channel)
# system('clear')
# Start the acquisition.
rate = ai_device.a_in_scan(low_channel, high_channel, input_mode, ranges[range_index], samples_per_channel,
rate, scan_options, flags, data)
last_idx = 0
# f = open('/media/pi/data1/test_file.raw', 'wb')
# LED on when here ... wait for switch to start data aquisition
# GPIO.output(LED1_pin, GPIO.HIGH)
# LED_status[0] = True
# while GPIO.input(Button1_pin) == GPIO.LOW:
# sleep(.1)
# sleep(2)
# GPIO.output(LED1_pin, GPIO.LOW)
# LED_status[0] = False
LED_t = time()
LED_t_interval = 2
disp_eth_power = True
Plot = plot()
Plot.max_v = max_v
@ -351,35 +217,6 @@ def main():
init_fig = True
try:
while True:
# blinking LED
# if time() - LED_t < .1 and LED_status[0] == False:
# LED_status[0] = True
# GPIO.output(LED1_pin, GPIO.HIGH)
# if time() - LED_t >= .1 and LED_status[0] == True:
# LED_status[0] = False
# GPIO.output(LED1_pin, GPIO.LOW)
# if time() - LED_t >= LED_t_interval:
# LED_t = time()
#
# # dist & eth0 controll
# if GPIO.input(Button2_pin) == GPIO.HIGH:
# if disp_eth_power == True:
# subprocess.run(['tvservice', '-o'])
# subprocess.run(['vcgencmd', 'display_power', '0'])
#
# subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'down'])
# disp_eth_power = False
# else:
# if disp_eth_power == False:
# subprocess.run(['tvservice', '-p'])
# subprocess.run(['vcgencmd', 'display_power', '1'])
# subprocess.run(['sudo', '/bin/chvt', '6'])
# subprocess.run(['sudo', '/bin/chvt', '7'])
#
# subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'up'])
# disp_eth_power = True
# Get the status of the background operation
status, transfer_status = ai_device.get_scan_status()
index = transfer_status.current_index
@ -428,15 +265,6 @@ def main():
daq_device.disconnect()
daq_device.release()
if disp_eth_power == False:
subprocess.run(['tvservice', '-p'])
subprocess.run(['vcgencmd', 'display_power', '1'])
subprocess.run(['sudo', '/bin/chvt', '6'])
subprocess.run(['sudo', '/bin/chvt', '7'])
# subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'up'])
# GPIO.cleanup()
if __name__ == '__main__':
main()

View File

@ -152,7 +152,7 @@ class Recorder():
self.high_channel = self.config.channels - 1
self.buffer_sec = 20
self.samples_per_channel = self.samplerate * self.buffer_sec # * channels = Buffer size
self.samples_per_channel = self.config.samplerate * self.buffer_sec # * channels = Buffer size
self.buffer_size = self.samples_per_channel * self.config.channels
print('\nChannels: %.0f' % self.config.channels)
# rate = 20000
@ -292,8 +292,8 @@ class Recorder():
temp_interval = 300 # sec --> 5 min
disp_eth_power = True
self.samplerate = self.ai_device.a_in_scan(self.low_channel, self.high_channel, self.input_mode, self.ranges[self.range_index], self.samples_per_channel,
self.samplerate, self.scan_options, self.flags, data)
self.config.samplerate = self.ai_device.a_in_scan(self.low_channel, self.high_channel, self.input_mode, self.ranges[self.range_index], self.samples_per_channel,
self.config.samplerate, self.scan_options, self.flags, data)
status, transfer_status = self.ai_device.get_scan_status()
last_idx = 0
@ -322,7 +322,7 @@ class Recorder():
disp_eth_power = True
last_button_2_t = time()
if self.record_temp == True:
if self.config.record_temp == True:
if time() - temp_t0 > next_temp_t:
w1_f = open(self.w1_bus_path, 'r')
w1_file = w1_f.readlines()
@ -348,7 +348,7 @@ class Recorder():
# sync LED
if (time() - LED_t0) % sync_LED_t_interval < .1 and self.LED_status[2] == False:
if self.led_f != None:
Cidx = int((self.buffer_size * buffer_no + last_idx) / self.channels)
Cidx = int((self.buffer_size * buffer_no + last_idx) / self.config.channels)
self.led_f.write('%.4f\n' % (time() - LED_t0))
self.led_f.flush()
self.led_f2.write('%.0f\n' % Cidx)
@ -377,7 +377,7 @@ class Recorder():
else:
(np.array(data[last_idx:], dtype=np.float32) / self.config.gain).tofile(self.f)
if datetime.datetime.now().hour * 60 + datetime.datetime.now().minute >= self.end_clock[0] * 60 + self.end_clock[1]:
if datetime.datetime.now().hour * 60 + datetime.datetime.now().minute >= self.config.end_clock[0] * 60 + self.config.end_clock[1]:
self.f.flush()
GPIO.output(self.LED1_pin, GPIO.LOW)
GPIO.output(self.LED_out_pin, GPIO.LOW)
@ -391,6 +391,7 @@ class Recorder():
print('\nDone!')
self.f.close()
if self.config.record_temp == True:
self.temp_f.close()
self.led_f.close()
@ -426,7 +427,7 @@ def main():
rec_duration = int(sys.argv[1])
config.start_clock = [config.now.hour, config.now.minute]
config.end_clock = [config.now.hour, config.now.minute + rec_duration]
if config.end_clock[2] >= 60:
if config.end_clock[1] >= 60:
config.end_clock[0] += 1
config.end_clock[1] -= 60