长度与矩阵高度不匹配的LED灯条映射矩阵的Python建模问题
蛇形弯折LED矩阵Python映射方案
实现逻辑
不用手动逐点做映射,只需要提前定义好你的灯带铺设规则(起始坐标、行进方向、单条灯带最大灯珠数),运行逻辑自动生成坐标到灯带ID+灯珠索引的映射表即可。
操作步骤
- 第一步:定义基础参数
# 矩阵参数:36行48列 MATRIX_HEIGHT = 36 MATRIX_WIDTH = 48 # 单根LED灯带最大灯珠数 MAX_LED_PER_STRIP = 64 # 初始化映射表:matrix_map[行号y][列号x] = (灯带ID, 灯珠索引) matrix_map = [[None for _ in range(MATRIX_WIDTH)] for _ in range(MATRIX_HEIGHT)] # 方向定义:(y轴偏移量, x轴偏移量),可根据实际布线调整 DOWN = (1, 0) UP = (-1, 0) RIGHT = (0, 1) LEFT = (0, -1)
- 第二步:自动生成映射表
根据你的蛇形弯折规则设置方向循环,逻辑自动遍历整个矩阵填充映射表:
current_strip_id = 1 current_led_idx = 0 current_y, current_x = 0, 0 # 蛇形行进方向循环,根据你实际的弯折顺序调整 direction_cycle = [DOWN, RIGHT, UP, RIGHT] dir_pointer = 0 # 遍历填充整个矩阵 while current_y < MATRIX_HEIGHT and current_x < MATRIX_WIDTH: # 给当前坐标写入映射关系 if matrix_map[current_y][current_x] is None: matrix_map[current_y][current_x] = (current_strip_id, current_led_idx) current_led_idx += 1 # 单根灯带灯珠用完,切换下一根 if current_led_idx >= MAX_LED_PER_STRIP: current_strip_id += 1 current_led_idx = 0 # 计算下一个坐标,碰边界自动切换方向 dy, dx = direction_cycle[dir_pointer] next_y = current_y + dy next_x = current_x + dx # 下一个坐标越界或已填充,切换方向 if next_y < 0 or next_y >= MATRIX_HEIGHT or next_x < 0 or next_x >= MATRIX_WIDTH or matrix_map[next_y][next_x] is not None: dir_pointer = (dir_pointer + 1) % len(direction_cycle) dy, dx = direction_cycle[dir_pointer] next_y = current_y + dy next_x = current_x + dx current_y, current_x = next_y, next_x
- 第三步:调用映射表控制LED
需要给指定坐标的灯设置颜色时,直接查映射表拿到对应灯带和灯珠位置即可:
# 示例:给第2行第3列(y=1, x=2,索引从0开始)的灯设置颜色 target_y = 1 target_x = 2 strip_id, led_idx = matrix_map[target_y][target_x] # 调用你实际使用的灯带控制接口即可,比如: # strip_list[strip_id].setPixel(led_idx, 255, 0, 0)
如果你的弯折规则不是固定循环,也可以提前把每根灯带的分段路径写死为参数,同样可以自动生成映射表,比手动逐点录入效率高很多
内容的提问来源于stack exchange,提问作者Asik
相关产品推荐
相关产品推荐

