Hallo User,
ich habe den folgenden Code zusammengeschustert der auf Knopfdruck eine Sequenz aus 7 Relais nacheinander schalten soll. Hierbei wird jedes Relais mit einer unterschiedlichen Laufzeit geschalten. Zwischen den Relaislaufzeiten wird immer 500 Millisekunden gewartet bis das nächste Relais schalten soll.
Nun habe ich gemerkt das ich jedoch keine weiteren Eingaben machen kann während die Relaissequenz abgearbeitet wird.
Ist es somit generell nicht der richtige Programmierstil um weitere Funktionen einarbeiten zu können, da ich bereits darauf geachtet habe kein delay() zu verwenden.
Ist es somit möglich den Code zu retten oder ist der Ansatz hierfür nicht in Ordnung und ich sollte den Code generell anders aufbauen? Denn wenn ich einen Not-Aus Schalter implementieren möchte kann ich diesen hierbei nicht einbauen da keine weiteren Tasks verarbeitet werden können...
Mir ist erst bei (Serial.println("Block test") aufgefallen das der Prozessor blockiert wird.
Vielen Dank für Tipps und Tricks
//Button & Relay logic
const int startButtonPin = 3; // pin number of the start button
const int relayPins[] = {30, 31, 32, 33, 34, 35, 36, 30, 36}; // pin numbers of the relays
const int debounceDelay = 50; // debounce delay in milliseconds
const int relayDelay[] = {1000, 110, 120, 130, 140, 2000, 2000, 2000, 2000}; // delay in milliseconds for each relay
int startButtonState = 0; // current state of the start button
bool startButtonFlag = false; // debouncing flag for the start button
unsigned long timer = 0; // timer variable to keep track of elapsed time
void setup() {
Serial.begin(9600);
// set the pin modes for the start button and relays
pinMode(startButtonPin, INPUT_PULLUP);
for (int i = 0; i < 9; i++) {
pinMode(relayPins[i], OUTPUT);
// turn off all Relais from start
digitalWrite(relayPins[i], HIGH);
}
}
void loop() {
// read the start button state
int buttonState = digitalRead(startButtonPin);
// debounce the start button
if (buttonState != startButtonState) {
startButtonFlag = true;
startButtonState = buttonState;
timer = millis();
}
if (startButtonFlag && buttonState == LOW) {
// start button has been pressed and debouncing is complete
startButtonFlag = false;
// turn on the relays in sequence
for (int i = 0; i < 9; i++) {
// turn on the current relay
digitalWrite(relayPins[i], LOW);
// wait for the specified delay time
timer = millis();
while (millis() - timer < relayDelay[i]) {
// do nothing
}
// turn off the current relay and wait for the break time
digitalWrite(relayPins[i], HIGH);
timer = millis();
while (millis() - timer < 500) {
// do nothing
}
}
}
Serial.println("Block test");
}