/*
Forum: https://forum.arduino.cc/t/how-to-create-a-variable-pause/1440292
Wokwi: https://wokwi.com/projects/461499361648079873
ec2021
2026/04/17
* verwendet micros() anstelle von millis()
* ist nicht blockierend (kein delay())
*/
//Arduino Test variable Pause mit Micros
// Eingebundene Bilbliotheken
#include <Arduino.h>
#include "avdweb_AnalogReadFast.h"
#include "digitalWriteFast.h"
enum class ACTION {IDLE, WHILEOFF};
// Define pin connections
constexpr byte Poti = A1;
constexpr byte stepPin = 13;
constexpr unsigned long maxPause = 1000; //ms
ACTION action = ACTION::IDLE;
unsigned long lastAction;
unsigned long Pause;
int Poti_Value;
void setup() {
Serial.begin(115200);
Serial.println("Ready");
pinModeFast(stepPin, OUTPUT);
digitalWriteFast(stepPin, HIGH);
lastAction = micros();
}
void loop () {
switch (action) {
case ACTION::IDLE:
Poti_Value = analogReadFast(Poti);
Pause = map(Poti_Value, 0, 1023, 0, maxPause) * 1000; // milli to micro
// Skip until 500 ms elapsed
if (micros() - lastAction > 500000UL) { // Replaces delay(500)
action = ACTION::WHILEOFF;
digitalWriteFast(stepPin, LOW);
lastAction = micros();
}
break;
case ACTION::WHILEOFF:
// Skip until Pause elapsed
if (micros() - lastAction > Pause) {
action = ACTION::IDLE;
digitalWriteFast(stepPin, HIGH);
lastAction = micros();
}
break;
}
}