多处理时奇怪的 pygame 和 pyfirmata 行为

问题描述

这是我使用的代码

TACL

当我在终端中运行代码时,这就是我得到的

import multiprocessing
import pygame
from pygame.locals import *
from pygame import midi
from pyfirmata import Arduino
from time import sleep
board = Arduino('/dev/cu.usbmodem14101')
servo = board.get_pin('d:9:s')

def ardu (x,y,z):
    for pos in range(120,68,-1):
        servo.write(pos)
        sleep(x)
    print('downwards motion completed')
    sleep(y)
    print('sleep done')
    for pos in range(68,120):
        servo.write(pos)
        sleep(z)
    print('upwards motion completed')

def aud():
    pygame.midi.init()
    list = []
    input_device = pygame.midi.Input(0)
    while len(list) < 4:
        if input_device.poll() == True:
            event = input_device.read(1)[0]
            data = event[0]
            list.append(data[2])
            list.append(event[1])
    time = (list[3] - list[1])/1000
    print(list[0],time)


def run(x,z):
    p1 = multiprocessing.Process(target = aud)
    p2 = multiprocessing.Process(target = ardu,args = [x,z,])
    p1.start()
    p2.start()
    p1.join()
    p2.join()


if __name__ == '__main__':
    run(.000483,.25,.000483)
    pygame.midi.quit()

程序没有执行完,我必须按 control + c 才能退出

虽然打印出“向上运动完成”,但电机从未真正上升,它卡在 120 度。

我尝试过的:我尝试从单独的文件调用 ardu 和 aud 函数并从那里调用它们。这会导致在终端中弹出另一个 pygame 错误。我也试过将 pygame 2.0.1 (SDL 2.0.14,Python 3.8.7) Hello from the pygame community. https://www.pygame.org/contribute.html pygame 2.0.1 (SDL 2.0.14,Python 3.8.7) Hello from the pygame community. https://www.pygame.org/contribute.html downwards motion completed sleep done upwards motion completed 放在不同的地方。

此时,我不知道该怎么办:(

正确运行此代码会在终端中产生类似的结果

pygame.midi.init()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)