Hirdetés

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

  • lanszelot

    addikt

    válasz lanszelot #20311 üzenetére

    Meg kell várjam a Nano -mat, mert lehet, hogy a RotEnc hibás.

    A linkelt pelda sem működik, pedig annak már kellene.
    /SW nincs bekötve, így semmit se jelent az a pár sor jelenleg/

    keses változó vagy nem változik, vagy nem kerül be a delay -be.

    /*LED input*/
    #define led 0

    /*rotary encoder input*/
    // Rotary Encoder Inputs
    #define CLK 2
    #define DT 1
    #define SW 4

    int counter = 0;
    int currentStateCLK;
    int lastStateCLK;
    int keses = 1000;
    String currentDir ="";
    unsigned long lastButtonPress = 0;

    void setup() {

    // Set encoder pins as inputs
    pinMode(CLK,INPUT);
    pinMode(DT,INPUT);
    pinMode(SW, INPUT_PULLUP);
    /*LED pin output*/
    pinMode (led, OUTPUT);

    // Setup Serial Monitor
    Serial.begin(9600);

    // Read the initial state of CLK
    lastStateCLK = digitalRead(CLK);
    }

    void loop() {

    // Read the current state of CLK
    currentStateCLK = digitalRead(CLK);

    // If last and current state of CLK are different, then pulse occurred
    // React to only 1 state change to avoid double count
    if (currentStateCLK != lastStateCLK && currentStateCLK == 1){

    // If the DT state is different than the CLK state then
    // the encoder is rotating CCW so decrement
    if (digitalRead(DT) != currentStateCLK) {
    counter --;
    currentDir ="CCW";
    if(keses > 100){
    keses = keses-100;
    }
    } else {
    // Encoder is rotating CW so increment
    counter ++;
    currentDir ="CW";
    keses = keses+100;
    }

    Serial.print("Direction: ");
    Serial.print(currentDir);
    Serial.print(" | Counter: ");
    Serial.println(counter);
    }

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

    // Remember last CLK state
    lastStateCLK = currentStateCLK;

    // Read the button state
    int btnState = digitalRead(SW);

    //If we detect LOW signal, button is pressed
    if (btnState == LOW) {
    //if 50ms have passed since last LOW pulse, it means that the
    //button has been pressed, released and pressed again
    if (millis() - lastButtonPress > 50) {
    Serial.println("Button pressed!");
    }

    // Remember last button press event
    lastButtonPress = millis();
    }

    // Put in a slight delay to help debounce the reading
    delay(1);
    }

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