#include <AccelStepper.h>
//#include <Controllino.h>
// Schrittmotor Setup
AccelStepper stepper(AccelStepper::FULL4WIRE, 3, 5, 6, 9);
// Gleichstrommotor, Magnetschalter und Magnetventile Pins
#define DC_MOTOR_PIN 10
#define MAGNETIC_SWITCH_PIN 11
#define VALVE1_PIN 12
#define VALVE2_PIN 13
// Taster für Startsignal
#define START_BUTTON_PIN 2
#define STOP_BUTTON_PIN 7
// Prozesszeiten in Millisekunden (Platzhalter, wird im Setup festgelegt)
unsigned long stepperRunTime = 1000;
unsigned long dcMotorRunTime = 10000;
unsigned long magneticSwitchTime = 1000;
unsigned long valve1Time = 1000;
unsigned long valve2Time = 1000;
// Statusvariablen
volatile bool isRunning = false;
volatile bool appbool = false;
volatile bool cleanbool = false;
volatile bool stopDCMotor = false;
bool useStepper = true;
bool useDCMotor = true;
bool useMagneticSwitch = true;
bool useValve1 = true;
bool useValve2 = true;
// Interrupt Service Routine (ISR)
void startButtonPressed() {
isRunning = true;
detachInterrupt(digitalPinToInterrupt(START_BUTTON_PIN));
Serial.println("Start button pressed. Starting sequence...");
}
// Interrupt Service Routine (ISR) für den Stopknopf
void stopButtonPressed() {
stopDCMotor = true;
Serial.println("Stop button pressed. Stopping DC motor...");
}
void setup() {
Serial.begin(9600); // Start der seriellen Kommunikation
Serial.println("Program started. Waiting for start button press...");
// Setup der Pins
pinMode(DC_MOTOR_PIN, OUTPUT);
pinMode(MAGNETIC_SWITCH_PIN, OUTPUT);
pinMode(VALVE1_PIN, OUTPUT);
pinMode(VALVE2_PIN, OUTPUT);
pinMode(START_BUTTON_PIN, INPUT_PULLUP);
pinMode(STOP_BUTTON_PIN, INPUT_PULLUP);
// Initialisierung des Schrittmotors
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
// Interrupt für den Startknopf
attachInterrupt(digitalPinToInterrupt(START_BUTTON_PIN), startButtonPressed, FALLING);
attachInterrupt(digitalPinToInterrupt(STOP_BUTTON_PIN), stopButtonPressed, FALLING);
}
void loop() {
if (isRunning) {
// Debug-Nachricht
Serial.println("Sequence started...");
// Beispielvariablen für Schrittmotorbewegung
long stepperPosition = 200;
bool direction = true; // true für vorwärts, false für rückwärts
int pwmValue = 128; // Mittelwert für PWM (0-255)
// Komponentenfunktionen aufrufen
useStepper = runStepper(stepperPosition, direction);
useDCMotor = runDCMotor(dcMotorRunTime, pwmValue);
useMagneticSwitch = runMagneticSwitch(magneticSwitchTime);
useValve1 = runValve1(valve1Time);
useValve2 = runValve2(valve2Time);
// Reset der Statusvariablen
isRunning = false;
// Debug-Nachricht
Serial.println("Sequence completed.");
// Interrupt wieder aktivieren
attachInterrupt(digitalPinToInterrupt(START_BUTTON_PIN), startButtonPressed, FALLING);
Serial.println("Waiting for start button press...");
}
}
/*
void logwet(bool appbool) {
if (appbool) {
clean
app
clean
} else {
dump
}
}
*/
// Funktion zur Steuerung des Schrittmotors
bool runStepper(long position, bool direction) {
if (useStepper) {
Serial.println("Running stepper motor...");
if (direction) {
stepper.moveTo(position);
} else {
stepper.moveTo(-position);
}
while (stepper.distanceToGo() != 0) {
stepper.run();
}
// Debug-Nachricht
Serial.println("Stepper motor sequence completed.");
return false; // Nach Ausführung deaktivieren
}
return useStepper;
}
// Funktion zur Steuerung des Gleichstrommotors
bool runDCMotor(unsigned long duration, int pwmValue) {
if (useDCMotor) {
Serial.println("Running DC motor...");
unsigned long startTime = millis();
analogWrite(DC_MOTOR_PIN, pwmValue);
while (millis() - startTime < duration) {
if (stopDCMotor) {
break; // Schleife verlassen, wenn der Stopknopf gedrückt wurde
}
}
analogWrite(DC_MOTOR_PIN, 0);
// Debug-Nachricht
Serial.println("DC motor sequence completed.");
return false; // Nach Ausführung deaktivieren
}
appbool = true;
return useDCMotor;
}
// Funktion zur Steuerung des Magnetschalters
bool runMagneticSwitch(unsigned long duration) {
if (useMagneticSwitch) {
Serial.println("Activating magnetic switch...");
digitalWrite(MAGNETIC_SWITCH_PIN, HIGH);
delay(duration);
digitalWrite(MAGNETIC_SWITCH_PIN, LOW);
// Debug-Nachricht
Serial.println("Magnetic switch sequence completed.");
return false; // Nach Ausführung deaktivieren
}
return useMagneticSwitch;
}
// Funktion zur Steuerung des Magnetventils 1
bool runValve1(unsigned long duration) {
if (useValve1) {
Serial.println("Activating valve 1...");
digitalWrite(VALVE1_PIN, HIGH);
delay(duration);
digitalWrite(VALVE1_PIN, LOW);
// Debug-Nachricht
Serial.println("Valve 1 sequence completed.");
return false; // Nach Ausführung deaktivieren
}
return useValve1;
}
// Funktion zur Steuerung des Magnetventils 2
bool runValve2(unsigned long duration) {
if (useValve2) {
Serial.println("Activating valve 2...");
digitalWrite(VALVE2_PIN, HIGH);
delay(duration);
digitalWrite(VALVE2_PIN, LOW);
// Debug-Nachricht
Serial.println("Valve 2 sequence completed.");
return false; // Nach Ausführung deaktivieren
}
return useValve2;
}