yc0526vip 发表于 2023-12-21 10:44:42

micro python代码调整

@FishC
micropython ssd1306显示 自动换行

FishC 发表于 2023-12-21 10:44:52

当使用SSD1306显示屏时,如果需要自动换行文本,可以按照以下步骤进行调整:

1. 首先,导入SSD1306库和I2C库:
from machine import I2C, Pin
import ssd1306

2. 设置I2C接口,连接到SSD1306:
i2c = I2C(-1, Pin(5), Pin(4))
display = ssd1306.SSD1306_I2C(128, 64, i2c)

3. 创建一个函数来自动换行文本:
def auto_wrap_text(text, font_width):
    lines = []
    current_line = ''
   
    for word in text.split():
      if (len(current_line) + len(word)) * font_width > display.width: # 判断是否需要换行
            lines.append(current_line.strip())
            current_line = ''
      current_line += word + ' '
      
    lines.append(current_line.strip())
   
    return lines

4. 在主循环中,你可以传入文本并调用这个函数来自动换行并显示:
text = "这是一个超长的文本,我们将尝试将其自动换行以适应屏幕大小。"
font_width = 8 # 字体宽度,根据你使用的字体进行调整

wrapped_lines = auto_wrap_text(text, font_width)

display.fill(0) # 清空屏幕
display.text('自动换行:', 0, 0)

line_height = 10 # 行高,根据你使用的字体进行调整
current_line_y = line_height

for line in wrapped_lines:
    display.text(line, 0, current_line_y)
    current_line_y += line_height

display.show()

这样,文本就会根据屏幕宽度自动换行显示在SSD1306屏幕上了。您可以根据需要调整字体宽度、行高以及屏幕尺寸等参数。希望对您有帮助!

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

yc0526vip 发表于 2023-12-21 10:47:19

这段代码增加滚动功能
@FishC
from machine import RTC, SoftI2C, Pin
import ssd1306
import utime

# 配置I2C接口
i2c = SoftI2C(Pin(9), Pin(8))
display = ssd1306.SSD1306_I2C(128, 64, i2c)

# 清空屏幕
display.fill(0)

# 设置绘制的颜色(1=亮,0=暗)
color = 1

# 要显示的文本
text = "This is a long text that needs to be scrolled vertically with automatic line wrapping. "

# 设置每行字符数和行数
characters_per_line = 18
lines = 4

# 分割文本并显示
words = text.split()
current_line = 0
current_text = ""

while True:
    for word in words:
      if len(current_text + word) <= characters_per_line:
            current_text += word + " "
      else:
            display.text(current_text, 0, current_line * 16, color)
            current_line += 1
            current_text = word + " "

    # 显示最后一行文本
    display.text(current_text, 0, current_line * 16, color)
    display.show()
    utime.sleep(2)# 滚动间隔,可以根据需要调整

    # 清空屏幕
    display.fill(0)
    current_line = 0
    current_text = ""

FishC 发表于 2023-12-21 10:47:38

yc0526vip 发表于 2023-12-21 10:47
这段代码增加滚动功能
@FishC
from machine import...

要给这段代码增加滚动功能,可以通过控制文字的显示位置来实现。具体的步骤如下:

1. 创建一个新的变量`scroll_offset`用来表示上下滚动的偏移量。

2. 在每次循环开始的时候,将屏幕清空。

3. 修改绘制文本的逻辑,将`current_text`的显示位置根据`scroll_offset`进行调整。

4. 每次循环结束后,将`scroll_offset`增加一个固定的值,以实现文本的滚动效果。

下面是修改后的代码:

from machine import RTC, SoftI2C, Pin
import ssd1306
import utime

# 配置I2C接口
i2c = SoftI2C(Pin(9), Pin(8))
display = ssd1306.SSD1306_I2C(128, 64, i2c)

# 清空屏幕
display.fill(0)

# 设置绘制的颜色(1=亮,0=暗)
color = 1

# 要显示的文本
text = "This is a long text that needs to be scrolled vertically with automatic line wrapping. "

# 设置每行字符数和行数
characters_per_line = 18
lines = 4

# 分割文本并显示
words = text.split()
current_line = 0
current_text = ""
scroll_offset = 0

while True:
    # 清空屏幕
    display.fill(0)
   
    # 绘制文本
    for word in words:
      if len(current_text + word) <= characters_per_line:
            current_text += word + ' '
      else:
            # 超过了当前行的字符数限制,换行
            display.text(current_text, 0, current_line * 16 - scroll_offset, color)
            current_text = word + ' '
            current_line += 1
      
      # 达到了行数限制,滚动文本
      if current_line >= lines:
            break
   
    # 绘制最后一行文本
    display.text(current_text, 0, current_line * 16 - scroll_offset, color)
   
    # 更新屏幕显示
    display.show()
   
    # 增加滚动偏移量
    scroll_offset += 1
   
    # 判断是否需要重置滚动偏移量
    if scroll_offset >= 16:
      scroll_offset = 0
   
    # 添加延时,控制滚动速度
    utime.sleep(0.1)

希望这个解决方案能帮助到你!

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

yc0526vip 发表于 2023-12-21 10:49:15

FishC 发表于 2023-12-21 10:47
要给这段代码增加滚动功能,可以通过控制文字的显示位置来实现。具体的步骤如下:

1. 创建一个新的变量` ...

运行失败

FishC 发表于 2023-12-21 10:49:26

yc0526vip 发表于 2023-12-21 10:49
运行失败

抱歉给你带来困扰。请提供具体的错误信息,这样我可以更好地帮助您解决问题。

另外,让我们先尝试简化代码,以确保基本的显示功能正常。请尝试以下代码:

from machine import SoftI2C, Pin
import ssd1306

# 配置I2C接口
i2c = SoftI2C(Pin(9), Pin(8))
display = ssd1306.SSD1306_I2C(128, 64, i2c)

# 清空屏幕
display.fill(0)

# 设置绘制的颜色(1=亮,0=暗)
color = 1

# 要显示的文本
text = "Hello, World!"

# 绘制文本
display.text(text, 0, 0, color)

# 更新屏幕显示
display.show()

如果这段简化的代码能够正常运行,并且在屏幕上显示出文本"Hello, World!",那么表明硬件连接和基本配置是正确的。接下来,我们可以逐步添加滚动功能并调试代码。请将第一个示例代码中的修改应用到此简化代码中,并告诉我您遇到的具体错误信息,我会竭尽所能地帮助您解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: micro python代码调整