Get test library running

This commit is contained in:
2025-06-15 12:01:59 +02:00
parent b00466c5dd
commit b01232b552
5 changed files with 165 additions and 48 deletions

View File

@@ -25,24 +25,36 @@
Label:
id: sensor1
text: ""
size_hint: 1, 1
halign: 'left'
text_size: self.size
Label:
text: "Sensor 2: "
font_size: 20
Label:
id: sensor2
text: ""
size_hint: 1, 1
halign: 'left'
text_size: self.size
Label:
text: "Sensor 3: "
font_size: 20
Label:
id: sensor3
text: ""
size_hint: 1, 1
halign: 'left'
text_size: self.size
Label:
text: "Sensor 4: "
font_size: 20
Label:
id: sensor4
text: ""
size_hint: 1, 1
halign: 'left'
text_size: self.size
Button:
text: "Connect"
size_hint: 0.2, 0.1

View File

@@ -1,5 +1,6 @@
from ctypes import ArgumentError
from time import time
from types import prepare_class
from typing import List, override
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
@@ -73,14 +74,15 @@ class ReaderThread(threading.Thread):
data.append(
f"Tadc: {
self._decoder.decode_int(received[12 * i:12 * i + 4])
}\nTemperature: {
self._decoder.decode_float(received[12 * i + 5:12 * i + 11])
}\nDuty-Cycle: {
self._decoder.decode_float_long(received[48 + 5 * i: 52 + 5 * i]) / 65535.0 * 100
}\nTemp: {
round(self._decoder.decode_float(received[12 * i + 5:12 * i + 11]) * 1000) / 1000
}°C\nDC: {
round((self._decoder.decode_float_long(received[48 + 5 * i: 52 + 5 * i]) / 65535.0 * 100) * 1000) / 1000
}%"
)
# Calculate the frequency of updates
data.append(str(1 / (time() - start_time)))
data.append(str(round((1 / (time() - start_time)) * 1000) / 1000) + " Hz")
synced_queue.put(data)
else:
# Send error message to the UI updater
synced_queue.put(["ERR_HOOK"])
@@ -105,25 +107,36 @@ class MainScreen(Screen):
self._event = None
# Prepare the reader thread
self._reader = ReaderThread()
self._reader.setDaemon(True)
self._reader.set_com(com)
self._prepare_reader()
self._has_run = False
self._has_connected = False
# Call the constructor for the Screen class
super().__init__(**kw)
def _prepare_reader(self):
self._reader = ReaderThread()
self._reader.setDaemon(True)
self._reader.set_com(self._com)
# Start the connection to the micro-controller to read data from it.
# This also now starts the reader thread to continuously read out data
def start(self):
# Prevent running multiple times
if self._has_connected:
return
self.ids.status.text = "Connecting..."
if self._com.connect():
print("Acquired connection")
self._has_connected = True
self._has_run = True
if self._has_run:
self._prepare_reader()
# Start communication
self._reader.start()
print("Reader has started")
Clock.schedule_interval(self._update_screen, 0.5)
self._event = Clock.schedule_interval(self._update_screen, 0.5)
else:
self.ids.status.text = "Connection failed"
TwoActionPopup().open(
@@ -142,6 +155,11 @@ class MainScreen(Screen):
if self._event != None:
self._event.cancel()
self._reader.stop()
try:
self._reader.join()
except:
pass
try:
self._com.send("NM")
except:
@@ -185,7 +203,7 @@ class MainScreen(Screen):
# Switch the mode for the micro-controller
def switch_mode(self, new_mode: str):
# Store if we have been connected to the micro-controller before mode was switched
was_connected = self._reader.is_alive
was_connected = self._has_connected
# Disconnect from the micro-controller
self.end()
@@ -201,6 +219,7 @@ class MainScreen(Screen):
SingleRowPopup().open("Failed to switch modes")
return
self.ids.status.text = "Mode set"
# If we have been connected, reconnect
if was_connected:
self.start()

View File

@@ -58,6 +58,8 @@ class ProgramScreen(Screen):
# Add it to the config
config.append(config_sensor_i)
self._set_ui(config)
else:
TwoActionPopup().open(
"Failed to connect to micro-controller, retry?",
@@ -100,8 +102,9 @@ class ProgramScreen(Screen):
else:
try:
self._instructions.change_config(data)
except:
except Exception as e:
SingleRowPopup().open("Could not save data!")
return
SingleRowPopup().open("Data saved successfully")