Hallo
Ich habe auch noch eine Lösung für die Ansteuerung der Pumpen. Meine Lösung verwendet ein paar Elemente zum Lernen aus der OOP, wenn du schon dabei bist.
Nicht vergessen, wie im Sketch angegeben, die I/O Pins und die Förderzeit für die Getränke anpassen.
Eine Frage; Wofür sind die anderen Tasten?
//BLOCK COMMENT
// https://forum.arduino.cc/t/please-help-new-guy/900229
#define ProjectName "Code für ansteuerung von Pumpen funktioniert nicht"
// CONSTANT DEFINITION
// you may need to change these constants to your hardware
constexpr byte Input_[] {A0};
constexpr byte Output_[] {2, 3};
constexpr unsigned long AsbachTimer {2000};
constexpr unsigned long ColaTimer {2000};
// VARIABLE DECLARATION
enum {Gruen};
enum {Asbach, Cola};
struct Taster {
byte pin;
} taster {Input_[Gruen]};
struct Relay_ {
byte pin;
} relay_[] {
{Output_[Asbach]},
{Output_[Cola]},
};
struct TIMER {
unsigned long stamp;
unsigned long duration;
};
TIMER asbach {0, AsbachTimer};
TIMER cola {0, ColaTimer};
// FUNCTIONS
void setup() {
Serial.begin(9600);
Serial.println(F("."));
Serial.print(F("File : ")), Serial.println(__FILE__);
Serial.print(F("Date : ")), Serial.println(__DATE__);
Serial.print(F("Project: ")), Serial.println(ProjectName);
pinMode (LED_BUILTIN, OUTPUT);
for (auto Input : Input_) pinMode(Input, INPUT_PULLUP);
for (auto Output : Output_) pinMode(Output, OUTPUT);
}
void loop () {
unsigned long currentTime = millis();
digitalWrite(LED_BUILTIN, (currentTime / 500) % 2);
bool colaState = digitalRead(relay_[Cola].pin);
bool asbachState = digitalRead(relay_[Asbach].pin);
if (!colaState && !asbachState && !digitalRead(taster.pin)) {
cola.stamp = currentTime;
digitalWrite(relay_[Cola].pin, HIGH);
asbach.stamp = currentTime;
digitalWrite(relay_[Asbach].pin, HIGH);
}
if (currentTime - cola.stamp >= cola.duration && colaState) digitalWrite(relay_[Cola].pin, LOW);
if (currentTime - asbach.stamp >= asbach.duration && asbachState) digitalWrite(relay_[Asbach].pin, LOW);
}
Viel Spass beim Lernen und Programmieren.