const int fwdIn = A2;
const int bwdIn = A3;
const int fwdOut = 2;
const int bwdOut = 3;
unsigned long fwdONStartMillis = 0;
unsigned long fwdOFFMillis = 0;
unsigned long bwdONStartMillis = 0;
unsigned long bwdOFFMillis = 0;
const int shortON = 1000;
const int longON = 3000;
const int odskokVypnutiSHORT = 1000;
const int odskokVypnutiLONG = 3000;
const int threshold = 550; // hodnota pro threshold analogových vstupů
bool fwdWasON = false;
bool fwdOffDelayActive = false;
bool bwdWasON = false;
bool bwdOffDelayActive = false;
int currentOdskokVypnuti = 0;
void setup() {
pinMode(fwdIn, INPUT);
pinMode(bwdIn, INPUT);
pinMode(fwdOut, OUTPUT);
pinMode(bwdOut, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
// čtení stavu vstupů do MCU
int fwdInVal = analogRead(fwdIn);
int bwdInVal = analogRead(bwdIn);
if (fwdInVal > threshold) {
if (!fwdWasON) {
fwdONStartMillis = currentMillis;
}
fwdWasON = true;
fwdOffDelayActive = false;
digitalWrite(fwdOut, HIGH);
}
if (fwdWasON && fwdInVal < threshold && !fwdOffDelayActive) {
fwdOFFMillis = currentMillis;
fwdOffDelayActive = true;
unsigned long fwdONDuration = currentMillis - fwdONStartMillis;
if (fwdONDuration <= shortON) {
currentOdskokVypnuti = odskokVypnutiSHORT;
} else {
currentOdskokVypnuti = odskokVypnutiLONG;
}
}
if (fwdOffDelayActive && (currentMillis - fwdOFFMillis >= currentOdskokVypnuti)) {
fwdWasON = false;
fwdOffDelayActive = false;
digitalWrite(fwdOut, LOW);
}
// ----------
if (bwdInVal > threshold) {
if (!bwdWasON) {
bwdONStartMillis = currentMillis;
}
bwdWasON = true;
bwdOffDelayActive = false;
digitalWrite(bwdOut, HIGH);
}
if (bwdWasON && bwdInVal < threshold && !bwdOffDelayActive) {
bwdOFFMillis = currentMillis;
bwdOffDelayActive = true;
unsigned long bwdONDuration = currentMillis - bwdONStartMillis;
if (bwdONDuration <= shortON) {
currentOdskokVypnuti = odskokVypnutiSHORT;
} else {
currentOdskokVypnuti = odskokVypnutiLONG;
}
}
if (bwdOffDelayActive && (currentMillis - bwdOFFMillis >= currentOdskokVypnuti)) {
bwdWasON = false;
bwdOffDelayActive = false;
digitalWrite(bwdOut, LOW);
}
}