tlacitka vyhodnotenie nabeznej-dobeznej hrany

Takze chlapi znovu ozivujem starsiu temu ale potreboval by som poradit. Skusal som kod ktory tu dal Martin na vyhodnotenie nabeznej hrany. Vsetko funguje ako ma po par upravach. A to by som chcel zistit ze preco. Davam tu cast kodu (cely je o par riadkov vysie) popisem co som upravil. Takze namiesto POCET_TLACITOK som musel zvysit hodnotu na 5 (povodne bola 4 vid define vysie) ak som mal hodnotu 4 fungovali mi len prve 3 tlacitka. Stvrte vobec nereagovalo. Az po zvyseni hodnoty na 5.

Dalej snazim sa pochopit cely kod ako pracuje nerozumiem cyklu for. Ten mi spravi napr 4 cykly. V kazdom cykle sa dekrementuje premena casovac_tl* o jedno alebo o celý cas ktory je ulozeny v CAS_NABEZNEJ_HRANY. Lebo cykly su 4 a cas je 25 ktory sa musi dekrementovat. Dekrementuje sa 4x po 25? Dufam ze som sa zrozumitelne vyjadril :slight_smile:

[code]

// kazdu ms pod prerusenim budes spustat nasledovny kod

void fn_vyhodnot_tl(void)
{
aktualny_stav_tl = fn_stav_tlacitok();
// POZOR, vsetko bude fungovat do poctu tlacitok 8. Pre 16 tlacitok treba zmenit typy premennych z bajtov na wordy. Casovace netreba, ak cas na ustalenu roznost stavov ma byt mensi ako 256ms.
for(uint8_t i = 0; i < POCET_TLACITOK; i++) {

// testujem pripadnu zmenu stavu
if ( TST(aktualny_stav_tl, i ) != TST(stary_stav_tl,i )  ) {
   // samotna zmena stavu nestaci,
   // este aj "casovac" musi dopocitat do nuly
   if (casovac_tl*) (casovac_tl*--;

   // ak roznost stavov trvala zelanu dobu,
   // mozeme ju akceptovat a spravit prislusne vyhodnotenia
   else {
      if TST(aktualny_stav_tl,i) {
         SET(stary_stav_tl,i );
         SET(nabezna_hrana_tl,i );
         casovac_tl* = CAS_DOBEZNEJ_HRANY;
      }
      else {
         RES(stary_stav_tl, i );
         SET(dobezna_hrana_tl,i );
         casovac_tl* = CAS_NABEZNEJ_HRANY;
      }
   }
}

// ak by sa i na jednu vzorku oba stavy rovnali,
// "casovac" sa znovu nastavi na hodnotu predvolby tu
else {
   if TST(aktualny_stav_tl,i) {
      casovac_tl* = CAS_DOBEZNEJ_HRANY;
   }
   else casovac_tl* = CAS_NABEZNEJ_HRANY;
}

} [/code]*******