Hirdetés

Keresés

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

  • Teasüti

    nagyúr

    válasz Vladi #7083 üzenetére

    Unatkoztam, remélem nem haragszol meg érte ha esetleg ez volna a megoldás! :B
    Nem igazán emlékszem a kapcsolási rajzodra, de a bemenetek alapból Vcc-re vannak húzva és GND-re kapcsolsz, ugye? Meg hardveres prell mentesítést használsz, ugye? Mielőtt interrupt özön keletkezik egy gombnyomásra. :D
    Hosszú idő után ez az első programom, így lehetnek benne hibák. Pár dolgot ki kellett keresnem, mert nem emlékeztem rá.
    Arra figyelj, hogy szünet után azonnal nyissz lesz, ha lejárt a ciklusidő!

    #define vido 19890 // EZ A LENYEG! Ez a vágási idő ciklus. kb 51 az 1 mm-t jelent. millisecundum egyébként.
    unsigned long currentMillis, previousMillis;
    bool piros;

    void nyissz() {
    piros = true;
    }

    void setup() {
    pinMode(3, INPUT); //piros
    pinMode(2, INPUT); //mikro
    pinMode(13, OUTPUT); //led
    pinMode(6, OUTPUT); //relé
    Serial.begin(9600);
    attachInterrupt(digitalPinToInterrupt(2), nyissz, LOW);
    }

    void loop() {
    currentMillis = millis();
    if (currentMillis - previousMillis >= vido || piros) {
    digitalWrite(6, HIGH);
    delay(100);
    digitalWrite(6, LOW);
    Serial.println("Vágtam, kövi.");
    previousMillis = currentMillis;
    piros = false;
    }
    if (digitalRead(2) == LOW) {
    while (digitalRead(2) == LOW);
    }
    }

  • Tankblock

    aktív tag

    válasz Vladi #7083 üzenetére

    Hello,

    Szerintem koncepcionálisan van elbökve a kód.

    interruptba nem illik/ szabad kiíratást rakni.
    Az interrupt kódjának illik minimálisnak lennie ha lehetne késedelm delay nélkül.....

    Ha az időt (previousMillis ha jól látom )kiteszed volatile unsigned longba, akkor millis fv segítségével aktualizálhatod.

    Én a logikát a loopba raknám és a Interruptokba csak flageket állítanék és állapotgépeket pörgetnék a loopba, megfelelő feltételek melett, és a delay-t helyett for időkülönbséget néznék az állapogépben.....
    De ez én vagyok, remélem más ad jobb tanácsokat.

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