Я работаю над простой программой подсчета для RPi-3 с семисегментный-дисплей. У меня есть два способа подсчета от одного до десяти, один вручную, всегда освещая отдельные сегменты, которые мне нужны, и другой способ, основанный на матрице numpy."" TypeError: только массивы длиной-1 могут быть преобразованы в сканеры Python "" "при попытке запустить счетчик на Pi3 с отображением 7сегмента
Ручной режим работает нормально, но у меня есть проблемы с матричным способом его выполнения. Вот код с некоторыми пояснениями к пониманию:
import RPi.GPIO as GPIO
import time
import numpy
GPIO.setmode(GPIO.BOARD)
GPIO.setup(31, GPIO.OUT) #up right
GPIO.setup(32, GPIO.OUT) #up
GPIO.setup(33, GPIO.OUT) #up left
GPIO.setup(35, GPIO.OUT) #middle
GPIO.setup(36, GPIO.OUT) #down right
GPIO.setup(37, GPIO.OUT) #down left
GPIO.setup(38, GPIO.OUT) #decimal point(in the bottom right corner)
GPIO.setup(40, GPIO.OUT) #down
def all_off(): #turns all segments off, works as well!
GPIO.output(31, False)
GPIO.output(32, False)
GPIO.output(33, False)
GPIO.output(35, False)
GPIO.output(36, False)
GPIO.output(37, False)
GPIO.output(38, False)
GPIO.output(40, False)
matrix = numpy.matrix([[1,0,0,0,1,0,0,0], #those are the combinations
[1,1,0,1,0,1,0,1], #from one to nine and finishing
[1,1,0,1,1,0,0,1], #with zero
[1,0,1,1,1,0,0,0], #first number of a line is value for Pin31 then 32,
[0,1,1,1,1,0,0,1], #33, 35, 36, 37, 38, 40
[0,1,1,1,1,1,0,1],
[1,1,0,0,1,0,0,0], #combinations are correct, btw!
[1,1,1,1,1,1,0,1],
[1,1,1,1,1,0,0,1]])
def set_to(byte):
all_off()
GPIO.output(31, int(byte[0])) #<-- this is the line where the error
GPIO.output(32, int(byte[1])) #occurs
GPIO.output(33, int(byte[2]))
GPIO.output(35, int(byte[3]))
GPIO.output(36, int(byte[4]))
GPIO.output(37, int(byte[5]))
GPIO.output(38, int(byte[6]))
GPIO.output(40, int(byte[7]))
for line in matrix: #the actual counting program
set_to(matrix[line])
time.sleep(1)
GPIO.cleanup()
Проблема, по-видимому, в том, что массив не может быть прочитан? Я не понимаю, в чем проблема или что делать, чтобы исправить эту проблему. Кажется, что это имеет какое-то отношение к «линии» матрицы, это просто другая матрица (всего одна строка).
Я действительно не знаю, что делать, пожалуйста, помогите !!
Может ли этот ответ из другого вопроса дать вам ключ: http://stackoverflow.com/a/21697288/2696355 в любом случае, почему вы используете матрицу numpy? Я думаю, вы могли бы просто использовать список списков без каких-либо проблем. – Tryph
Мне кажется, вам нужно изменить вызов set_to, похоже, что он должен быть set_to (строка), вы в настоящее время пытаетесь индексировать массив, с другим массивом, который является тем, что он жалуется, что он не может превратиться в скаляр , Я также соглашаюсь с Трифом о просто использовании списков. Кроме того, доказательство фактического отслеживания, возможно, сделало это легче обнаружить. –