鱼C论坛

 找回密码
 立即注册
查看: 1149|回复: 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上显示文本。这个函数需要接受两个参数:要显示的文本和滚动速度。
def display_text(text, speed):
    oled.fill(0)  # 清空屏幕
    lines = text.split('\n')  # 将文本按照换行符分割成多行
    line_height = 8  # 每行的高度为8像素

    for i in range(len(lines)):
        line = lines[i]
        if len(line) > 16:
            # 如果一行的长度超过16个字符,需要进行自动换行
            words = line.split(' ')
            new_line = ''
            current_line = ''
            
            for word in words:
                if len(current_line + word) <= 16:
                    current_line += word + ' '
                else:
                    new_line += current_line + '\n'
                    current_line = word + ' '

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

    # 计算滚动的次数
    num_pages = (len(lines) * line_height) // 8
    
    for page in range(num_pages + 8):
        y = page * line_height - (num_pages * line_height)
        
        for i in range(len(lines)):
            line = lines[i]
            oled.text(line, 0, y + i * line_height)
        
        oled.show()
        time.sleep(speed)

3. 调用`display_text`函数并传入要显示的文本和滚动速度参数。
from machine import Pin, I2C
import ssd1306
import time

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

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

# 滚动速度(秒)
speed = 0.5

# 调用显示函数
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 ...


你想要让第一行的内容在最后一行执行完之后再继续显示下去。修改代码如下:
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)
    
    # 添加额外的循环用于显示第一行的内容
    if i <= 0:
        for j, line in enumerate(lines):
            if j == 0:
                oled.text(line, 0, i + j*8 + len(lines)*8)
    
    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中显示长文本并实现自动换行和滚动效果,你可以使用以下代码:
import time
from machine import Pin, I2C
import ssd1306

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

def display_text(text):
    oled.fill(0)
    lines = []
    current_line = ""
    
    for word in text.split(" "):
        if len(current_line + word) <= 16:
            current_line += word + " "
        else:
            lines.append(current_line)
            current_line = word + " "
    
    lines.append(current_line)
    
    for i in range(len(lines)*8, -8, -1):
        oled.fill(0)
        
        for j, line in enumerate(lines):
            oled.text(line, 0, i + j*8)
        
        oled.show()
        time.sleep(0.1)


text = "adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
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个字符自动换行,并从下到上滚动显示长文本,可以按照以下代码进行操作:
import time
from machine import Pin, I2C
import ssd1306

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

def display_text(text):
    oled.fill(0)  # 清空屏幕
    lines = []
    current_line = ""
    
    for word in text.split(" "):
        if len(current_line + word) <= 16:
            # 当前行加上当前单词后仍然不超过16个字符
            current_line += word + " "
        else:
            # 当前行已经满了,添加到列表中并重置当前行
            lines.append(current_line)
            current_line = word + " "
    
    # 将最后一行添加到列表中
    lines.append(current_line)
    
    # 从下到上滚动显示文本
    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()
        time.sleep(0.1)

使用上述函数来显示具体的文本:
text = "adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
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 | 显示全部楼层


非常抱歉,我给出的代码有一些错误。以下是修正后的代码:
import time
from machine import Pin, I2C
import ssd1306

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

def display_text(text):
    oled.fill(0)  # 清空屏幕
    lines = []  # 存储文本行
    
    # 将文本按照每行16个字符进行切割
    while text:
        lines.append(text[:16])
        text = text[16:]
    
    line_height = 8  # 每行的高度为8像素
    
    # 从下到上滚动显示文本
    for i in range(len(lines)):
        line = lines[i]
        
        # 计算每行的y坐标
        y = 64 - (i + 1) * line_height
        
        # 在指定位置显示文本
        oled.text(line, 0, y)
    
    oled.show()

# 测试显示文本
text = "adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"
while True:
    display_text(text)
    time.sleep(1)
    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[i]        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
排版问题,重新输出


非常抱歉排版问题,以下是经过修正的代码:
import time
from machine import Pin, I2C
import 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[i]
        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屏幕上上下滚动显示给定的文本。你可以根据需要修改速度和文本内容。请确保你的硬件连接正确,并且已经初始化了OLED屏幕。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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