使用Python API在LCD屏幕上打印循环文本

时间:2014-11-19 10:52:10

标签: python

我在Raspberry Pi上连接了一个20 * 4的LCD屏幕。它有效。

现在我想要筛选几个句子并循环它们

感谢Hapex,我的代码可行但不完全符合我的要求。我无法暂停和清理时间

以下是实际代码:

  def typewriter_like(sentence, lcd_line, delay=0.7):
      for i,letter in enumerate(sentence):
      lcd_byte(lcd_line, LCD_CMD)
          lcd_string(sentence[:i+1],1)
      time.sleep(delay)

  mots = (("EXAMPLE", "EXAMPLES", "EXAMPLESS", "EXAMPLESSS"),
          ("ONE", "TWO", "THREE", "FOUR"),
          ("LULU", "FIFI", "RIRI", "TATA"))
  lcds = (0x80, 0xC0, 0x94, 0xD4)
  list(zip(mots,lcds))
  [(('EXAMPLE', 'EXAMPLES', 'EXAMPLESS', 'EXAMPLESSS'),128),(('ONE', 'TWO', 'THREE','FOUR'),192),(('LULU', 'FIFI', 'RIRI', 'TATA'),148)]

  while True:
    for mot in mots:
        for word, lcd in zip(mot, lcds):
            typewriter_like(word, lcd)
    time.sleep(10)

    for lcd in lcds:
            lcd_byte(lcd, LCD_CMD)
            lcd_string("",2)

    time.sleep(4)

我想要的是暂停前4个单词...然后在打印4个下一个单词之前擦除所有内容(全部清除)

实施例 例子 EXAMPLESS EXAMPLESSS

保持打印10秒钟 然后全部清除

ONE 二 三 四个......

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您对第二个代码的问题是对行for mot, lcd in zip(mots, lcds):的误解。你正在使用单词和十六进制数字来压缩整个元组,但是你想用一个数字压缩每个单词。

打开你的python解释器,看看结果:

>>> mots = (("EXAMPLE", "EXAMPLES", "EXAMPLESS", "EXAMPLESSS"),
         ("ONE", "TWO", "THREE", "FOUR"),
       ("LULU", "FIFI", "RIRI", "TATA"))
>>> lcds = (0x80, 0xC0, 0x94, 0xD4)
>>> list(zip(mots, lcds))
[(('EXAMPLE', 'EXAMPLES', 'EXAMPLESS', 'EXAMPLESSS'), 128), (('ONE', 'TWO', 'THREE', 'FOUR'), 192), (('LULU', 'FIFI', 'RIRI', 'TATA'), 148)]

解决方案是循环遍历mots并在zip上嵌套循环。

for mot in mots:
    for word, lcd in zip(mot, lcds):
        typewriter_like(word, lcd)

函数typewriter_like的第一个参数应该是字符串而不是元组。

要在打印当前4行后暂停显示10秒钟,请将循环修改为以下内容:

for mot in mots:
    for word, lcd in zip(mot, lcds):
        typewriter_like(word, lcd)
    time.sleep(10)

答案 1 :(得分:0)

这不是缩进的问题吗? while循环和def typewriter_like在同一级别上,所以typewriter_like被递归调用。

def typewriter_like(sentence, lcd_line, delay=0.7):
      for i,letter in enumerate(sentence):
      lcd_byte(lcd_line, LCD_CMD)
         lcd_string(sentence[:i+1],1)
      time.sleep(delay)

mots = (("EXAMPLE", "EXAMPLES", "EXAMPLESS", "EXAMPLESSS"),
         ("ONE", "TWO", "THREE", "FOUR"),
         ("LULU", "FIFI", "RIRI", "TATA"))
lcds = (0x80, 0xC0, 0x94, 0xD4)

while True:
  for mot, lcd in zip(mots, lcds):
      typewriter_like(mot, lcd)
      time.sleep(10)