微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决多处理时奇怪的 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 举报,一经查实,本站将立刻删除。