diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7bac581 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +python-osc +pyserial \ No newline at end of file diff --git a/src/Python/main.py b/src/Python/main.py new file mode 100644 index 0000000..4a551d0 --- /dev/null +++ b/src/Python/main.py @@ -0,0 +1,71 @@ +""" +Basic arse driver / software that just does the haptics. +""" + +from threading import Thread +import argparse +import struct +import time +import os + +from pythonosc.dispatcher import Dispatcher +from pythonosc import osc_server +import serial + +class Device: + """ + Holds the serial port and opccasionally updates it + """ + + def __init__(self, port: os.PathLike, refreshRate: int=30): + self._run = True + self._ser = serial.Serial(port, 9600) + self.areas = {'Fwd': 0, 'Mid': 0, 'Bck': 0} + self._updateThread = Thread(target=self._update) + self.refreshRate = refreshRate + self.intensity = 1 + + self._updateThread.start() + + def updateAreasFromOSC(self, addr: str, value: float): + """ + Updates the areas variable based on an OSC message. + """ + + area = addr.split('/')[-1] + self.areas[area] = round(value*255) + + def _update(self): + while self._run: + values = self.areas.values() + values = [round(v * self.intensity) for v in values] + self._ser.write(struct.pack('