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