我正在尝试制作一个长丝运动传感器,并将其与运行在Raspberry Pi 3型号B+上的Octoprint集成在一起。
我的目标是制作一个装置,当它感觉到灯丝在特定的时间内没有移动时,就会暂停打印,比如说10秒。
我已经从垃圾堆里挖出了一辆原型,还有一辆从我哥哥那里偷来的玩具车,并把它和Raspberry连接起来。它使用了光耦编码器模块与LM393和其他内置的东西。它的数字输出连接到Raspberry的GPIO引脚。灯丝进入橡胶轮之间,转动它们,在上轮的轴上安装编码器轮,改变传感器的状态。
现在我的问题来了。我不太熟悉Python,尤其是中断。
我知道如何在循环中读取传感器的状态:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
try:
while True:
if (GPIO.input(26) == 1)
do magic
elif (GPIO.input(26) == 0)
do other magic我还看到,更好的做法是在这方面使用中断:
GPIO.setup(pin, GPIO.IN)
GPIO.add_event_detect(pin, GPIO.BOTH, callback = function)但是,,我不知道如何设置一个倒计时,在改变传感器的状态后,它会从10计数到0,它会停止并重新设置状态的改变并重新计数。。
当倒计时实际上达到0时,它会触发另一个GPIO引脚。
在解决了这个问题后,我将使用OctoPrint的插件来处理阻塞指示信号,并暂停打印。
我也很乐意为传感器做更好的设计,并与thingiverse或诸如此类的人分享。
是的,我知道商业全合一干扰传感器已经存在了,但是仅仅买下所有东西而不使用垃圾(以及不偷汽车玩具)就没有什么乐趣了。我也认为我的想法更便宜一些。
发布于 2020-08-13 22:10:39
你会用计时器。
import threading def hello(): print "hello, world" t = Timer(30.0, hello) t.start() # after 30 seconds, "hello, world" will be printed
来自https://docs.python.org/3.8/library/threading.html#timer-objects
当您移动到OctoPrint插件时,代码是类似的。
def hello(): print("Hello World!") t = RepeatedTimer(1.0, hello) t.start() # prints "Hello World!" every second
https://stackoverflow.com/questions/61755628
复制相似问题