Helmuth:
Während dieser Loop läuft, möchte ich via Tastendruck delay_between_steps manipulieren (up/down). Dabei soll einerseits kein Tastendruck verlorengehen, andererseits darf der Loop nicht stolpern.
Desweiteren brauche ich durch Tastendruck ausgelöst die Funktion start_now, d.h. unter Beibehaltung von delay_between_steps möche ich den Triggerpunkt innerhalb dieses Zeitfensters verschieben, nennen wir es trigger_within_delay.
Vielleicht sowas?
// Dx
#define BUTTON_UP 2
#define BUTTON_DOWN 3
#define BUTTON_START 4
#define LED 13
unsigned long tick;
unsigned int delayBetweenSteps = 1000; // Blinkt alle 1000ms ...
unsigned int blinkLength = 20; // ... 20ms lang
void setup() {
}
void loop() {
if (digitalRead(BUTTON_UP))
delayBetweenSteps += 10; // ms
if (digitalRead(BUTTON_DOWN))
delayBetweenSteps -= 10; // ms
if (digitalRead(BUTTON_START))
tick = millis();
if (millis()-tick > delayBetweenSteps)
tick += delayBetweenSteps;
digitalWrite(LED, millis()-tick<blinkLength);
}
Ungetestet, daher ohne Gewähr!