Hirdetés

Új hozzászólás Aktív témák

  • Teasüti

    nagyúr

    Srácok!
    Olyasmibe botlottam amit egyáltalán nem értek hogy lehetséges, soha nem láttam még ilyet és semmivel sem tudom magyarázni.
    Az alábbi kód részletben a debug kiíratás megváltoztatja a kiírni szánt adatot!!!

    void TubeDisplay::display(char *buf) {
    uint8_t buff[5];
    if (_debug) {
    Serial.print(F("Data size: "));
    Serial.println(strlen(buf));
    Serial.print(F("Data: "));
    }
    for (uint8_t i = 0, j = 4; i < strlen(buf); i++) {
    if (_debug) {
    Serial.print(buf[i]);
    Serial.print(F("="));
    }
    if (buf[i] != '.') buff[j--] = encode(buf[i]);
    else buff[j + 1] += 128;
    if (_debug) {
    Serial.print(buff[j]);
    Serial.print(F(" "));
    }
    }
    if (_debug) {
    Serial.println();
    }

    buff[0] = REG_DAT;
    if (_debug) {
    Serial.println(F("Displaying data:"));
    for (uint8_t i = 0; i < 5; i++) {
    Serial.print(buff[i]);
    Serial.print(F(" "));
    }
    Serial.println();
    }
    Wire.beginTransmission(_addr); // transmit to device #8
    Wire.write(buff, 5);
    Wire.endTransmission(); // stop transmitting
    }

    Ha _debug = false akkor más értékeket kapok a tömbben, mint ha true lenne. :Y
    Vagy ha kikommentelem a vége felé a Serial.print(buff[i]); sort, akkor megváltozik a tömb. :F

    Hozzá kell tennem, hogy egy 4 digites I2C numerikus képernyőt hajt meg ez a függvény, és most épp azt tesztelgetem mi történik, ha kevesebb adatot kap a bemenet, mint amennyi bájtot küld a Wire.
    Szóval a paranormális példában azok a bájtok változnak meg a kiíratásra, amiknek nincs értéke.
    Ez jelent vkinek vmit?

    szerk: A megoldás pedig uint8_t buff[5] = {0,0,0,0,0};

    De nem értem az okát.

Új hozzászólás Aktív témák