Hirdetés

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

  • Aryes

    nagyúr

    válasz lanszelot #20064 üzenetére

    Az ellenállás nélkül, de úgy raktam be

    Tehát nem úgy. :)

    Tudom, hogy sok információ, de:
    1. A prellmentesítést/debouncing-ot nem hardveresen szokás megoldani, mivel szoftverből jól kezelhető a probléma.
    2. Ha mégis hardverből szeretnéd, akkor az ellenállás és a kondenzátor értéke együtt fogja neked kiadni a debounce idejét. A beépített ellenállás 30kΩ-50kΩ közti random érték, amivel nem igazán lehet számolni
    3. Ha szoftverből csinálod, nem kell külső felhúzó ellenállás, a beépített pont elég, hogy a lebegést megszüntesse, hiszen erre kell az ellenállás.
    4. Felejtsd el a kalkulátort, csináld szoftverből, hiszen ez a bevett, kipróbált módszer. ;)
    5. A 80ms debounce és a 270ms mérési késleltetés egymástól teljesen független. Ha a fenti kódot beteszed a programba, észre fogod venni, hogy egyik nem befolyásolja a másikat. A működése egyébként az, hogy amikor prellez a gomb érintkezője, az utolsó alacsony szint után vár 80ms-ot, és csak utána reagál. Ha 80ms előtt új impulzus érkezik, akkor nem reagál rá.

    szerk.: Most jöttem rá, hogy rossz a kód, ez interrupt esetén nem fog működni... Ez lesz a jó:

    void gombotnyom(){
    if (millis() - debounce > 80){ /* eltelt 80 msec ? */
    gombNyomas ++; /* növeljük 1-el a gombnyomások számát */
    if (gombNyomas >3) gombNyomas = 1;
    debounce = millis();
    }
    }

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