Keresés

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

  • Teasüti

    nagyúr

    válasz tboy93 #4199 üzenetére

    Ez azért van, mert a loop() másodpercenként több ezerszer lefut és amennyiben egy ciklus idejénél tovább tartod nyomva a gombot ( ;] ), úgy ki-bekapcsolgat a led, aztán mikor felengeded akkor teljesen random, hogy épp melyik állapotban lesz.

    Ezért szokás egy változóval figyelni a gomb állapotát és minden ciklusban összehasonlítani az előző állapottal, ami ha megegyezik a jelenlegivel, akkor nem futsz fölösleges köröket. Ha nem egyezik meg a jelenlegivel, akkor ez alkalommal lett lenyomva a gomb, mely átállítja a változót is és a következő körben már nem fog beaktiválni.

    Én ezt a módszert szoktam alkalmazni gombnyomásra, vagy bármi egyéb digitális jelzésre:
    //button press
    if (digitalRead(button) == LOW && !pressed) {
    buttonOn = !buttonOn;
    pressed = true;
    Serial.println("Pressed");
    }
    else if (digitalRead(button) == HIGH) pressed = false;

    Ezzel a kóddal pontosan úgy fog működni a gomb, ahogy azt az ember várná. Már ha kapcsolóként akarod, nem pedig "nyomvatartósként". Utóbbinál nyilván nem kell akkor szűrni a jelet, elég annyi, hogy a buttonOn változót nem csak átbillented, hanem konkrétan meghatározod milyen értéket vegyen fel lenyomott és felengedett állapotban.

    (#4200) Tankblock
    Ez nem erre van kitalálva.
    A kolléga egy-egy gombnyomásra akarja ki- és bekapcsolni. A késleltetéssel a prell-t szűrőd, viszont a feladatot nem oldja meg, hisz nyomva tartásnál villogtatni fogja a ledet, ha X időközönként újra és újra átbillenti a buttonOn változót, amíg tartod a gombot.

  • Tankblock

    aktív tag

    válasz tboy93 #4199 üzenetére

    Hello

    Timert tegyél hozzá. mert így looponként fogsz váltani.

    unsigned long timer = 0;

    az if feltételét egészítsd ki millis()-timer > X ahol X lehet játszani

    az ifben meg timer = millis();

    így a változás csak X enként van követve.

    Szerk: Annyire nem is volt rossz az ötletem : [link]

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

Hirdetés