Ich versuche, einige serielle Eingabe- und Ausgabevorgänge durchzuführen, und eine davon ist, ein 8x8-Array an ein externes Gerät (Arduino) zu senden. Die pySerial-Bibliothek erfordert, dass die Informationen, die ich sende, ein Byte sind. In meinem Python-Code besteht die 8x8-Matrix jedoch aus den Typen <class 'str'>
. Hier ist meine Sendefunktion:Python Konvertieren String in Byte
import serial
import Matrix
width = 8
height = 8
portName = 'COM3'
def sendMatrix(matrix):
try:
port = serial.Serial(portName, 9600, timeout = 1000000)
port.setDTR(0)
print("Opened port: \"%s\"." % (portName))
receivedByte = port.read()
print(int(receivedByte))
if (receivedByte == '1'):
port.write('1')
bytesWritten = 0
for row in range(8):
for col in range(8):
value = matrix.getPoint(col, row)
bytesWritten += port.write(value)//ERROR HERE!
print(int(port.read()));
port.close()
print("Data (%d) sent to port: \"%s\"." % (bytesWritten, portName))
except:
print("Unable to open the port \"%s\"." % (portName))
def main():
matrix = Matrix.Matrix.readFromFile('framefile', 8, 8)
matrix.print()
print(type(matrix.getPoint(0, 0)))
print(matrix.getPoint(1, 1))
sendMatrix(matrix)
main()
Nun, ich habe eine Klasse Matrix
, die ein Feld enthält map
, die das Array in Frage, und ich werde diesen Code auch hier ist, aber das Problem, das ich habe ist, dass jedes Element im Array vom Typ str
ist, aber ich muss es in ein Byte konvertieren. Ich kann mögliche Datenverluste ignorieren, da ich in der Praxis nur Nullen und Einsen benutze.
My Matrix Klasse:
class Matrix(object):
def __init__(self, width, height):
self.width = width
self.height = height
self.map = [[0 for x in range(width)] for y in range(height)]
def setPoint(self, x, y, value):
if ((x >= 0) and (x < self.width) and (y >= 0) and (y < self.height)):
self.map[y][x] = value
def getPoint(self, x, y):
if ((x >= 0) and (x < self.width) and (y >= 0) and (y < self.height)):
return self.map[y][x]
def print(self):
for row in range(self.height):
for col in range(self.width):
print(str(self.map[row][col])+" ", end="")
print()
def save(self, filename):
f = open(filename, 'w')
for row in range(self.height):
for col in range(self.width):
f.write(str(self.map[row][col]))
f.write('\n')
f.close()
def toByteArray(self):
matrixBytes = bytearray(self.width * self.height)
for row in range(self.height):
for col in range(self.width):
matrixBytes.append(int(self.map[row][col]))
return matrixBytes
def getMap(self):
return self.map
def readFromFile(filename, width, height):
f = open(filename, 'r')
lines = list(f)
matrix = Matrix(width, height)
f.close()
for row in range(len(lines)):
matrix.map[row] = lines[row].strip('\n')
return matrix
Warum machst du nicht einfach 'bytes (matrix.toByteArray())'? –
Matrix ist ein Objekt und enthält eine Breite, eine Höhe und ein zweidimensionales Array. Es ist nicht einfach eine iterierbare Struktur. –
Sicher, aber der Code für Ihre 'matrix.toByteArray'-Methode sieht so aus, als würde sie die Matrixdaten korrekt in ein Bytearray serialisieren, und die eingebaute' bytes'-Funktion wird ein Byte-Objekt aus diesem Bytearray erzeugen. –