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_WHITE = 255
|
||||
|
||||
global threadrunning
|
||||
threadrunning=False
|
||||
|
||||
lastimgmap = []
|
||||
|
||||
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._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):
|
||||
|
@ -70,6 +77,7 @@ class FlipdotSender(object):
|
|||
self._sock.sendto(bytes(packet), (self._udphost, self._udpport))'''
|
||||
|
||||
def _send(self, image,fadespeed=0): #changes slowly 'fadespeed'-pixels at a time
|
||||
global threadrunning
|
||||
#if fadespeed=0 -> change instant.
|
||||
#time to change= 1280/25*0.2
|
||||
imgmap = []
|
||||
|
@ -82,18 +90,26 @@ class FlipdotSender(object):
|
|||
|
||||
imgmaptmp=FlipdotSender.lastimgmap
|
||||
|
||||
|
||||
if fadespeed>0:
|
||||
threadrunning=True
|
||||
#diff=np.sum(np.array(imgmaptmp) != np.array(imgmap)) #different pixels
|
||||
pixelchangeind=np.arange(self._img_size[0]*self._img_size[1])
|
||||
np.random.shuffle(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)
|
||||
imgmaptmp[ind]=imgmap[ind]
|
||||
if _i%fadespeed==0:
|
||||
packet = self._array2packet(imgmaptmp)
|
||||
self._sock.sendto(bytes(packet), (self._udphost, self._udpport))
|
||||
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
|
||||
|
||||
def sendPacket(self, imgmap):
|
||||
|
@ -166,10 +182,12 @@ class FlipdotSender(object):
|
|||
|
||||
|
||||
def send_marquee(self, str, speed=3):
|
||||
global threadrunning
|
||||
threadrunning=True
|
||||
offset = self._img_size[0]
|
||||
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)
|
||||
draw = ImageDraw.Draw(image)
|
||||
draw.fontmode = "1" # No AA
|
||||
|
@ -178,6 +196,7 @@ class FlipdotSender(object):
|
|||
self._send(image)
|
||||
offset -= speed
|
||||
time.sleep(0.15)
|
||||
threadrunning=False
|
||||
|
||||
def send_img(self, img):
|
||||
background = Image.new("RGBA", self._img_size, FlipdotSender.C_BLACK)
|
||||
|
|
|
@ -4,15 +4,18 @@ import paho.mqtt.client as mqtt
|
|||
from FlipdotSender import FlipdotSender
|
||||
import time
|
||||
from hangman import Hangman
|
||||
from threading import Thread
|
||||
|
||||
global mode
|
||||
mode="standby"
|
||||
global gametimeout
|
||||
gametimeout=0
|
||||
global flipthread
|
||||
flipthread=None
|
||||
|
||||
def on_connect(client, userdata, flags, 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/scroll")
|
||||
#client.subscribe("raum2/flipdot/image")
|
||||
|
@ -22,6 +25,7 @@ def on_message(client, userdata, msg):
|
|||
print(msg.topic + " " + str(msg.payload.decode("utf-8")))
|
||||
global mode
|
||||
global gametimeout
|
||||
global flipthread
|
||||
|
||||
if mode=="standby":
|
||||
gametimeout=0
|
||||
|
@ -36,14 +40,29 @@ def on_message(client, userdata, msg):
|
|||
speed = 3
|
||||
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":
|
||||
payload = msg.payload.decode("utf-8")
|
||||
|
||||
if flipthread is not None:
|
||||
flipdot.stopAnimation()
|
||||
flipthread.join()
|
||||
|
||||
if len(payload)>0 and payload[0]=='~':
|
||||
payload=payload[1:] #remove first char
|
||||
flipdot.send_text(payload,25) #send_text with animation
|
||||
flipdot.send_text(payload) #without animation
|
||||
#flipdot.send_text(payload,25) #send_text with 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":
|
||||
payload = msg.payload.decode("utf-8")
|
||||
|
@ -89,8 +108,10 @@ def on_message(client, userdata, msg):
|
|||
|
||||
|
||||
|
||||
flipdot = FlipdotSender("2001:67c:275c:a9::c", 2323)
|
||||
hangman= Hangman("2001:67c:275c:a9::c", 2323,flipdot)
|
||||
#flipdot = FlipdotSender("2001:67c:275c:a9::c", 2323)
|
||||
flipdot = FlipdotSender("localhost", 2323)
|
||||
#hangman= Hangman("2001:67c:275c:a9::c", 2323,flipdot)
|
||||
hangman= Hangman("localhost", 2323,flipdot)
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue