Форум сайта python.su
0
Нужно написать программу для Raspberry Pi, которая выводит на текстовый экран (16x2) список файлов определенного разрешения из определенной директории. Чтобы потом можно было с помощью подключенного блока кнопок прокручивать этот список и выбирать файлы. К примеру выбрать файл и потом отправить его печататься.
Написал тестовую программы, которая выводит массив в виде текста, разбивая его на строки (один файл – одна строка). Проблема в том, что программа выводит массив только из двух файлов, остальные отбрасывает, соответственно листать там больше нечего. И выводится это все в виде текста, а это значит никакие действия с выведенными файлами в списке совершать невозможно.
Как решить эту проблему?
Ниже прикрепил, то что дает программа на выходе.
Код программы:
#!/usr/bin/python import RPi.GPIO as GPIO import os from time import sleep directory = '/media/TRANSCEND' files = os.listdir(directory) images = filter(lambda x: x.endswith('.jpg'), files) class HD44780: def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]): self.pin_rs=pin_rs self.pin_e=pin_e self.pins_db=pins_db GPIO.setmode(GPIO.BCM) GPIO.setup(self.pin_e, GPIO.OUT) GPIO.setup(self.pin_rs, GPIO.OUT) for pin in self.pins_db: GPIO.setup(pin, GPIO.OUT) self.clear() def clear(self): self.cmd(0x33) # $33 8-bit mode self.cmd(0x32) # $32 8-bit mode self.cmd(0x28) # $28 8-bit mode self.cmd(0x0C) # $0C 8-bit mode self.cmd(0x06) # $06 8-bit mode self.cmd(0x01) # $01 8-bit mode def cmd(self, bits, char_mode=False): sleep(0.001) bits=bin(bits)[2:].zfill(8) GPIO.output(self.pin_rs, char_mode) for pin in self.pins_db: GPIO.output(pin, False) for i in range(4): if bits[i] == "1": GPIO.output(self.pins_db[::-1][i], True) GPIO.output(self.pin_e, True) GPIO.output(self.pin_e, False) for pin in self.pins_db: GPIO.output(pin, False) for i in range(4,8): if bits[i] == "1": GPIO.output(self.pins_db[::-1][i-4], True) GPIO.output(self.pin_e, True) GPIO.output(self.pin_e, False) def message(self, text): for char in text: if char == ',': self.cmd(0xC0) # переход на следующую строку else: self.cmd(ord(char),True) if __name__ == '__main__': lcd = HD44780() images = str(images) lcd.message(images
Отредактировано Giffr (Март 8, 2016 11:33:13)
Прикреплённый файлы:
IMG_20160308_120255.jpg (499,2 KБ)
Офлайн
все верно. выдает весь список
files = os.listdir("/home") f_index = 0 f_len = len(files) while True: s = raw_input() if s == 'q': break elif s == 'n': f_index += 1 f_index %= f_len elif s == 'p': f_index -= 1 f_index += f_len f_index %= f_len print f_index, files[f_index]
Отредактировано vic57 (Март 8, 2016 12:28:36)
Офлайн
857
GiffrСначала напиши правильно исполнитель, который работает с этим табло. Он не должен понимать, какой текст ему подают. Он должен правильно выводить любой текст.
Как решить эту проблему?
GiffrВо-первых, в тексте, выводимом на табло, может быть запятая. Поэтому он не должен заменять запятую, а должен выводить её. Во-вторых, если нужен перевод строки, то для этого нужно использовать стандартный \n. В-третьих, нужно следить за длиной сообщения, сдвигая его влево на табло, если она превышена. Для этого нужно хранить буфер внутри, который и будет выводиться.def message(self, text): for char in text: if char == ',': self.cmd(0xC0) # переход на следующую строку else: self.cmd(ord(char),True)
GiffrА блок кнопок тоже не должен знать про табло. У тебя должна быть программа, которая управляет тремя независимыми вещами: табло, поисковиком путей и блоком кнопок.
Чтобы потом можно было с помощью подключенного блока кнопок прокручивать этот список и выбирать файлы.
Отредактировано py.user.next (Март 8, 2016 13:03:32)
Офлайн
и тут ошибка
images = str(images)
>>> lst = ['a','s','d','f']
>>> lst
['a', 's', 'd', 'f']
>>> str(lst)
"['a', 's', 'd', 'f']"
>>>
Офлайн