gpt4 book ai didi

python - 脚本没有阻塞

转载 作者:行者123 更新时间:2023-11-30 23:36:30 24 4
gpt4 key购买 nike

这是一个用于沿着小车移动相机的延时拍摄脚本。问题是,当我运行代码时,有时(例如,在迭代 7 时)小车正在移动,相机同时拍摄照片。就好像命令在执行下一个命令之前不会阻塞。正如您所看到的,我尝试在代码中分散 sleep ,但没有成功。

这是工作流程:

  1. Raspberry Pi 向相机(快照)和 Arduino(移动小车)发送命令
  2. Arduino 与 EasyDriver Stepper Motor Driver 对话,它与步进器对话并导致小车移动。
  3. 重复。

这是我的 Python 脚本。

import os, commands, string, gps
from subprocess import Popen, PIPE
from time import sleep
import serial

ser = serial.Serial('/dev/ttyACM0', 9600)
sleep (5)

for i in range(0, 20):
#To write information
steps = 1000*(i+1)
ser.write('1,'+str( steps )+'/n')
sleep (4)

bashCommand = "sudo /home/mh00h/Timelapse/camerareset.sh"
os.system(bashCommand)
sleep (2)
bashCommand = "sudo gphoto2 --capture-image"
os.system(bashCommand)
sleep (1)

最佳答案

没有按要求阻止的(可能)有两个原因:

  1. 串行通信是缓冲的,因此只要传递给 Serial.write() 的数据长度小于该调用就可以在 Arduino 草图读取数据之前返回的缓冲区。事实上,根据数据的长度和缓冲区的大小,对 Serial.write() 的多次调用可能会在 Arduino 完成任何读取之前完成。
  2. 在步进电机完成其运动之前,Arduino 草图可能不会阻塞。查看草图以确定情况是否如此会很有用。

在通话之间 sleep 会有所帮助,但即使您可以做到这一点,您也可能会遇到奇怪的、不可重现的行为。

上述两个问题的解决方案是同步代码中的操作。对于串行通信,可以通过将“完成”消息从 Arduino 草图发送回 python 脚本来实现,该脚本将从串行端口读取数据,直到收到此消息。如何将步进电机与 Arduino 草图同步(如果需要)将取决于 Arduino 与步进电机通信的编码方式。

关于python - 脚本没有阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com