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

  • JulianSinulf

    őstag

    Ez így felettébb érdekes.
    Most ilyen a kód:

    void step0_1mm()
    {
    heTest();
    for (uint32_t i=0; i<2850; ++i)
    {
    vegallas_fent();
    vegallas_lent();
    if ((u == 1 and r == 1) or (d == 1 and r == 0))
    {
    Serial.print("fent: ");
    Serial.println(u);
    Serial.print("lent: ");
    Serial.println(d);
    Serial.print("forgas: ");
    Serial.println(r);
    return;
    }
    else
    {}
    digitalWrite(STEP_PIN, !digitalRead(STEP_PIN));
    delayMicroseconds(STEP_DURATION);

    }
    }

    Ha teljesül a feltétel, akkor kiírja az "u" (fent), "d" (lent), "r" (forgásirány) értékeit és nem csinál semmit. Vagyis teszi a dolgát.
    Ha nem teljesül, akkor nem fut le az "else" rész (ezért is vettem ki belőle a motor vezérlése részt), ellenben újrafut a ciklus.
    Viszont szerintem túl lassan fut le a ciklus ahhoz, hogy megmozdítsa a motort, mert bár a motornak van áramfelvétele, mégsem mozdul. És tovább is van terhelve, mintha normálisan lefutna a ciklus.
    Persze, ha azt mondanám a motornak, hogy 1 lépés, akkor 1 lépést is tudnia kellene fordulni, de így terhelés mellett nem venném észre, hogy megmozdult a terhelés.

    Gondolom szebb lenne a dolog, ha a végállást úgy vizsgálnám, hogy, ha az érték nem változott, akkor ne csináljon semmit. De ez per pillanat túl bonyolultnak tűnik.

    Lehet, hogy a végálláskapcsoló állapotának a soros monitorra iratása fogná vissza?
    Akkor is, ha nincs gépre kötve a panel?

    Szerk.: Igen, így van. Kivettem a soros monitor kiíratást és máris működik.
    Azt viszont nem értem, hogy a "if" "else" része miért nem fut le és tér vissza a ciklushoz, mikor nem teljesült egyik feltétel sem.

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