/*
Forum: https://forum.arduino.cc/t/idee-in-code-umsetzen-ist-schwierig/1409496/16
Wokwi: https://wokwi.com/projects/445363407502953473
Schrittketten-Sketch von my_xy_projekt aus Post #16
*/
/* Ein Reedkontakt wird für einen Bruchteil einer Sec. mit einem Magneten geschlossen.
Danach soll ein Reedrelais anziehen damit der Kontaht im Reedrelais für ca. 1 Sec. geschlossen bleibt.
Danach soll sich der Reedkontakt im Relais wieder öffnen.
Nach weiteren 4 Sec. soll das 2. Reedrelais anziehn und der Kontakt für ca. 1 Sec. geschlossen bleiben.
Danach beginnt alles von Vorne.
Zum Testen wird erst mal eine LED verwendet die später mit einem Reedrelais ausgetauscht werden soll.
*/
constexpr uint8_t RK {10}; // Zuordnung des Reedkontakt auf den Ausgang D10
constexpr uint8_t LedPin1 {6}; // Zuordnung der LED auf Pin 6 / LED gelb / hier soll später das Reedrelais 1 angeschlossen werden.
constexpr uint8_t LedPin2 {8}; // Zuordnung der LED auf Pin 8 / LED grün / hier soll später das Reedrelais 2 angeschlossen werden.
bool ledOneState;
bool ledTwoState;
constexpr bool ausgeloest {LOW};
constexpr uint32_t ONESECOND {1000};
constexpr uint32_t FOURSECOND {4000};
uint32_t startZeit;
uint8_t schritt;
constexpr uint32_t beat {500};
uint32_t lastBeat;
void setup()
{
Serial.begin(9600);
Serial.println(F("Start...."));
pinMode(RK, INPUT_PULLUP); // Das Reedrelais am Pin D10 ist als INPUT generiert
pinMode(LedPin1, OUTPUT);
pinMode(LedPin2, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println(F("Los gehts"));
}
void loop()
{
schrittKette();
debugPrint();
heartBeat(beat);
}
void schrittKette()
{
switch (schritt)
{
case 0:
if (digitalRead(RK) == ausgeloest)
{
digitalWrite(LedPin1, HIGH);
startZeit = millis();
schritt = 1;
}
break;
case 1:
if (millis() - startZeit > ONESECOND)
{
digitalWrite(LedPin1, LOW);
startZeit = millis();
schritt = 2;
}
break;
case 2:
if (millis() - startZeit > FOURSECOND)
{
digitalWrite(LedPin2, HIGH);
startZeit = millis();
schritt = 3;
}
break;
case 3:
if (millis() - startZeit > ONESECOND)
{
digitalWrite(LedPin2, LOW);
startZeit = millis();
schritt = 4;
}
break;
case 4:
if (digitalRead(RK) != ausgeloest)
{
schritt = 0;
}
break;
default:
schritt = 0;
break;
}
}
void heartBeat(const uint32_t intervall) // Baut Dir ein Blinklicht auf dem Board, wenn vorhanden....
{
if (millis() - lastBeat > intervall) // Zeit abgelaufen
{
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // Toggle
lastBeat = millis(); // Neue Zeit merken
}
}
void debugPrint()
{
if (ledOneState != digitalRead(LedPin1)) // Neuer Zustand
{
ledOneState = !ledOneState; // Zustand merken
Serial.print(F("LED-Zustand LED 1: ")); // ausgeben
Serial.println(ledOneState == HIGH ? (F("EIN")) : (F("AUS")));
}
if (ledTwoState != digitalRead(LedPin2)) // :-)
{
ledTwoState = !ledTwoState;
Serial.print(F("LED-Zustand LED 2: "));
Serial.println(ledTwoState == HIGH ? (F("EIN")) : (F("AUS")));
}
}