#!/bin/python3 import sys import time import math import serial N_ROWS = 5 N_COLS = 10 class SerialConnection: def __init__(self): self._ser = None self.port = None def connect(self, port = None): if port == None: port = self.port if port == None: for port in ["/dev/ttyUSB{}".format(p) for p in range(4)]: try: self._ser = serial.Serial(port, 38400) print("connected to " + port) self.port = port break except serial.SerialException: pass if port == None: for port in ["COM{}".format(p) for p in range(3,20)]: try: self._ser = serial.Serial(port, 38400) print("connected to " + port) self.port = port break except serial.SerialException: pass else: try: self._ser = serial.Serial(port, 38400) print("connected to " + port) self.port = port except serial.SerialException: pass if self._ser: self._ser.write(b'A' + b'\15' * N_ROWS*N_COLS) else: print("connection to port {} failed".format(port)) def send(self, pixels): if not self._ser: return try: self._ser.write(b'A') self._ser.write(bytes(pixels)) except serial.SerialException: self._ser = None def isConnected(self): return self._ser != None oldTime = time.time() oldPing = time.time() def getBytes(): pixels = [0] * (N_ROWS * N_COLS) for row in range(N_ROWS): for col in range(N_COLS): pixels[row*N_COLS + col] = int(math.sin(row + col + time.time()*15) * 8 + 8) pixels[49] = int(pixels[49]/2) return bytes([0x41] + pixels) client_address = None try: while True: if not client_address: data, addr = sock.recvfrom(16) print('received {} from {}'.format(data, addr)) client_address = addr else: sock.sendto(getBytes(), client_address) if time.time() - oldPing > 30: data, addr = sock.recvfrom(16) print('received {} from {}'.format(data, addr)) client_address = addr oldPing = time.time() oldTime = time.time() time.sleep(1/40) finally: print('closing socket') sock.close()