Ale myslím, že ta druha část asi nebude dělat to, co jsi chtěl -
pokud není digitalRead(d_studna), tak se celý další if i else přeskočí
pokud je (a nemění se zběsile), tak
Kód: Vybrat vše
if((cerpadlo_studna1 || !digitalRead(h_studna)) && digitalRead(d_studna))
Kód: Vybrat vše
if(cerpadlo_studna1 || !digitalRead(h_studna))
Kód: Vybrat vše
cerpadlo_studna1 == true
Kód: Vybrat vše
cerpadlo_studna1 = true
Číli pokud ho nenastavuješ ještě někde jinde, tak jakmile se jednou nastaví na true, tak na něm už navždy zůstane.
Že v loop máš víc bloků za sebou a v každém víc do sebe vnořených ifů a třeba zase několi za sebou je naprosto normální věc ( Koukni třeba na
http://micro-corner.gilhad.cz/blog/Adru ... ouse2.html a přiložený kód
http://micro-corner.gilhad.cz/listings/ ... 2.ino.html
)
Jediné, co my mohlo dělat problémy je ta funkce blikej(), kdyby blokovala (a blikala dlouho), tak že se studna ošetří teprve až když se dobliká.
Osobně bych to spíš udělal přez nějako stavovou proměnnou (bool nebo tak), nějak takto:
Kód: Vybrat vše
....
bool blikani;
unsigned long currentMillis, lastMillis;
....
void loop() {
.....
if ( "hladiny cerpadla" ) {
if ( "rele cerpadla" ) {
cerpadlo_dest1 = true;
digitalWrite(cerpadlo_dest, LOW);
blikani = true;
} else {
cerpadlo_dest1 = false;
digitalWrite(cerpadlo_dest, HIGH);
blikani = false;
};
};
if (blikani) { // blikame
currentMillis=millis();
if ((currentMillis - lastMillis) >= blikaniDelay){ // cas zmenit stav ledky
digitalWrite(LEDblikani, ! digitalRead(LEDblikani));
lastMillis = currentMillis;
};
} else { // neblikame
digitalWrite(LEDblikani,LOW); // neblikame, ledka nesviti
};
....