Hallo allerseits,
aufgrund diverser anderer Prioritäten hat das Projekt erstmal hinten anstehen müssen, jetzt habe ich es aber fertiggebracht und der nachfolgende Code funktioniert so wie gewünscht.
Danke an alle die sich mit Vorschlägen hier im Thread beteiligt haben!
Auch wenn ich davon, wie ihr unten seht, wenig bis gar nichts übernommen habe weil die Beispiele für einen absoluten C-Beginner wie mich schon schwierig zu durchschauen waren, waren sie doch sehr hilfreich für mich um konzeptionell auf den richtigen Weg zu kommen.
Euch stehen wahrscheinlich die Haare zu Berge was den Programmierstil und die Eleganz des u.a. Programms angeht, aber für mich war es in erster Linie wichtig dass ich mal meinen ersten Sketch funktionsfähig hinbekomme 
Falls sich aber jemand mal den Code anschauen und mir Vorschläge für Verbesserungen jedweder Art machen möchte bin ich sehr dankbar für Tips, da ich gerne lernen möchte wie man solch einen Sketch optimieren bzw. effizienter gestalten könnte.
Viele Grüße, Georg
//
// Halfmoon Schalter Stellungen auslesen und umwandeln in Impulse für Mini Vent II Taster
//
// Konstanten
const byte slowInputPin = 4; // Pin vom Halfmoon Schalter Slow Stellung
const byte fastInputPin = 5; // Pin vom Halfmoon Schalter Fast Stellung
const byte SlowFastPulsePin = 10; // Pin für MiniVent Impuls Taster Slow/Fast
const byte StartStopPulsePin = 11; // Pin für MiniVent Impuls Taster Stop (Bypass)
const unsigned int MiniVentPulseLength =300; // Konstante für Tasterlänge in ms am MiniVentII
const unsigned long MiniVentStartTime = 500; // Wartezeit in ms bis MiniVent gestartet hat
const unsigned long StopModeDuration = 500; // Dauer Halfmoon auf Stop bevor Stop Signal an MiniVentII gesendet wird
// Variablen
byte SlowInputPinState; // Status Pin für Slow
byte FastInputPinState; // Status Pin für Fast
byte StartupPhase = 1; // Merker für Einschaltphase, relevant für Durchlauf der Initialisierungsprozedur initMiniVent
unsigned int HalfmoonState = 0; // Stellung Halfmoon Switch beim Start Start: 1=Slow, 2=Stop, 3=Fast
unsigned int CurrentMiniVentMode = 0; // Merker für aktuellen MiniVent Modus: 1=Slow, 2=Stop, 3=Fast
unsigned long StopTimerStart;
unsigned long StopTimerEnd;
//Funktions Prototypen
unsigned int initMiniVent();
void setup()
{
Serial.begin(115200);
Serial.println("Start");
// Initialisierung digitale Pins
pinMode(slowInputPin, INPUT_PULLUP);
pinMode(fastInputPin, INPUT_PULLUP);
pinMode(SlowFastPulsePin, OUTPUT);
pinMode(StartStopPulsePin, OUTPUT);
}
void loop()
{
// ---------------------------------------------------
// Durchlauf einmalige Initialisierungsroutine zum Abgleich von Halfmoon Stellung und MiniVent Effektstatus nach Einschalten
// ---------------------------------------------------
if (StartupPhase == 1)
{
Serial.println("Initialisierung");
HalfmoonState = initMiniVent(); // Setze Halfmoon Status Merker auf Stellung beim Einschalten
CurrentMiniVentMode = HalfmoonState; // Setze MinitVent Modus Merker auf Effektstatus nach Abgleich mit Halfmoon Switch
StartupPhase = 0; // Startup zu Ende
}
// --------------------------------------------------
// Scan des Halfmoon Switches auf Veränderungen
// --------------------------------------------------
{
SlowInputPinState = digitalRead(slowInputPin);
FastInputPinState = digitalRead(fastInputPin);
//
if((SlowInputPinState == LOW) && (FastInputPinState == HIGH)) // Halfmoon Switch auf Slow
{
HalfmoonState = 1;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == HIGH)) // Halfmoon Switch auf Stop
{
HalfmoonState= 2;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == LOW)) // Halfmoon Switch beim Start auf Fast
{
HalfmoonState = 3;
}
// ********************************************************
// MiniVentII steht auf Slow und Schalter nicht auf Slow
// ********************************************************
if ((CurrentMiniVentMode == 1) && (HalfmoonState != 1))
{
if(HalfmoonState == 2) // Halfmoon Switch hat auf Stop gewechselt
{
delay(StopModeDuration); // Nochmalige Abfrage ob Schalter auf Stop verbleibt
SlowInputPinState = digitalRead(slowInputPin);
FastInputPinState = digitalRead(fastInputPin);
if((SlowInputPinState == LOW) && (FastInputPinState == HIGH)) // Halfmoon Switch auf Slow
{
HalfmoonState = 1;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == HIGH)) // Halfmoon Switch auf Stop
{
HalfmoonState = 2;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == LOW)) // Halfmoon Switch beim Start auf Fast
{
HalfmoonState = 3;
}
if(HalfmoonState == 2) // Halfmoon Switch verbleibt auf Stop
{
digitalWrite(StartStopPulsePin, HIGH); // Einmaliger Impuls für Taster Stop/Bypass um MiniVent auf Stop zu setzen
delay(MiniVentPulseLength);
digitalWrite(StartStopPulsePin, LOW);
delay(MiniVentPulseLength);
CurrentMiniVentMode = 2;
}
}
//
if(HalfmoonState == 3) // Halfmoon Switch hat über Stop auf Fast gewechselt
{
digitalWrite(SlowFastPulsePin, HIGH); // Erster Impuls für Taster Slow/Fast um auf Slow zu wechseln
delay(MiniVentPulseLength);
digitalWrite(SlowFastPulsePin, LOW);
delay(MiniVentPulseLength);
CurrentMiniVentMode = 3;
}
}
// ********************************************************
// MiniVentII steht auf Stop und Schalter nicht auf Stop
// ********************************************************
if ((CurrentMiniVentMode == 2) && (HalfmoonState != 2))
{
if(HalfmoonState == 1) // Halfmoon Switch hat auf Slow gewechselt
{
digitalWrite(SlowFastPulsePin, HIGH); // Einmaliger Impuls für Taster Slow/Fast um auf Slow zu wechseln
delay(MiniVentPulseLength);
digitalWrite(SlowFastPulsePin, LOW);
delay(MiniVentPulseLength);
CurrentMiniVentMode = 1;
}
if(HalfmoonState == 3) // Halfmoon Switch hat auf Fast gewechselt
{
digitalWrite(SlowFastPulsePin, HIGH); // Erster Impuls für Taster Slow/Fast um auf Slow zu wechseln
delay(MiniVentPulseLength);
digitalWrite(SlowFastPulsePin, LOW);
delay(MiniVentPulseLength);
digitalWrite(SlowFastPulsePin, HIGH); // Zweiter Impuls für Taster Slow/Fast um auf Fast zu wechseln
delay(MiniVentPulseLength);
digitalWrite(SlowFastPulsePin, LOW);
delay(MiniVentPulseLength);
CurrentMiniVentMode = 3;
}
}
}
// ********************************************************
// MiniVentII steht auf Fast und Schalter nicht auf Fast
// ********************************************************
if ((CurrentMiniVentMode == 3) && (HalfmoonState != 3))
{
if(HalfmoonState == 1) // Halfmoon Switch hat auf Slow gewechselt
{
digitalWrite(SlowFastPulsePin, HIGH); // Einmaliger Impuls für Taster Slow/Fast um auf Slow zu wechseln
delay(MiniVentPulseLength);
digitalWrite(SlowFastPulsePin, LOW);
delay(MiniVentPulseLength);
CurrentMiniVentMode = 1;
}
if(HalfmoonState == 2) // Halfmoon Switch hat auf Stop gewechselt
{
delay(StopModeDuration); // Nochmalige Abfrage ob Schalter auf Stop verbleibt
SlowInputPinState = digitalRead(slowInputPin);
FastInputPinState = digitalRead(fastInputPin);
if((SlowInputPinState == LOW) && (FastInputPinState == HIGH)) // Halfmoon Switch auf Slow
{
HalfmoonState = 1;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == HIGH)) // Halfmoon Switch auf Stop
{
HalfmoonState = 2;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == LOW)) // Halfmoon Switch beim Start auf Fast
{
HalfmoonState = 3;
}
if(HalfmoonState == 2) // Halfmoon Switch verbleibt auf Stop
{
digitalWrite(StartStopPulsePin, HIGH); // Einmaliger Impuls für Taster Stop/Bypass um MiniVent auf Stop zu setzen
delay(MiniVentPulseLength);
digitalWrite(StartStopPulsePin, LOW);
delay(MiniVentPulseLength);
CurrentMiniVentMode = 2;
}
}
}
// ********************************************************************
// ********************************************************************
//
}
// Funktion zur Initialisierung des MiniVent abhängig vom Stand des Halfmoon Switches beim Start
unsigned int initMiniVent()
{
delay(MiniVentStartTime); // warten bis MiniVent hochgefahren ist - MiniVent ist nach Start immer im Modus Slow
SlowInputPinState = digitalRead(slowInputPin);
FastInputPinState = digitalRead(fastInputPin);
if((SlowInputPinState == LOW) && (FastInputPinState == HIGH)) // Halfmoon Switch beim Start auf Slow
{
return 1;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == HIGH)) // Halfmoon Switch beim Start auf Stop
{
digitalWrite(StartStopPulsePin, HIGH); // Einmaliger Impuls für Taster Stop/Bypass um auf Stop zu wechseln
delay(MiniVentPulseLength);
digitalWrite(StartStopPulsePin, LOW);
return 2;
}
if((SlowInputPinState == HIGH) && (FastInputPinState == LOW)) // Halfmoon Switch beim Start auf Fast
{
digitalWrite(SlowFastPulsePin, HIGH); // Einmaliger Impuls für Taster Slow/Fast um auf Fast zu wechseln
delay(MiniVentPulseLength);
digitalWrite(SlowFastPulsePin, LOW);
return 3;
}
}