Hirdetés

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

  • lanszelot

    addikt

    válasz Aryes #20297 üzenetére

    Sajnos nem oldotta meg.

    module: elegoo rotary encoder
    hátha ez segít.

    jelenlegi kódom így néz ki :

    /*LED input*/
    #define led 0

    /*rotary encoder input*/
    #define inputCLK 2
    #define inputDT 1

    int currentStateCLK;
    int previousStateCLK;
    int keses = 1000;
    uint32_t lastms= 0;

    void teker(){
    if (millis() - lastms > 1000)
    {
    lastms = millis();
    if(digitalRead(inputDT) == currentStateCLK){
    keses = keses+100;
    }else{
    if(keses > 100){
    keses = keses-100;
    }
    }
    /*update */
    previousStateCLK = currentStateCLK;
    }
    }

    void setup() {

    /*inicializálja a Rotary Encoder CLK pin-t inputnak , default HIGH !!! */
    pinMode(inputCLK, INPUT_PULLUP);

    /*rotary encoder pins input*/
    pinMode (inputDT, INPUT_PULLUP);

    /*LED pin output*/
    pinMode (led, OUTPUT);

    /*read initial state of inputCLK*/
    previousStateCLK = digitalRead(inputCLK);

    /* meghívjuk az fv.-t ha LOW-ra húzod a pin-t */
    attachInterrupt(0, teker, CHANGE);

    }

    void loop() {
    /*read current state of inputCLK*/
    currentStateCLK = digitalRead(inputCLK);

    /*red led on off*/
    digitalWrite(led, HIGH);
    delay(keses);
    digitalWrite(led, LOW);
    delay(keses);



    }

    razorbenke92:
    nem +-1 extrát ugrik, hanem minimum 10-et.
    lehet, hogy többet is, csak azt nem tudom ellenőrizni.
    1000 az érték, és 100 -asával csökken, 1 tekerés 100-ra viszi le azonnal.
    100 alá nem tud menni.
    Serial monitor nem működik digispark-al, így nem tudom ellenőrizni mennyit ugrik 1 tekerésre.

    Janos250:
    Nálam azért nem jó, mert ha 1000 -ről 500-ra akarom levinni, 100 -al csökkentve, akkor 5 ször ugyanaz a csatorna kell változzon.

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