ich habe mir deine Relais nicht wirklich genau angesehen, aber ich würde es in einer State machine machen.
Was du in den einzelnen Status machst, kannst ja selber bestimmten.
so in der Art:
const byte Taster = A0;
const byte Endschalter = 2;
const byte Taster1 = A1;
const byte Endschalter1 = 3;
const byte Relais = 13;
const byte Relais1 = 12;
bool btnstate, lastbtnstate = true;
int count = 0;
uint32_t debounceTaster = 0;
bool schaltzustand, letzterschaltzustand;
int zaehler = 0;
enum State {LEFT, // Endposition Links
RIGHT, // Endposition Rechts
LEFT_GO, // Bewegung nach Links
RIGHT_GO, // Bewegung nach Rechts
LEFT_HALT, // Nothalt während Bewegung nach Links
RIGHT_HALT // Nothalt während Bewegung nach Rechts
};
State state;
bool tasterWasPressed()
{
btnstate = !digitalRead(Taster); //Taster lesen
bool result = false;
if (btnstate != lastbtnstate)
{
delay(50);
}
if (btnstate == true && btnstate != lastbtnstate)
{
Serial.println(F("pressed"));
result = true;
}
lastbtnstate = btnstate;
return result;
}
void stop()
{
digitalWrite(Relais, LOW);
digitalWrite(Relais1, LOW);
}
void goRight()
{
digitalWrite(Relais, HIGH);
digitalWrite(Relais1, LOW);
}
void goLeft()
{
digitalWrite(Relais, LOW);
digitalWrite(Relais1, HIGH);
}
void setup() {
Serial.begin(115200);
pinMode(Taster, INPUT_PULLUP);
pinMode(Endschalter, INPUT_PULLUP);
pinMode(Taster1, INPUT_PULLUP);
pinMode(Endschalter1, INPUT_PULLUP);
pinMode(Relais, OUTPUT);
pinMode(Relais1, OUTPUT);
}
void loop()
{
switch (state)
{
case LEFT:
if (tasterWasPressed())
{
Serial.println(F("start RIGHT_GO"));
state = RIGHT_GO;
goRight();
}
break;
case LEFT_GO:
if (digitalRead(Endschalter1) == LOW)
{
Serial.println(F("End LEFT"));
state = LEFT;
stop();
}
if (tasterWasPressed())
{
Serial.println(F("LEFT halted"));
state = LEFT_HALT;
stop();
}
break;
case LEFT_HALT:
if (tasterWasPressed())
{
Serial.println(F("restart LEFT"));
state = LEFT_GO;
goLeft();
}
break;
case RIGHT:
if (tasterWasPressed())
{
Serial.println(F("start LEFT"));
state = LEFT_GO;
goLeft();
}
break;
case RIGHT_GO:
if (digitalRead(Endschalter) == LOW)
{
Serial.println(F("End RIGHT"));
state = RIGHT;
stop();
}
if (tasterWasPressed())
{
Serial.println(F("RIGHT halted"));
state = RIGHT_HALT;
stop();
}
break;
case RIGHT_HALT:
if (tasterWasPressed())
{
Serial.println(F("restart RIGHT"));
state = RIGHT_GO;
goRight();
}
break;
}
}
im prinzip könntest bei einem "Nothalt" auch in die andere Richtung fahren, je nach dem was benötigt wird...