Keresés

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

  • lanszelot

    addikt

    válasz Aryes #20291 üzenetére

    Oh, azt hittem az attachInterrupt más :B

    pin-ek:
    digispark gnd : RotEnc gnd
    digispark 5V : RotEnc+
    digispark pin2 : RotEnc CLK
    digispark pin1 : RotEnc DT
    digispark 5V : R1
    digispark gnd : R2
    pirosLED rövid láb : R1
    kékLED rövid láb : R2
    pirosLED hosszú láb : digispark pin0
    kékLED hosszú láb : digispark pin0

    már úgy ahogy működik, de egy irányba állítja csak a sebességet:

    /*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;
    }
    }
    }
    }

    void setup() {

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

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

    /*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);

    /*update */
    previousStateCLK = currentStateCLK;

    }

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

Hirdetés