繁体   English   中英

Python 在另一个while循环中循环

[英]Python loop inside another while loop

我试图让命令_press(ser, 'd', .3)_press(ser, 'a', .3)重复直到 OpenCV 检测到一个像素并中断并继续到另一个循环直到 if声明得到满足。

这是一个完整的代码片段,大约 150 行。 如果您需要更多,请告诉我。 代码本身有效; 只是因为它是随机的 a & d 运动时间,我无法手动计时。

with serial.Serial(args.serial, 9600) as ser, _shh(ser):
    while True:
        while True:
            
            _press(ser, 'd', .3) # Tells controller right or left and for how long
    
            _press(ser, 'a', .3)

            _await_pixel(ser, vid, x=290, y=862, pixel=(33, 188, 50)) # X Y coordinates & RGB 
            print('pixel found')
            break
        
        _await_pixel(ser, vid, x=464, y=905, pixel=(0, 0, 0))

        print('dialog started')

        _await_not_pixel(ser, vid, x=464, y=905, pixel=(0, 0, 0))

        print('dialog ended')
        t0 = time.time()

        _await_pixel(ser, vid, x=309, y=896, pixel=(0, 0, 0))

        t1 = time.time()
        print(f'dialog delay: {t1 - t0:.3f}s')

        if (t1 - t0) > 1:    # If dialog delay is > than 1 to finish
            print('Finished')
            playsound('WEGOTEM.MP3')
            break

        elif (t1 - t0) < 1: # commands to reset positioning
            time.sleep(11)
            _press(ser, 's', )
            time.sleep(.5)
            _press(ser, 's', )
            time.sleep(.5)
            _press(ser, 's', )
            time.sleep(1)
            _press(ser, 'A', )
            time.sleep(6)

vid.release()
cv2.destroyAllWindows()
return 0


if __name__ == '__main__':
    exit(main())

如果在找到像素之前阻塞,您显然不能使用_await_pixel 您只需要获取当前像素值,如果匹配,则中断。 或者,您可以将其设为您的while条件。 我不知道您的_await_pixel来自哪里,但也许您可以使用它来了解如何读取单个像素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM