鱼C论坛

 找回密码
 立即注册
查看: 457|回复: 13

micro python oled显示问题

[复制链接]
发表于 2024-1-9 17:57:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
@fishc

micro python 在oled显示字符,超过16个自动换行,从下到上滚动显示

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-9 17:57:35 | 显示全部楼层
要实现在OLED上显示字符,并在超过一行的情况下自动换行,并从下到上滚动显示,可以按照以下步骤进行操作:

1. 首先,确保你已经连接好了OLED并且成功初始化了。

2. 创建一个函数,用来在OLED上显示文本。这个函数需要接受两个参数:要显示的文本和滚动速度。

  1. def display_text(text, speed):
  2.     oled.fill(0)  # 清空屏幕
  3.     lines = text.split('\n')  # 将文本按照换行符分割成多行
  4.     line_height = 8  # 每行的高度为8像素

  5.     for i in range(len(lines)):
  6.         line = lines[i]
  7.         if len(line) > 16:
  8.             # 如果一行的长度超过16个字符,需要进行自动换行
  9.             words = line.split(' ')
  10.             new_line = ''
  11.             current_line = ''
  12.             
  13.             for word in words:
  14.                 if len(current_line + word) <= 16:
  15.                     current_line += word + ' '
  16.                 else:
  17.                     new_line += current_line + '\n'
  18.                     current_line = word + ' '

  19.             # 将最后一行添加到新行中
  20.             new_line += current_line
  21.             
  22.             # 更新要显示的行
  23.             lines[i] = new_line

  24.     # 计算滚动的次数
  25.     num_pages = (len(lines) * line_height) // 8
  26.    
  27.     for page in range(num_pages + 8):
  28.         y = page * line_height - (num_pages * line_height)
  29.         
  30.         for i in range(len(lines)):
  31.             line = lines[i]
  32.             oled.text(line, 0, y + i * line_height)
  33.         
  34.         oled.show()
  35.         time.sleep(speed)
复制代码


3. 调用`display_text`函数并传入要显示的文本和滚动速度参数。

  1. from machine import Pin, I2C
  2. import ssd1306
  3. import time

  4. # 初始化I2C接口和OLED
  5. i2c = I2C(scl=Pin(5), sda=Pin(4))
  6. oled = ssd1306.SSD1306_I2C(128, 64, i2c)

  7. # 要显示的文本
  8. text = '''我是一段超过16个字符的文本,需要自动换行显示。
  9. 并且我还需要从下到上滚动显示!'''

  10. # 滚动速度(秒)
  11. speed = 0.5

  12. # 调用显示函数
  13. display_text(text, speed)
复制代码


这样,你就可以在OLED上看到超过16个字符的文本能够自动换行,并且从下到上滚动显示了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 18:02:44 | 显示全部楼层
FishC 发表于 2024-1-9 17:57
要实现在OLED上显示字符,并在超过一行的情况下自动换行,并从下到上滚动显示,可以按照以下步骤进行操作: ...

                for i in range(len(lines)):
                        for i in range(len(lines)*8, -64, -1):
                                oled.fill(0)
                                for j, line in enumerate(lines):
                                        oled.text(line, 0, i + j*8)
                                oled.show()

修改代码,执行完成后 让第一行继续加到后面执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 18:03:14 | 显示全部楼层
yc0526vip 发表于 2024-01-09 18:02
for i in range(len(lines)):
                        for i in range(len ...


你想要让第一行的内容在最后一行执行完之后再继续显示下去。修改代码如下:

  1. for i in range(len(lines)*8, -64, -1):
  2.     oled.fill(0)
  3.     for j, line in enumerate(lines):
  4.         oled.text(line, 0, i + j*8)
  5.    
  6.     # 添加额外的循环用于显示第一行的内容
  7.     if i <= 0:
  8.         for j, line in enumerate(lines):
  9.             if j == 0:
  10.                 oled.text(line, 0, i + j*8 + len(lines)*8)
  11.    
  12.     oled.show()
复制代码


这样修改后,当滚动到最后一行的时候,第一行的内容会接着显示在最后。注意,根据你的OLED屏幕的大小和分辨率,可能需要微调循环的起始和结束值,以及文本的位置。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 19:07:32 | 显示全部楼层
FishC 发表于 2024-1-9 18:03
你想要让第一行的内容在最后一行执行完之后再继续显示下去。修改代码如下:

micro python 显示"adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 19:07:46 | 显示全部楼层
yc0526vip 发表于 2024-01-09 19:07
micro python 显示"adbJumpyfoxesquiscklytrotbytheri ...


要在MicroPython中显示长文本并实现自动换行和滚动效果,你可以使用以下代码:

  1. import time
  2. from machine import Pin, I2C
  3. import ssd1306

  4. # 初始化OLED屏幕
  5. i2c = I2C(-1, scl=Pin(5), sda=Pin(4))
  6. oled = ssd1306.SSD1306_I2C(128, 64, i2c)

  7. def display_text(text):
  8.     oled.fill(0)
  9.     lines = []
  10.     current_line = ""
  11.    
  12.     for word in text.split(" "):
  13.         if len(current_line + word) <= 16:
  14.             current_line += word + " "
  15.         else:
  16.             lines.append(current_line)
  17.             current_line = word + " "
  18.    
  19.     lines.append(current_line)
  20.    
  21.     for i in range(len(lines)*8, -8, -1):
  22.         oled.fill(0)
  23.         
  24.         for j, line in enumerate(lines):
  25.             oled.text(line, 0, i + j*8)
  26.         
  27.         oled.show()
  28.         time.sleep(0.1)


  29. text = "adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
  30. display_text(text)
复制代码


这段代码首先导入所需要的库,然后初始化OLED屏幕。`display_text`函数用于将长文本进行自动换行,并根据行数实现滚动显示效果。在主程序中,我们传入了需要显示的文本,然后调用`display_text`函数来进行显示。

请确保你已经连接好了OLED并且正确初始化了相关的库,这样就可以在OLED上显示出你想要的文本并实现滚动效果了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 19:10:06 | 显示全部楼层
micro python 16个字符自动换行,从下到上滚动显示"adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 19:10:41 | 显示全部楼层
yc0526vip 发表于 2024-01-09 19:10
micro python 16个字符自动换行,从下到上滚动显示"ad ...


要在MicroPython中实现16个字符自动换行,并从下到上滚动显示长文本,可以按照以下代码进行操作:

  1. import time
  2. from machine import Pin, I2C
  3. import ssd1306

  4. # 初始化OLED屏幕
  5. i2c = I2C(-1, scl=Pin(5), sda=Pin(4))
  6. oled = ssd1306.SSD1306_I2C(128, 64, i2c)

  7. def display_text(text):
  8.     oled.fill(0)  # 清空屏幕
  9.     lines = []
  10.     current_line = ""
  11.    
  12.     for word in text.split(" "):
  13.         if len(current_line + word) <= 16:
  14.             # 当前行加上当前单词后仍然不超过16个字符
  15.             current_line += word + " "
  16.         else:
  17.             # 当前行已经满了,添加到列表中并重置当前行
  18.             lines.append(current_line)
  19.             current_line = word + " "
  20.    
  21.     # 将最后一行添加到列表中
  22.     lines.append(current_line)
  23.    
  24.     # 从下到上滚动显示文本
  25.     for i in range(len(lines)*8, -64, -1):
  26.         oled.fill(0)
  27.         
  28.         for j, line in enumerate(lines):
  29.             oled.text(line, 0, i + j*8)
  30.         
  31.         oled.show()
  32.         time.sleep(0.1)
复制代码


使用上述函数来显示具体的文本:

  1. text = "adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
  2. display_text(text)
复制代码


这样,你就可以在OLED上看到文本被自动换行并从下到上滚动显示了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 19:12:28 | 显示全部楼层
FishC 发表于 2024-1-9 19:10
要在MicroPython中实现16个字符自动换行,并从下到上滚动显示长文本,可以按照以下代码进行操作:


...

未自动换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 19:12:43 | 显示全部楼层


非常抱歉,我给出的代码有一些错误。以下是修正后的代码:

  1. import time
  2. from machine import Pin, I2C
  3. import ssd1306

  4. # 初始化OLED屏幕
  5. i2c = I2C(-1, scl=Pin(5), sda=Pin(4))
  6. oled = ssd1306.SSD1306_I2C(128, 64, i2c)

  7. def display_text(text):
  8.     oled.fill(0)  # 清空屏幕
  9.     lines = []  # 存储文本行
  10.    
  11.     # 将文本按照每行16个字符进行切割
  12.     while text:
  13.         lines.append(text[:16])
  14.         text = text[16:]
  15.    
  16.     line_height = 8  # 每行的高度为8像素
  17.    
  18.     # 从下到上滚动显示文本
  19.     for i in range(len(lines)):
  20.         line = lines[i]
  21.         
  22.         # 计算每行的y坐标
  23.         y = 64 - (i + 1) * line_height
  24.         
  25.         # 在指定位置显示文本
  26.         oled.text(line, 0, y)
  27.    
  28.     oled.show()

  29. # 测试显示文本
  30. text = "adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
  31. while True:
  32.     display_text(text)
  33.     time.sleep(1)
  34.     text = text[1:] + text[0]  # 将文本向左滚动1个字符
复制代码


这段代码会自动将长文本切分成每行最多16个字符,并且从下到上滚动显示在OLED屏幕上。请确保你的硬件连接正确,并且已经初始化了OLED屏幕。你可以根据需要调整滚动速度和屏幕尺寸。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 19:14:10 | 显示全部楼层
FishC 发表于 2024-1-9 19:12
非常抱歉,我给出的代码有一些错误。以下是修正后的代码:

要上下滚动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 19:14:59 | 显示全部楼层


非常抱歉之前的回答有误,下面是一个示例代码,可以实现在OLED上上下滚动显示文本:import timefrom machine import Pin, I2Cimport ssd1306# 初始化OLED屏幕i2c = I2C(-1, scl=Pin(5), sda=Pin(4))oled = ssd1306.SSD1306_I2C(128, 64, i2c)def display_text(text, speed):    oled.fill(0)  # 清空屏幕    lines = text.split('\n')  # 将文本按照换行符分割成多行    line_height = 8  # 每行的高度为8像素    for i in range(len(lines)):        line = lines        y = 64 - (i+1) * line_height        oled.text(line, 0, y)    oled.show()    time.sleep(speed)    # 上下滚动效果    for i in range(56):        oled.scroll(0, -1)        oled.show()        time.sleep(0.05)# 测试显示文本text = "Hello FishC!\nThis is a demo of scrolling text on OLED"while True:    display_text(text, 1)这段代码会将给定的文本进行上下滚动显示。你可以根据需要修改速度和显示的文本内容。请确保你的硬件连接正确,并且已经初始化了OLED屏幕。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 19:15:39 | 显示全部楼层
FishC 发表于 2024-1-9 19:14
非常抱歉之前的回答有误,下面是一个示例代码,可以实现在OLED上上下滚动显示文本:import timefrom ma ...

排版问题,重新输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-9 19:15:55 | 显示全部楼层
yc0526vip 发表于 2024-01-09 19:15
排版问题,重新输出


非常抱歉排版问题,以下是经过修正的代码:

  1. import time
  2. from machine import Pin, I2C
  3. import ssd1306

  4. # 初始化OLED屏幕
  5. i2c = I2C(-1, scl=Pin(5), sda=Pin(4))
  6. oled = ssd1306.SSD1306_I2C(128, 64, i2c)

  7. def display_text(text, speed):
  8.     oled.fill(0)  # 清空屏幕
  9.     lines = text.split('\n')  # 将文本按照换行符分割成多行
  10.     line_height = 8  # 每行的高度为8像素
  11.    
  12.     for i in range(len(lines)):
  13.         line = lines[i]
  14.         y = 64 - (i+1) * line_height
  15.         oled.text(line, 0, y)
  16.    
  17.     oled.show()
  18.     time.sleep(speed)
  19.    
  20.     # 上下滚动效果
  21.     for i in range(56):
  22.         oled.scroll(0, -1)
  23.         oled.show()
  24.         time.sleep(0.05)

  25. # 测试显示文本
  26. text = "Hello FishC!\nThis is a demo of scrolling text on OLED"

  27. while True:
  28.     display_text(text, 1)
复制代码


这段代码将会在OLED屏幕上上下滚动显示给定的文本。你可以根据需要修改速度和文本内容。请确保你的硬件连接正确,并且已经初始化了OLED屏幕。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 16:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表