schlauch und flowrate ok

This commit is contained in:
jens 2025-07-09 23:33:59 +02:00
parent 05236edd70
commit e3cf7c363a
2 changed files with 61 additions and 12 deletions

View File

@ -47,8 +47,14 @@ class PHControllerGUI(QMainWindow):
self.pump_status.setFont(QFont('Arial', 16)) self.pump_status.setFont(QFont('Arial', 16))
self.pump_status.setAlignment(Qt.AlignmentFlag.AlignCenter) self.pump_status.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.flow_rate_label = QLabel("ml/sec: --")
self.flow_rate_label.setFont(QFont('Arial', 14))
self.flow_rate_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.flow_rate_label.setVisible(False) # Initially hidden
status_layout.addWidget(self.ph_label) status_layout.addWidget(self.ph_label)
status_layout.addWidget(self.pump_status) status_layout.addWidget(self.pump_status)
status_layout.addWidget(self.flow_rate_label)
status_group.setLayout(status_layout) status_group.setLayout(status_layout)
# Control Group # Control Group
@ -134,6 +140,13 @@ class PHControllerGUI(QMainWindow):
self.tube_request_timer = QTimer() self.tube_request_timer = QTimer()
self.tube_request_timer.timeout.connect(self.request_tube_id) self.tube_request_timer.timeout.connect(self.request_tube_id)
# Timer for flow rate requests (when pump is running)
self.flow_rate_timer = QTimer()
self.flow_rate_timer.timeout.connect(self.request_flow_rate)
# Track pump state
self.pump_is_running = False
# Enable/disable controls based on connection # Enable/disable controls based on connection
self.set_controls_enabled(False) self.set_controls_enabled(False)
@ -183,11 +196,16 @@ class PHControllerGUI(QMainWindow):
# Stop tube ID polling # Stop tube ID polling
self.tube_request_timer.stop() self.tube_request_timer.stop()
# Stop flow rate polling
self.flow_rate_timer.stop()
self.connect_btn.setText("Verbinden") self.connect_btn.setText("Verbinden")
self.status_bar.showMessage("Getrennt") self.status_bar.showMessage("Getrennt")
self.set_controls_enabled(False) self.set_controls_enabled(False)
self.ph_label.setText("pH: --") self.ph_label.setText("pH: --")
self.pump_status.setText("Pumpe: --") self.pump_status.setText("Pumpe: --")
self.flow_rate_label.setVisible(False)
self.pump_is_running = False
def set_controls_enabled(self, enabled): def set_controls_enabled(self, enabled):
self.pump_on_btn.setEnabled(enabled) self.pump_on_btn.setEnabled(enabled)
@ -223,21 +241,31 @@ class PHControllerGUI(QMainWindow):
if self.serial_connection and self.serial_connection.is_open: if self.serial_connection and self.serial_connection.is_open:
self.send_command("<13>") # Request current tube size self.send_command("<13>") # Request current tube size
def request_flow_rate(self):
"""Request flow rate from Arduino when pump is running"""
if self.serial_connection and self.serial_connection.is_open and self.pump_is_running:
self.send_command("<18>") # Request current flow rate
def send_pump_command(self, state): def send_pump_command(self, state):
if state == 1: if state == 1:
self.send_command("<11>") # Pump on self.send_command("<11>") # Pump on
self.pump_status.setText("Pumpe: Ein") self.pump_status.setText("Pumpe: Ein")
self.pump_is_running = True
self.flow_rate_label.setVisible(True)
self.flow_rate_timer.start(1000) # Request flow rate every second
else: else:
self.send_command("<12>") # Pump off self.send_command("<12>") # Pump off
self.pump_status.setText("Pumpe: Aus") self.pump_status.setText("Pumpe: Aus")
self.pump_is_running = False
self.flow_rate_label.setVisible(False)
self.flow_rate_timer.stop()
def send_tube_command(self, index): def send_tube_command(self, index):
# Only send command if not updating from Arduino response # Only send command if not updating from Arduino response
if not self.updating_tube_combo: if not self.updating_tube_combo:
# Simple approach: send <1XX> where XX is 20+index # Send command in format <120> to <145> for tube indices 0-25
# This should trigger the default case in Arduino command_number = 120 + index # 120-145 for tubes 0-25
# command_number = 120 + index # 120-145 for tubes 0-25 self.send_command(f"<{command_number}>")
self.send_command(f"<17{index}>")
self.status_bar.showMessage(f"Schlauchgröße {self.tube_combo.itemText(index)} ausgewählt") self.status_bar.showMessage(f"Schlauchgröße {self.tube_combo.itemText(index)} ausgewählt")
def send_calibration_command(self, ph): def send_calibration_command(self, ph):
@ -288,6 +316,12 @@ class PHControllerGUI(QMainWindow):
self.status_bar.showMessage(f"Schlauchgröße {self.tube_combo.currentText()} geladen") self.status_bar.showMessage(f"Schlauchgröße {self.tube_combo.currentText()} geladen")
except ValueError: except ValueError:
pass pass
elif data.startswith('F'): # Flow rate (ml/sec)
try:
flow_rate = float(data[1:])
self.flow_rate_label.setText(f"ml/sec: {flow_rate:.4f}")
except ValueError:
pass
except Exception as e: except Exception as e:
self.status_bar.showMessage(f"Lesefehler: {str(e)}") self.status_bar.showMessage(f"Lesefehler: {str(e)}")
@ -296,6 +330,7 @@ class PHControllerGUI(QMainWindow):
self.read_timer.stop() self.read_timer.stop()
self.ph_request_timer.stop() self.ph_request_timer.stop()
self.tube_request_timer.stop() self.tube_request_timer.stop()
self.flow_rate_timer.stop()
self.close_connection() self.close_connection()
event.accept() event.accept()

View File

@ -293,18 +293,32 @@ if ( RxCmd[1] == '1' ){
} }
break; break;
} }
case '8':{ // Schlauchdaten anfordern case '8':{// Flow Rate anfordern (ml/sec)
Serial.print('<'); Serial.print("<F");
Serial.print('#'); double mlpersec = (ml[tubid] * korrf * 20) / 60; // tube * korrektur * 20 rpm / 60 sec
double mlpersec =( ml[tubid]*korrf*2)/6; // tube * 20 Um/min * korecturfaktor durch 60 sec Serial.print(mlpersec, 4); // 4 decimal places
mlpersec = mlpersec*100000; Serial.println(">");
Serial.print(mlpersec); //
Serial.println('>');
break; break;
} }
} }
} else {
// Handle other commands like tube selection <120> to <145>
if (RxCmd[0] == '<' && RxCmd[1] == '1') {
// Parse 3-digit commands starting with 1
int cmd = (RxCmd[1] - '0') * 100 + (RxCmd[2] - '0') * 10 + (RxCmd[3] - '0');
if (cmd >= 120 && cmd <= 145) {
// Tube selection: 120-145 maps to tube indices 0-25
int new_tubid = cmd - 120;
if (new_tubid >= 0 && new_tubid <= MAXTUB) {
tubid = new_tubid;
EEPROM.put(ee_tubid, tubid);
Serial.print("<T");
Serial.print(tubid);
Serial.println(">"); // Bestätigung
}
}
}
} }