Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Pythoni bytearray error märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
raitl
HV veteran


liitunud: 20.01.2002




sõnum 25.02.2020 08:13:59 Pythoni bytearray error vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
infidel
HV kasutaja
infidel

liitunud: 31.01.2004



Autoriseeritud ID-kaardiga

sõnum 25.02.2020 14:08:07 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
raitl
HV veteran


liitunud: 20.01.2002




sõnum 26.02.2020 05:46:28 vasta tsitaadiga

infidel, tänud thumbs_up.gif 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 icon_lol.gif
Kommentaarid: 165 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 147
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Pythoni bytearray error
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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.