diff --git a/FlipdotSender.py b/FlipdotSender.py index cf11f84..d85cbd8 100644 --- a/FlipdotSender.py +++ b/FlipdotSender.py @@ -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,19 +90,27 @@ 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= -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) diff --git a/mqtt-to-flipdot.py b/mqtt-to-flipdot.py index fe4b837..ca35a23 100644 --- a/mqtt-to-flipdot.py +++ b/mqtt-to-flipdot.py @@ -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)