int Register[] = { 0, 0, 0, 0, 0 };
int senzor1 = 2;
int senzor2 = 4;
int led = 13;
int valve = 12;
bool vyska = false;
bool Result = false;
int cas = 0;
int predcas = 0;
int Duration;
int i = 0;
int z = 2;
int MIN = 0;
int MAX = 0;
int cakanie = 1500;
int predlzenieBlow = 100;
int JRBMin = 110;
int JRBMax = 170;
int DRBMin = 200;
int DRBMax = 280;
int odpocitavanie[5] = {0, 0, 0, 0, 0};
bool vykonane[5] = {false, false, false, false, false};
void setup() {
pinMode(senzor1, INPUT_PULLUP);
pinMode(senzor2, INPUT_PULLUP);
pinMode(led, OUTPUT);
pinMode(valve, OUTPUT);
Serial.begin(9600);
}
void loop() {
cas = millis();
bool vyskomer = !digitalRead(senzor1);
bool dlzkomer = !digitalRead(senzor2);
if (dlzkomer == HIGH && predcas == 0) {
predcas = cas;
}
if (dlzkomer == HIGH && predcas != 0) {
digitalWrite(led, HIGH);
Duration = cas - predcas;
Result = true;
}
if (dlzkomer == LOW && Result == true && Duration > 10) { // Ensure Duration is meaningful
delay(2);
if (vyskomer == HIGH) {
vyska = true;
} else {
vyska = false;
Serial.println("Vyradene kvoli vyske");
}
Serial.print("Duration: ");
Serial.println(Duration);
digitalWrite(led, LOW);
predcas = 0;
Result = false;
if (Duration >= JRBMin && Duration <= JRBMax) {
z++;
} else if (Duration >= DRBMin && Duration <= DRBMax) {
z--;
}
z = constrain(z, 0, 5);
MIN = (z >= 5) ? JRBMin : DRBMin;
MAX = (z >= 5) ? JRBMax : DRBMax;
if (Duration < MIN || Duration > MAX || vyska == false) {
Serial.println("Vyradene kvoli dlzke");
Register[i] = Duration;
odpocitavanie[i] = cas;
vykonane[i] = false;
Serial.print(i);
Serial.print(". Register: ");
Serial.println(Register[i]);
i = (i + 1) % 5;
}
Duration = 0;
} else if (dlzkomer == LOW) {
predcas = 0;
Result = false;
}
for (int j = 0; j < 5; j++) {
if (Register[j] > 0 && !vykonane[j]) {
int odpocet = cas - odpocitavanie[j];
if (odpocet >= cakanie) {
digitalWrite(valve, HIGH);
odpocitavanie[j] = cas; // Update the time for blow extension
vykonane[j] = true;
}
} else if (vykonane[j]) {
int odpocetPredlzenie = cas - odpocitavanie[j];
if (odpocetPredlzenie >= predlzenieBlow) {
digitalWrite(valve, LOW);
Register[j] = 0;
vykonane[j] = false;
}
}
}
}