Op vrijdag 6 september 2024 08:28:30 schreef trix:
maar de vraag is eigenlijk, hoe sla ik die het best op, b.v. in een array, bytearray of in een list, of iets anders ?
Maar wat bedoel je precies met "opslaan"? Met welk doel? Moeten de responses weggeschreven worden naar flash? Je wilt elke response van de scanner later kunnen opvragen? Of wil je het laatste x-aantal responses of bytes achter elkaar chainen. Of wil je gewoon de laatste response beschikbaar maken in andere delen van je programma?
Wat betref het juiste datatype; Ik zou het vooral zo dicht mogelijk houden bij het originele datatype, dus een bytes. Je kunt het nog wrappen in een object.
class ScannerResponse:
def __init__(self, response):
self._reponse = response
def __str__(self):
return " ".join(f"0x{b:02x}" for b in self._response)
>>> scanner_response = ScannerResponse(scanner_uart.read(3))
>>> print(scanner_response)
0x41 0x42 0x43
Of als je responses wilt chainen;
class ChainedScannerResponse:
def __init__(self, max_length):
self._max_length = max_length
self._chained_response = bytes()
def add_response(self, response):
self._chained_response = (self._chained_response + response)[-self._max_length:]
def __str__(self):
return " ".join(f"0x{b:02x}" for b in self._chained_response)
>>> scanner_responses = ChainedScannerResponse(max_length=5)
>>> scanner_responses.add_response(scanner_uart.read(3))
>>> print(scanner_responses)
0x41 0x42 0x43
>>> scanner_responses.add_response(scanner_uart.read(3))
>>> print(scanner_responses)
0x43 0x44 0x45 0x46 0x47
>>> scanner_responses.add_response(scanner_uart.read(3))
>>> print(scanner_responses)
0x46 0x47 0x48 0x49 0x50
Op donderdag 5 september 2024 21:03:25 schreef blurp:
Of als je de som wilt nemen:
som=0 for bijt in datas : som = som+bijt
Wat dacht je van:
sum(datas)Even afgezien van het feit dat datas een verschrikkelijk slechte variabelenaam is.
Op vrijdag 6 september 2024 08:28:30 schreef trix:
maar de vraag is eigenlijk, hoe sla ik die het best op, b.v. in een array, bytearray of in een list, of iets anders ?
Boeien. Je krijgt het als bytes (een object-type dat iterable is, net als een array of list) dus waarom niet dat gebruiken tot je het op een andere manier nodig hebt?
De makers van de bytes class hebben er wel voor gezorgd dat je bijna alles wat met een list kan ook met een bytes object kan, dus waarschijnlijk maakt het niets uit.
@Deskinspin, over "sum(datas)": Ja dat kan ook. Als het perl was zou ik zeggen TMTOWTDI
Op vrijdag 6 september 2024 13:04:59 schreef blurp:
[...]De makers van de bytes class hebben er wel voor gezorgd dat je bijna alles wat met een list kan ook met een bytes object kan, dus waarschijnlijk maakt het niets uit.
Een bytes kan niet wat een list kan. Een bytes is immutable. Die kan je dus beter vergelijken met een tuple. Als je mutable bytes wil kun je een bytearray gebruiken. Dan kan je wat je ook met een list kan; append, extend.
Het zou eigenlijk efficiënter zijn om intern een bytearray te gebruiken in mijn ChainedScannerResponse voorbeeld. Zeker wanneer de max_length groot wordt t.o.v. van de lengte van de bytes toegevoegd via add_response.
ik denk dat ik een voor mij goede methode heb gevonden:
// python code
if scanner_uart.any(): // is anything comming from the scanner ?
myFrame = bytearray(20)
scanner_uart.readinto(myFrame)
print([byte for byte in myFrame]) // just for testing
kijken of ik daar verder mee kan.
en.....het volgende probleem dient zich aan 
ik wil een array over een UART versturen, kan nooit moeilijk zijn zou je denken, maar op de een of andere manier lukt het niet, en ik zie wel waar het fout gaat maar niet hoe dit op te lossen.
fout gaat het bij:
scanner_uart.write(b'\byte_to_send')
hoe moet ik byte_to_send tussen die haakjes zetten ?
1e stukje code is hoe de array word gevuld.
if scanner_uart.any(): # is anything comming from the scanner ?
r15 = bytearray(230)
scanner_uart.readinto(r15)
print("r15",[byte for byte in r15])
#************** SEND DATA TO 2E PIC0 **********************************
scanner_read_write.value(1) # 1 = write and 0 = read MAX485
for i in range (229):
byte_to_send = r7 [i]
scanner_uart.write(b'\byte_to_send') #
time.sleep_ms (1)
# print(r7[i])
scanner_read_write.value(0) # 1 = write and 0 = read MAX485
net nog even geprobeerd, en dat geeft een error:
Traceback (most recent call last):
File "<stdin>", line 1119, in <module>
TypeError: object with buffer protocol required
als ik in de code de print regel toepas (is nu weg gecomment met #)
dan worden wel de waardes geprint die verstuurd moeten worden, dus het ophalen daarvan is wel goed, alleen het plaatsen in de UART.write gaat fout.
Ik ken de taal ook niet, maar de fout zegt dat je moet wijzen naar een buffer.
In "c" is dat een pointer naar iets.
Kan je dit doen?:
scanner_uart.write(r7 [i])r7 is een pointer naar het begin van je array, "i" is de index in je array.
Python als Monty is geweldig, als programeertaal: "Ni, Ni"
Groetjes,
eSe
klinkt als:
je voert scanner_uart.write() iets wat hij niet lust
maar dat is onmogelijk te onderbouwen als je telkens maar snippets code stuurt zonder aanmaak van variabele inhoud ed.
Op vrijdag 27 september 2024 15:32:04 schreef eSe:
Kan je dit doen?:scanner_uart.write(r7 [i])
dit geeft dezelfde error code
Op vrijdag 27 september 2024 15:34:55 schreef DK:
maar dat is onmogelijk te onderbouwen als je telkens maar snippets code stuurt zonder aanmaak van variabele inhoud ed.
code is nu ruim 1100 regels, lijkt me niet erg handig om die hier volledig te posten 
in het 1e stuk v/d code die ik gepost heb, zie je hoe de array word gevuld.
zoals ik het in de geposte code doe, is "het byte voor byte"
mischien dat deze methode niet de goede is ?
Succes dan, ik ga geen pagina's posts bij elkaar zoeken om te debuggen
En er zijn andere manieren van delen dan alles hier neergooien, maak een github ofzo
sorry hoor, wil je niet beledigen of iets van die strekking, maar
hoe die variabele word aan gemaakt staat toch in mijn geposte code 
Op vrijdag 27 september 2024 15:34:55 schreef DK:
zonder aanmaak van variabele inhoud ed.
de rest v/d code is voornamelijk steppen motor aansturingen, mag je van mij zien hoor.
Op vrijdag 27 september 2024 16:48:05 schreef Stijnos:
pfffff.
zeg dat wel