【发布时间】:2021-01-10 00:59:28
【问题描述】:
我正在使用树莓派 4 控制器(4GB 内存)使用模拟传感器制作一个项目。我目前已经连接了 9 个传感器,我正在使用 while 循环进行无限循环。代码非常简单,从传感器获取输入并使用画布库在按下时更改形状的颜色,在没有按下时保持不变。问题是在 500-550 次循环之后它变得越来越慢。随着循环次数的增加,响应速度变得越来越慢。谁能建议我如何克服这个问题?
我也是编码的菜鸟,所以如果我犯了一些错误,请指导我。我只为一个传感器编写代码,因为它对所有传感器都是一样的。
代码:
from tkinter import *
import Rpi.GPIO as GPIO
import time
import tkinter as tk
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
.
.
.
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
root=tk.Tk()
canvas = tk.Canvas(root, bg='white', width=500, height=500)
canvas.grid()
canvas.bind('<key>', lambda event: root.destroy() if (event.char == 'q') else 0)
while True:
def sense1(on):
square1= canvas.create_rectangle(5, 5, 105, 105, width=0, fill='red' if on else 'green')
.
.
.
def sense9(on):
square9= canvas.create_rectangle(235, 235, 335, 335, width=0, fill='red' if on else 'green')
global S1,...,S9
if GPIO.input(7) == GPIO.HIGH:
S1 = sense1(True)
else:
S1 = sense1(False)
.
.
.
if GPIO.input(18) == GPIO.HIGH:
S9 = sense9(True)
else:
S9 = sense9(False)
root.update_idletasks()
root.update()
我为其他 8 个传感器编写的代码相同。
【问题讨论】:
-
如果代码简单,请附上。您的循环中可能发生了导致它的事情。没有任何代码很难分辨。至少,请包括相关部分。
-
对于每个循环,您都在为每个传感器创建一个新矩形。在诸如 Pi 之类的有限环境中,我想知道如果您提前创建必要的矩形并根据需要修改矩形属性,是否会更容易。
-
其实这只是为了测试。在实际工作中,我必须连接 150 多个传感器,那时我正在考虑在现成的软件中输出。 @ewong
-
你的意思是只有这个画布矩形对程序有影响?
标签: python-3.x tkinter while-loop raspberry-pi4 slowdown