Close

Odpověď na: Arduino UNO – nereaguje na snímač polohy

Úvodní stránka Fórum Hardware Arduino Arduino UNO – nereaguje na snímač polohy Odpověď na: Arduino UNO – nereaguje na snímač polohy

#5032
Zbyšek Voda
Správce

Dobrý den,
nevím, jestli problém správně chápu…
Máte 4 písty a chcete mít možnost je ovládat nezávisle na sobě, že?

Navrhuji tedy něco jako:

int pist1 = 2;
int pist1Zasunut = 6; 
int pist1Vysunut = 7;

boolean pozadovanyStavPist1 = false; //false - zasunuto, true - vysunuto
int stavPist1 = 0; //0 - zasunuto, 1 - někde mezi, 2 - vysunuto

void setup() {
    pinMode(pist1, OUTPUT);
    pinMode(pist1Zasunut, INPUT);
    pinMode(pist1Vysunut, INPUT);
}

void loop() {
    //prvně nastavíme hodnotu stavPist1
    if(digitalRead(pist1Zasunuto) && !digitalRead(pist1Vysunuto){
        stavPist1 = 0;
    }
    else if(!digitalRead(pist1Zasunuto) && !digitalRead(pist1Vysunuto){
        stavPist1 = 1;
    }
    else if(!digitalRead(pist1Zasunuto) && digitalRead(pist1Vysunuto){
        stavPist1 = 2;
    }
    else{
        //k situaci, kdy by byly oba spínače sepnuté, nedojde
    }
    
    if(stavPist1 == 0){
        if(pozadovanyStavPist1 == false){
            //je zasunuto, nic nedělej
        }
        else{
            digitalWrite(pist1, LOW); //vysunout píst
        }
    }
    else if(stavPist1 == 1){
        if(pozadovanyStavPist1 == false){
            digitalWrite(pist1, HIGH); //pokračuj v zasouvání pístu
        }
        else{
            digitalWrite(pist1, LOW); //pokračuj ve vysouvání pístu
        }
    }
    else if(stavPist == 2){
        if(pozadovanyStavPist1 == false){
            digitalWrite(pist1, HIGH); //zasunout píst
        }
        else{
            //nic nedělej, je vysunuto a to je dobře
        }
    }
}

Dá se to zapsat i kratším způsobem, ale takto to snad bude pochopitelné 🙂