[AVR-GCC] Stabilne a funckne tlacitko

Vie niekto ako spravit “stabilne a funckne” tlacitko?
Toto co mam neni zrovna stabilne a moc funckne, ide mi o jedno stalcenie = jedna operacia, napr pripocitanie.

Stale sa nedari prist na spravny “vzorec”

{
        if (bit_is_clear(PINC,0))
        {
                _delay_ms(100);
                if(bit_is_set(PINC,0)) stlacenie++;
        }

:arrow_right: administrator: přejmenováno z "[AVR-GCC] Tlacitko"
:arrow_right: administrator: přesunuto z "Elektronika s mikrokontroléry, procesory"

Není špatné při stlačení spustit timer, který ti nakonec nastaví příznak, který budeš před provedením operace kontrolovat. Nebudeš pak muset brzdit program časovou smyčkou.

Chápu to správně, že hledáš pouze kód (ne schéma) pro stlačení tlačítka? Poku ano, tak téma patří do fóra AVR, kde jej případně mohu přesunout.

Viac menej hladam kod, tlacitko viem ako pripojit, resp. mozem sem postnut schema, prehladal som cely net a nic :frowning:

:arrow_right: administrator: příspěvek byl upraven
Zbytečná citace.


#define FALSE 0x00
#define TRUE 0xff
#define PREDVOLBA_CASOVEHO_FILTRA 20

utin8_t cnt_cas_filtra = PREDVOLBA_CASOVEHO_FILTRA;
uint8_t tl_vst = FALSE;
uint8_t tl_mem = FALSE;
uint8_t tl_new = FALSE;

// 1) casovy filter stlacenia tlacitka

if ("test stavu bin vstupu") tl_vst = FALSE;
else tl_vst = TRUE;


if (tl_vst == tl_mem) {
   else cnt_cas_filtra = PREDVOLBA_CASOVEHO_FILTRA;
}
else {
   if (cnt_cas_filtra) {
        cnt_cas_filtra--; 
   }
   else {
       tl_mem = tl_vst;
   }
}


// 2) zistenie nabeznej hrany odfiltrovaeho stlacenia tlacitka
if ((tl_mem == TRUE) && (tl_new == FALSE)) {

   // samotne telo toho co chces, aby sa pri stlaceni tlacitka prave 1x vykonalo
}
tl_new = tl_mem;

zapisane z “fleku”, neoveroavane.

{ if (bit_is_clear(PINC,0)) { _delay_ms(100); if(bit_is_set(PINC,0)) stlacenie++; }

Zkus

if (bit_is_clear(PINC,0)) { _delay_ms(100); loop_until_bit_is_set(PINC,0); stlacenie++;

Dobry kod na “zamrznutie procesora” pocas stlacenia tlacitka :slight_smile: