Hirdetés

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

  • its_grandpa

    tag

    válasz lanszelot #20318 üzenetére

    Ez a kód (szerintem) annyi sebből vérzik, hogy kénytelen vagyok ....

    Az ISR-ben használt változók, volatile, tehát a definiciók:
    volatile int keses = 1000;
    volatile uint32_t lastms= 0;

    ISR-ben nem írunk a soros portra, ha jót akarunk magunknak.
    Vegyunk fel a változásra egy boolean-t.
    volatile bool tekertem = false;

    void teker(){
    if (millis() - lastms > 200)
    {
    lastms = millis();
    tekertem = true;

    if(digitalRead(DT) == currentStateCLK) keses = keses+100;

    else if (keses > 100) keses = keses-100;

    lastStateCLK = currentStateCLK;
    }
    else tekertem = false;

    } /* teker fv end */

    A void loop() -ban lehet kiírni a soros portra ha volt tekerés

    if (tekertem)
    {
    serial.print-ek
    }

    Sem a counter, sem a currentDir változó értékét nem módosítod, mindig ua.-t fogja kiírni.

    És a hab a tortán.
    Nem is értem miért működik mert ugyan INPUT_PULLUP a 2,3-as pin de az ISR fv. a 0-as pin-re van konfigurálva, nem szépen.
    attachInterrupt(0, teker, CHANGE);
    Így illene:
    attachInterrupt(digitalPinToInterrupt(PIN), teker, CHANGE);

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