我有一个客户端脚本运行在Raspberry Pi3上。客户机正在从服务器接收消息,无论是真是假。在这之后,它接收到一个类似字节的对象,它解码并使用此信息在GUI中显示图像。在
它检查GPIO pin是否从按钮按下时变为TRUE,并循环返回到第一个.recv()。在
我希望客户机一直检查是否收到消息“new game”,如果是的话,转到first.recv(),在那里检查它是真是假。在
但是,由于我的.recv()函数阻塞了,所以我在这里什么也做不了。在
如何在检查GPIO状态是否变为TRUE的同时检查是否收到信息。在
代码如下:
#imports needed
import socket
import RPi.GPIO as GPIO
import time
import tkinter as tk
import pygame
#Setup of GPIO pin for buttons used as bumpers
GPIO.setmode(GPIO.BOARD)
GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Pin 36 = GPIO16
#Setup of root window for the GUI and the different images
root = tk.Tk()
root.attributes('-fullscreen',True)
image6 = tk.PhotoImage(file="/home/pi/Desktop/wav/wrong.gif")
wronglabel = tk.Label(image=image6)
image5 = tk.PhotoImage(file="/home/pi/Desktop/wav/correct.gif")
correctlabel = tk.Label(image=image5)
image4 = tk.PhotoImage(file="/home/pi/Desktop/wav/questionmark.gif")
questionlabel = tk.Label(image=image4)
pygame.init()
#Setup of the different sounds to use in the project
correctsound = pygame.mixer.Sound('/home/pi/Desktop/wav/correct.wav')
wrongsound = pygame.mixer.Sound('/home/pi/Desktop/wav/wrong.wav')
HOST = '192.168.1.34' # The remote host,
PORT = 50007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((HOST, PORT))
except:
print("FAILED. Sleep briefly & try again")
time.sleep(10)
continue
questionlabel.pack()
root.update()
while True:
data = s.recv(1024)
if data == b'True':
print('I am the true cone')
state = True
if data == b'False':
print('I am the false cone')
state = False
byte_string = s.recv(1024)
path = '/home/pi/Desktop/wav/%s.gif' % byte_string.decode()
questionlabel.pack_forget()
image1 = tk.PhotoImage(file=path) #x should change accordingly to the received message
Thelabel = tk.Label(image=image1)
Thelabel.pack()
root.update()
i=0
while i==0:
if GPIO.input(36) == True:
if state == True:
Thelabel.pack_forget()
correctlabel.pack()
root.update()
correctsound.play()
s.sendall(b'True Hit')
time.sleep(5)
correctlabel.pack_forget()
questionlabel.pack()
root.update()
if state == False:
Thelabel.pack_forget()
wronglabel.pack()
root.update()
wrongsound.play()
time.sleep(5)
wronglabel.pack_forget()
questionlabel.pack()
root.update()
i=1
很难理解你在这里所做的,你只有全局变量,命令式代码风格,所有的东西都是交错的。。。我正努力得到你想要的东西。在
我的代码不可能立即解决您的问题,但我希望它能帮助您了解从何处挖掘来解决您的问题:
相关问题 更多 >
编程相关推荐