praegune kellaaeg 16.06.2024 09:17:21
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
raitl
HV veteran
liitunud: 20.01.2002
|
25.02.2020 08:13:59
Pythoni bytearray error |
|
|
Ehk oskab keegi mind õigele teele juhatada, Python on minu jaoks ikka päris võõras elukas.
Keetsin mingi näite põhjal kokku koodi APA102 (NeoPixeli sugulane) jada juhtimiseks. Kõik on ilus ja kena kuni 1014 piksli pikkuse jadani. Kui üritan juhtida pikemat jada, siis viskab bytearray errori. Esimese hooga arvasin et Pythoni bytearray'l on konkreetne max pikkus kuna koos headeriga paistab 1014 piksli buffer just sinna 1024 kanti jääma. Samas netis tuhnides ma ei näe et bytearrayl mingi pikkuse piirang oleks.
Error:
Traceback (most recent call last):
File "APA102_2.py", line 276, in <module>
pixels[i] = int(endValue), int(endValue), int(endValue)
File "APA102_2.py", line 143, in __setitem__
self._set_item(index, val)
File "APA102_2.py", line 130, in _set_item
self._buf[offset + 3] = rgb[WWW[2]]
IndexError: bytearray index out of range
|
Rida 130 on siis alloleva funktsiooni kõige viimane rida:
def _set_item(self, index, value):
"""
value can be one of three things:
a (r,g,b) list/tuple
a (r,g,b, brightness) list/tuple
a single, longer int that contains RGB values, like 0xFFFFFF
brightness, if specified should be a float 0-1
Set a pixel value. You can set per-pixel brightness here, if it's not passed it
will use the max value for pixel brightness value, which is a good default.
Important notes about the per-pixel brightness - it's accomplished by
PWMing the entire output of the LED, and that PWM is at a much
slower clock than the rest of the LEDs. This can cause problems in
Persistence of Vision Applications
"""
offset = index * 4 + START_HEADER_SIZE
rgb = value
if isinstance(value, int):
rgb = (value >> 16, (value >> 8) & 0xff, value & 0xff)
if len(rgb) == 4:
brightness = value[3]
# Ignore value[3] below.
else:
brightness = 1
# LED startframe is three "1" bits, followed by 5 brightness bits
# then 8 bits for each of R, G, and B. The order of those 3 are configurable and
# vary based on hardware
# same as math.ceil(brightness * 31) & 0b00011111
# Idea from https://www.codeproject.com/Tips/700780/Fast-floor-ceiling-functions
brightness_byte = 32 - int(32 - brightness * 31) & 0b00011111
self._buf[offset] = brightness_byte | LED_START
self._buf[offset + 1] = rgb[WWW[0]]
self._buf[offset + 2] = rgb[WWW[1]]
self._buf[offset + 3] = rgb[WWW[2]]
|
|
|
Kommentaarid: 165 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
147 |
|
tagasi üles |
|
|
infidel
HV kasutaja
liitunud: 31.01.2004
|
25.02.2020 14:08:07
|
|
|
Index out of range tähistab seda, kui otsitavat indeksit ei õnnestunud vahemikust leida. Kirjelduse järgi jääb mulje, nagu oleks jada lõpust üks puudu. Ehk siis esimese sammuna tasuks kontrollida, kas jada ja päise pikkuste vahe jagub neljaga või mitte.
|
|
Kommentaarid: 35 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
|
raitl
HV veteran
liitunud: 20.01.2002
|
26.02.2020 05:46:28
|
|
|
infidel, tänud Leidsin kala üles. Asus hoopis mujal kui kõik need kohad kust teda otsisin. Kuna skript jookseb käivitamisel ühe korra, mitte ei jää loopima, siis salvestasin puhvri sisu alati faili, et järgmine kord teda sealt lugeda. Probleem oli selles et puhvrist tagasi lugedes ma ei kontrollinud et eelmise korra puhver ei oleks väiksem kui käesoleva. Seega kui eelmine kord juhtisin 1000 pixlit ja järgmine kord 2000, siis oligi probleem käes
|
|
Kommentaarid: 165 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
147 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|