我正在制作一个使用树莓派4控制器(4GB ram(的模拟传感器项目。我目前已经连接了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个传感器编写的代码相同。
检查堆芯温度。while循环会导致微处理器的温度升高。树莓有一个自我保护机制,当核心温度很高时就会激活,从而导致性能下降。我建议你把while循环改为回调
Saludos!