yc0526vip 发表于 2024-1-9 17:57:18

micro python oled显示问题

@fishc

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

FishC 发表于 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
      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 = 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
            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 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 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()

修改代码,执行完成后 让第一行继续加到后面执行

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2024-1-9 19:07:32

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




micro python 显示"adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2024-1-9 19:10:06

micro python 16个字符自动换行,从下到上滚动显示"adbJumpyfoxesquiscklytrotbytheriveingaftechainghaftestheriveingafechasingingafterelusiveshadowsinthefadlytrotbytheingdaylight123"

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2024-1-9 19:12:28

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


...

未自动换行

FishC 发表于 2024-1-9 19:12:43

yc0526vip 发表于 2024-01-09 19:12
未自动换行

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

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
   
    line_height = 8# 每行的高度为8像素
   
    # 从下到上滚动显示文本
    for i in range(len(lines)):
      line = lines
      
      # 计算每行的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 + text# 将文本向左滚动1个字符

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2024-1-9 19:14:10

FishC 发表于 2024-1-9 19:12
非常抱歉,我给出的代码有一些错误。以下是修正后的代码:




要上下滚动

FishC 发表于 2024-1-9 19:14:59

yc0526vip 发表于 2024-01-09 19:14
要上下滚动

非常抱歉之前的回答有误,下面是一个示例代码,可以实现在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 小助理,如未能正确解答您的问题,请继续追问。

yc0526vip 发表于 2024-1-9 19:15:39

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

排版问题,重新输出

FishC 发表于 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
      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 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: micro python oled显示问题