2014-06-08 22:25, ig rašė: > void LED_oneDigitWrite(byte digit, byte value) { > for (byte digCount = 0; digCount < 4; ++digCount) { > digitalWrite(anode[digCount], four_digits[digit-1][digCount]); > } > for (byte segCount = 0; segCount < 7; ++segCount) { > digitalWrite(cathode[segCount], seven_segments[value][segCount]); > } > delay(delDisplayTime); > } IMHO, šioje vietoje būtina gesinti bent jau anodą prieš įrašant reikšmę. Taip pat galima peržaisti logiką: 1. gesinam anodUS (arba reikia žinoti kuris anodas aktyvus) 2. išstatom segmentų reikšmes 3. uždegam reikiamą anodą. Dar pastebėjimas: organizuoti ciklą 4 anodams yra neefektyvu. Paprasčiau juos junginėti nuosekliai, su digitalWrite(anode[0], four_digits[digit-1][0]); digitalWrite(anode[1], four_digits[digit-1][1]); digitalWrite(anode[2], four_digits[digit-1][2]); digitalWrite(anode[3], four_digits[digit-1][3]); .... digitalWrite(anode[digit-1], 1); arba Tamsioji Pusė: .... volatile byte cSegment; .... void LED_oneDigitWrite(byte digit, byte value) { digitalWrite(anode[cSegment], 0); for (byte segCount = 0; segCount < 7; ++segCount) { digitalWrite(cathode[segCount], seven_segments[value][segCount]); } digitalWrite(anode[digit-1], 1); cSegment = digit-1; delay(delDisplayTime); } gal net ir katodus junginėti cikle neefektyvu, nors programa ir atrodo korektiškai. -- ejs