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

  • JulianSinulf

    őstag

    Sziasztok!

    Akadt egy kis bajom a "if and or" használatával.
    Itt a kódrészlet. Remélhetőleg az oldal megfelelően fogja kezelni:

    void step0_1mm()
    {
    heTest();
    for (uint32_t i=0; i<2850; ++i)
    {
    vegallas_fent();
    vegallas_lent();
    if (v == 1)
    {
    if (((digitalRead(KAPCSOLO_VEGALLAS_FENT) == LOW) && (digitalRead(KAPCSOLO_FORGASIRANY) == HIGH)) || ((digitalRead(KAPCSOLO_VEGALLAS_LENT) == LOW) && (digitalRead(KAPCSOLO_FORGASIRANY) == LOW)))
    {
    break;
    }
    }
    else
    {
    digitalWrite(STEP_PIN, !digitalRead(STEP_PIN));
    delayMicroseconds(STEP_DURATION);
    }
    }
    }

    A "v" int változó és a vegallas_fent és vegallas_lent részben kaphat 1-es értéket. Amúgy nullával indul.
    A végállás részek majdnem ugyan úgy néznek ki, a különbség a figyelt kapcsolóban van.
    A cél az lenne, ha valamelyik "és" feltétel teljesül, akkor álljon meg a ciklus, ha nem, akkor fusson tovább.
    De nem így tesz.
    Ha a forgásirány kapcsoló magas értéken van, akkor nem hajtja végre az "else" utáni részt, ellenben lefut a ciklus 2850-szer. Gondolom, nem számoltam meg, de a végállás részekben kiíratom, hogy aktív a kapcsoló és az jó sokszor ott van a soros monitoron.
    Ha a forgásirány kapcsoló alacsony értéken van, akkor megáll a program.

    Próbálkoztam egy ilyennel is, de az eredmény változatlan:

    void step0_1mm()
    {
    heTest();
    for (uint32_t i=0; i<2850; ++i)
    {
    vegallas_fent();
    vegallas_lent();
    if (v == 1)
    {
    if (digitalRead(KAPCSOLO_VEGALLAS_FENT) == LOW && digitalRead(KAPCSOLO_FORGASIRANY) == HIGH)
    {
    break;
    }
    }
    else
    {
    digitalWrite(STEP_PIN, !digitalRead(STEP_PIN));
    delayMicroseconds(STEP_DURATION);
    }
    if (v == 1)
    {
    if (digitalRead(KAPCSOLO_VEGALLAS_LENT) == LOW && digitalRead(KAPCSOLO_FORGASIRANY) == LOW)
    {
    break;
    }
    }
    else
    {
    digitalWrite(STEP_PIN, !digitalRead(STEP_PIN));
    delayMicroseconds(STEP_DURATION);
    }
    }
    }

    És azt sem értem, hogy először be van állítva a "v" nullára, majd amikor utána lefut a végállás rész (itt már 300 ms van a "v = 0" és végállás rész között), akkor a "v"-t át kell állítani 1-re (mert a kapcsoló érteke LOW) és ezzel együtt egy kimenetet magas állapotba kell tennie. Ezt nem teszi meg indulásnál.
    Ha futtatom a "step" részt, akkor az a bizonyos kimenet magas állapotba kerül.

    Azért ide teszem a végállás részt is:

    void vegallas_lent()
    {
    if (digitalRead(KAPCSOLO_VEGALLAS_LENT) == LOW)
    {
    v = 1;
    digitalWrite(LED_VEGALLAS, HIGH);
    Serial.println("Végálláskapcsoló lent aktív!");
    }
    else
    {
    v = 0;
    digitalWrite(LED_VEGALLAS, LOW);
    }
    }

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

Hirdetés