我在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 二 三 四个......
有人可以帮助我吗?
答案 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)