Hirdetés

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

  • tibi-d

    tag

    Sziasztok!
    Úgy látom, hogy a nyomógombok prellegésmentesítése ekkora probléma. Bemásolom az általam használt megoldást (kiollózva egy működő alkalmazásból). Ezt a metódust bármilyen menürendszer felépítésére fel lehet használni. Csak a fantázia szab határt.

    #include <TimerOne.h>
    int Pin3 = 3;
    int Pin4 = 4;
    int Pin5 = 5;
    int Pin6 = 6;
    int Value;
    int Back;
    int Up;
    int Down;
    int Enter;
    int Time1;
    int Count1;

    void setup()
    {
    Timer1; // Timer1 meghívása
    Timer1.initialize(100000); // Az időzítés beállítása
    Timer1.attachInterrupt( timerIsr ); // A megszakításkor meghívott függvény
    pinMode(Pin3, INPUT_PULLUP);
    pinMode(Pin4, INPUT_PULLUP);
    pinMode(Pin5, INPUT_PULLUP);
    pinMode(Pin6, INPUT_PULLUP);
    }

    void timerIsr() // Minden megszakításkor lefut 1 ciklusidőre.
    {
    Time1 = 1; // Globális változó beállítása, ami bárhol használható
    Count1 ++; // 0.5 s alatt körbeszámol
    if ( Count1 > 4 ) Count1 = 0;

    }

    void loop()
    {
    if (Time1 == 1 ) // 0.1 s-ként billentyű beolvasás
    {
    Back = digitalRead(Pin3);
    Up = digitalRead(Pin4);
    Down = digitalRead(Pin5);
    Enter = digitalRead(Pin6);
    Menu();
    Time1 = 0; // Csak 1 ciklus idejére figyeli a gombokat
    }

    }

    void Menu()
    {
    if ( Up == 0 && Count1 == 2 )
    {
    Value ++; // 0.5 s-ként növeli az értéket

    }

    if ( Down == 0 && Count1 == 2 )
    {
    Value --; // 0.5 s-ként csökkenti az értéket

    }
    }

    Lehet, hogy csak billentyű beolvasásra kicsit körülményesnek látszik, de amiben én használom ott ez a módszer vált be. (szerteágazóbb funkciók meghívása, stb)

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