Project Initialization

First Upload to Gitea
This commit is contained in:
2026-07-29 19:23:45 +02:00
commit c34449aac5
23 changed files with 2046 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
from threading import Thread, Event
from queue import Queue
import numpy as np
import serial
import time
import config as cfg
import DataTypes as dt
class ArduinoCommunication(Thread):
def __init__(self, port=cfg.port, baudrate=cfg.baudrate, timeout=cfg.timeout):
super().__init__()
self.daemon = True # Thread schließt sich beim Programmende
self.serial_conn = serial.Serial(port, baudrate, timeout=timeout)
time.sleep(2) # Warten bis Arduino ready
self.command_queue = Queue()
self.response_queue = Queue()
self.running = Event()
self.running.set()
def run(self):
while self.running.is_set():
# 1. Befehle senden
if not self.command_queue.empty():
command = self.command_queue.get()
self._write(command)
# 2. Antwort lesen (falls vorhanden)
if self.serial_conn.in_waiting > 0:
line = self.serial_conn.readline().decode('utf-8', errors='ignore').strip()
if line:
print(f"[Arduino] {line}")
self.response_queue.put(line)
time.sleep(0.01)
# Werte auf Arduino schreiben
def write(self, target):
if isinstance(target, dt.RadArray):
target = dt.DegArray(np.degrees(target.data))
if self.serial_conn and self.serial_conn.is_open:
leg_str = '\n'.join([','.join(map(str, row)) for row in target])
formatted_data = f"<{leg_str}>"
print(f"Gesendete Daten:\n{formatted_data}")
self.serial_conn.write(bytes(formatted_data, 'utf-8'))
# Werte von Arduino ablesen und Synchronisierunga
def wait4arduino(self, expected_message):
while True:
# Lese eine Zeile von der seriellen Verbindung
data = self.serial_conn .readline()
# Konvertiere die Zeile in einen lesbaren String
data = str(data, "utf-8").strip("\r\n")
# Debugging-Ausgabe (optional)
print(f"Empfangene Daten: {data}")
# Ueberpruefe, ob die empfangene Nachricht der erwarteten Nachricht entspricht
if data == expected_message:
print("Bewegung abgeschlossen!")
break
else:
time.sleep(0.05)
def _write(self, message):
if self.serial_conn and self.serial_conn.is_open:
self.serial_conn.write(message.encode('utf-8'))
def stop(self):
self.running.clear()
self.join()
self.serial_conn.close()