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
2.11.2015 v 19:14
#5032
Účastník
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é 🙂