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

  • gyapo11

    őstag

    válasz zoombiee #14015 üzenetére

    Két dolog biztos kell, a pergésmentesítés és az időzítés.
    A nyomógomb prelljére legegyszerűbb megoldás az adott idő utáni új beolvasás. Ha 0-ra vált a bemenet, onnantól kb. 50 ms múlva újra be kell olvasni, és ha még mindig 0, akkor a nyomógomb megnyomott állapotban van. Fölengedésnél ez nem kell, tételezzük föl, hogy megnyomott állapotban egy pillanatra sem szakad meg a vezetése.
    Az időzítés pedig a millis() használatával és egy gomb figyelésével a következő:
    if(1-es gomb megnyomva && regimill==0)
    {regimill=millis()}

    if(1-es gomb megnyomva && (millis()-regimill)>1000)
    {lejárt az 1 másodperc}

    if(regimill>0 && (millis()-regimill)>1000)
    {regimill=0}

    A lényeg, hogy ne álljon le a loop pörgése, sok programban ez gond lenne, nálad is kerülhet be olyan programrészlet, aminek folyamatosan futnia kell, ezért ne használd a delayt.
    Amint az 1-es gomb megnyomott állapotba kerül és a regimill változó értéke 0, beíródik a regimillbe a millis() aktuális értéke. Ez az if a továbbiakban a regimill nullázásáig nem hajtódik végre.
    A második if-ben két feltételnek kell teljesülnie, ekkor lejárt az 1 másodperc.
    A harmadik if biztosítja, hogy ha letelt az 1 másodperc, akkor is nullázza a regimill változót, ha közben fölengedték az 1-es gombot.
    Még azt érdemes megoldnani, hogy a gomb fölengedésekor azonnal nullázza a regimill változót, hogy a következő gombnyomáskor indulhasson a számlálás.

    menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

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