threads for marquee and send text animation implemented. working! hopefully
This commit is contained in:
parent
174ac4c363
commit
c43fe55663
|
@ -15,6 +15,9 @@ class FlipdotSender(object):
|
||||||
C_BLACK = 0
|
C_BLACK = 0
|
||||||
C_WHITE = 255
|
C_WHITE = 255
|
||||||
|
|
||||||
|
global threadrunning
|
||||||
|
threadrunning=False
|
||||||
|
|
||||||
lastimgmap = []
|
lastimgmap = []
|
||||||
|
|
||||||
def __init__(self, udphost, udpport, img_size=(80,16), font_size=8, font_size_scroll=12,
|
def __init__(self, udphost, udpport, img_size=(80,16), font_size=8, font_size_scroll=12,
|
||||||
|
@ -40,7 +43,11 @@ class FlipdotSender(object):
|
||||||
self._font_family = font_family
|
self._font_family = font_family
|
||||||
self._chars_per_line = chars_per_line
|
self._chars_per_line = chars_per_line
|
||||||
|
|
||||||
self._sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
|
self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
|
||||||
|
def stopAnimation(self):
|
||||||
|
global threadrunning
|
||||||
|
threadrunning=False #tried to stop a running animation
|
||||||
|
|
||||||
|
|
||||||
def _list2byte(self, l):
|
def _list2byte(self, l):
|
||||||
|
@ -70,6 +77,7 @@ class FlipdotSender(object):
|
||||||
self._sock.sendto(bytes(packet), (self._udphost, self._udpport))'''
|
self._sock.sendto(bytes(packet), (self._udphost, self._udpport))'''
|
||||||
|
|
||||||
def _send(self, image,fadespeed=0): #changes slowly 'fadespeed'-pixels at a time
|
def _send(self, image,fadespeed=0): #changes slowly 'fadespeed'-pixels at a time
|
||||||
|
global threadrunning
|
||||||
#if fadespeed=0 -> change instant.
|
#if fadespeed=0 -> change instant.
|
||||||
#time to change= 1280/25*0.2
|
#time to change= 1280/25*0.2
|
||||||
imgmap = []
|
imgmap = []
|
||||||
|
@ -82,18 +90,26 @@ class FlipdotSender(object):
|
||||||
|
|
||||||
imgmaptmp=FlipdotSender.lastimgmap
|
imgmaptmp=FlipdotSender.lastimgmap
|
||||||
|
|
||||||
|
|
||||||
if fadespeed>0:
|
if fadespeed>0:
|
||||||
|
threadrunning=True
|
||||||
#diff=np.sum(np.array(imgmaptmp) != np.array(imgmap)) #different pixels
|
#diff=np.sum(np.array(imgmaptmp) != np.array(imgmap)) #different pixels
|
||||||
pixelchangeind=np.arange(self._img_size[0]*self._img_size[1])
|
pixelchangeind=np.arange(self._img_size[0]*self._img_size[1])
|
||||||
np.random.shuffle(pixelchangeind)
|
np.random.shuffle(pixelchangeind)
|
||||||
for _i,ind in enumerate(pixelchangeind):
|
for _i,ind in enumerate(pixelchangeind):
|
||||||
|
if threadrunning==False:
|
||||||
|
break #stop this for
|
||||||
|
|
||||||
if ind<len(imgmaptmp): #imgmaptmp is not empty (normally at first run)
|
if ind<len(imgmaptmp): #imgmaptmp is not empty (normally at first run)
|
||||||
imgmaptmp[ind]=imgmap[ind]
|
imgmaptmp[ind]=imgmap[ind]
|
||||||
if _i%fadespeed==0:
|
if _i%fadespeed==0:
|
||||||
packet = self._array2packet(imgmaptmp)
|
packet = self._array2packet(imgmaptmp)
|
||||||
self._sock.sendto(bytes(packet), (self._udphost, self._udpport))
|
self._sock.sendto(bytes(packet), (self._udphost, self._udpport))
|
||||||
time.sleep(0.2)
|
time.sleep(0.2)
|
||||||
|
if threadrunning==True: #if animation wasnt cancelled
|
||||||
|
self.sendPacket(imgmap) #send packet and save last-imagemap
|
||||||
|
threadrunning=False
|
||||||
|
else:
|
||||||
self.sendPacket(imgmap) #send packet and save last-imagemap
|
self.sendPacket(imgmap) #send packet and save last-imagemap
|
||||||
|
|
||||||
def sendPacket(self, imgmap):
|
def sendPacket(self, imgmap):
|
||||||
|
@ -166,10 +182,12 @@ class FlipdotSender(object):
|
||||||
|
|
||||||
|
|
||||||
def send_marquee(self, str, speed=3):
|
def send_marquee(self, str, speed=3):
|
||||||
|
global threadrunning
|
||||||
|
threadrunning=True
|
||||||
offset = self._img_size[0]
|
offset = self._img_size[0]
|
||||||
font = ImageFont.truetype(self._font_family, self._font_size_scroll)
|
font = ImageFont.truetype(self._font_family, self._font_size_scroll)
|
||||||
|
|
||||||
while offset >= -font.getsize(str)[0]-speed:
|
while offset >= -font.getsize(str)[0]-speed and threadrunning==True:
|
||||||
image = Image.new("RGBA", self._img_size, FlipdotSender.C_BLACK)
|
image = Image.new("RGBA", self._img_size, FlipdotSender.C_BLACK)
|
||||||
draw = ImageDraw.Draw(image)
|
draw = ImageDraw.Draw(image)
|
||||||
draw.fontmode = "1" # No AA
|
draw.fontmode = "1" # No AA
|
||||||
|
@ -178,6 +196,7 @@ class FlipdotSender(object):
|
||||||
self._send(image)
|
self._send(image)
|
||||||
offset -= speed
|
offset -= speed
|
||||||
time.sleep(0.15)
|
time.sleep(0.15)
|
||||||
|
threadrunning=False
|
||||||
|
|
||||||
def send_img(self, img):
|
def send_img(self, img):
|
||||||
background = Image.new("RGBA", self._img_size, FlipdotSender.C_BLACK)
|
background = Image.new("RGBA", self._img_size, FlipdotSender.C_BLACK)
|
||||||
|
|
|
@ -4,15 +4,18 @@ import paho.mqtt.client as mqtt
|
||||||
from FlipdotSender import FlipdotSender
|
from FlipdotSender import FlipdotSender
|
||||||
import time
|
import time
|
||||||
from hangman import Hangman
|
from hangman import Hangman
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
global mode
|
global mode
|
||||||
mode="standby"
|
mode="standby"
|
||||||
global gametimeout
|
global gametimeout
|
||||||
gametimeout=0
|
gametimeout=0
|
||||||
|
global flipthread
|
||||||
|
flipthread=None
|
||||||
|
|
||||||
def on_connect(client, userdata, flags, rc):
|
def on_connect(client, userdata, flags, rc):
|
||||||
print("Connected with result code " + str(rc))
|
print("Connected with result code " + str(rc))
|
||||||
client.subscribe("raum2/flipdot/#")
|
client.subscribe("raum2/flipdot/#") #subscribe to every subtopic
|
||||||
#client.subscribe("raum2/flipdot/text")
|
#client.subscribe("raum2/flipdot/text")
|
||||||
#client.subscribe("raum2/flipdot/scroll")
|
#client.subscribe("raum2/flipdot/scroll")
|
||||||
#client.subscribe("raum2/flipdot/image")
|
#client.subscribe("raum2/flipdot/image")
|
||||||
|
@ -22,6 +25,7 @@ def on_message(client, userdata, msg):
|
||||||
print(msg.topic + " " + str(msg.payload.decode("utf-8")))
|
print(msg.topic + " " + str(msg.payload.decode("utf-8")))
|
||||||
global mode
|
global mode
|
||||||
global gametimeout
|
global gametimeout
|
||||||
|
global flipthread
|
||||||
|
|
||||||
if mode=="standby":
|
if mode=="standby":
|
||||||
gametimeout=0
|
gametimeout=0
|
||||||
|
@ -36,14 +40,29 @@ def on_message(client, userdata, msg):
|
||||||
speed = 3
|
speed = 3
|
||||||
text = payload
|
text = payload
|
||||||
|
|
||||||
flipdot.send_marquee(text, speed)
|
#flipdot.send_marquee(text, speed)
|
||||||
|
if flipthread is not None:
|
||||||
|
flipdot.stopAnimation()
|
||||||
|
flipthread.join() #wait for thread to finish
|
||||||
|
flipthread=Thread(target=flipdot.send_marquee, args=(text,speed))
|
||||||
|
flipthread.start()
|
||||||
|
|
||||||
if msg.topic == "raum2/flipdot/text/set":
|
if msg.topic == "raum2/flipdot/text/set":
|
||||||
payload = msg.payload.decode("utf-8")
|
payload = msg.payload.decode("utf-8")
|
||||||
|
|
||||||
|
if flipthread is not None:
|
||||||
|
flipdot.stopAnimation()
|
||||||
|
flipthread.join()
|
||||||
|
|
||||||
if len(payload)>0 and payload[0]=='~':
|
if len(payload)>0 and payload[0]=='~':
|
||||||
payload=payload[1:] #remove first char
|
payload=payload[1:] #remove first char
|
||||||
flipdot.send_text(payload,25) #send_text with animation
|
#flipdot.send_text(payload,25) #send_text with animation
|
||||||
flipdot.send_text(payload) #without animation
|
flipthread=Thread(target=flipdot.send_text, args=(payload,25))
|
||||||
|
else:
|
||||||
|
#flipdot.send_text(payload) #without animation
|
||||||
|
flipthread=Thread(target=flipdot.send_text, args=(payload,))
|
||||||
|
flipthread.start()
|
||||||
|
|
||||||
|
|
||||||
if msg.topic == "raum2/flipdot/textFull/set":
|
if msg.topic == "raum2/flipdot/textFull/set":
|
||||||
payload = msg.payload.decode("utf-8")
|
payload = msg.payload.decode("utf-8")
|
||||||
|
@ -89,8 +108,10 @@ def on_message(client, userdata, msg):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
flipdot = FlipdotSender("2001:67c:275c:a9::c", 2323)
|
#flipdot = FlipdotSender("2001:67c:275c:a9::c", 2323)
|
||||||
hangman= Hangman("2001:67c:275c:a9::c", 2323,flipdot)
|
flipdot = FlipdotSender("localhost", 2323)
|
||||||
|
#hangman= Hangman("2001:67c:275c:a9::c", 2323,flipdot)
|
||||||
|
hangman= Hangman("localhost", 2323,flipdot)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue