Python中8×8温度阵列映射OLED屏的冗余代码简化问题

优化思路
你的代码冗余核心是硬编码了所有64个点位的绘制逻辑,完全可以通过规律总结用循环实现,同时还能优化屏幕刷新效率,避免手写出错:
- 抽离所有固定参数:把网格坐标、温度阈值都定义为常量,后续调整无需修改逻辑代码
- 用两层循环遍历8行8列的所有点位,通过
行号*8 + 列号对应温度数组的索引,替代逐个写索引的写法 - 调整刷新逻辑:原来每画一个矩形就刷新一次屏幕,不仅性能低还容易闪屏,统一画完所有矩形后再刷新一次即可
- 规避硬编码bug:你现有代码中第二行第5个点位(索引12)的else分支就写错了Y坐标,用循环逻辑不会出现这类低级错误
优化后代码
# 提前定义每列的左右X坐标、每行的上下Y坐标,和你原有坐标规则完全一致 COL_X = [(80,85), (85,91), (91,97), (97,103), (103,109), (109,115), (115,121), (121,126)] ROW_Y = [(1,8), (8,16), (16,24), (24,32), (32,40), (40,48), (48,56), (56,64)] # 温度阈值,后续调整阈值直接修改此处即可 TEMP_THRESHOLD = 27 def Correlate(Num): while True: Update_Temperature_Data = Read_raw_temp() # 修正原代码笔误:原print的变量名为Temperature_Data,和前面定义的变量名不一致 print(Update_Temperature_Data) # 遍历所有8行 for row in range(8): y_top, y_bottom = ROW_Y[row] # 遍历当前行的8列 for col in range(8): x_left, x_right = COL_X[col] # 计算当前点位对应的温度数组索引 temp_idx = row * 8 + col # 根据温度判断填充值 fill_val = 1 if Update_Temperature_Data[temp_idx] > TEMP_THRESHOLD else 0 # 绘制对应矩形 draw.rectangle((x_left, y_top, x_right, y_bottom), fill=fill_val, outline=0) # 所有点位绘制完成后统一刷新屏幕 disp.image(image) disp.display()
说明
这段代码的功能和你原有手写逻辑完全一致,代码量缩减了90%以上,后续如果要调整坐标、修改温度阈值,只需要修改前面的常量即可,维护成本大幅降低。
内容的提问来源于stack exchange,提问作者brian012
相关产品推荐
相关产品推荐

