123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #!/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()
|