void wird aus switch case nicht abgearbeitet

Hallo, ich bin noch ziemlich neu in Sachen Arduino und der Sprache C. Vorher hatt ich nur kleinere Projekte in der Siemens SPS Sprache programmiert.

Nun wollte ich einen Kollegen dabei unterstützen, seine kleine Aquarium Steuerung zu programmieren. Dazu habe ich sein Programm etwas umstrukturiert, angelehnt an einen EA, bzw. FSM.

Nachdem mein Erstentwurf einer Grundversion fertig war, kam die Rückmeldung von meinem Kollegen, dass die Ausgänge nicht angesteuert werden. Ich habe das Programm jetzt so erweitert, dass ich es über den Serial Monitor steuern und ansehen kann. Dort wird mir tatsächlich angezeigt, dass das Programm zwar die case entsprechend meiner Eingabe durchläuft, was mir durch die Anzeige über void Zeige angezeigt wird, aber es werden nicht die Serial.println Ausgaben der einzelnen Ausgangs void angezeigt. Ich muss also davon ausgehen, dass aus den case zwar in den void Zeige, aber nicht in die void Leeren, Fuellen, keine_Aktion gesprungen wird.

Das kapier ich nicht. Hier der Code:

/* Variablendeklaration und Grundeinstellungen */
// Software //
int buttonStateSWH=   0;
int buttonStateSWL=   0;
//int buttonStateNOT=   0;
//int buttonStateWWM=   0;
//int seVa=             0;
//int VAWA=             0;
//int VFWA=             0;

int sTemp=            0;  // Schalter "Temperatur hoch"

char Sensor;              // Textvariable für die Sensorensimulation
// EINGABE ÜBER DEN SERIAL MONITOR
// t = Temperatursensor
// l = Sensor für Niedrigwasserstand
// h = Sensor für Hochwasserstand

int Phase;                // Zustandsvariable
// Phase 1 = keine_Aktion
// Phase 2 = Leeren
// Phase 3 = Füllen

// Hardware //
int SWH=A0;    // Sensor Wasserstand High
int SWL=A1;    // Sensor Wasserstand Low 
//int NOT=A2;    // Notsensor gegen Wasserüberlauf 
int STP=A3;    // Sensor Wassertemperatur
//int SWG=A4;    // Sensor Wassergüte
//int WWM=A5;    // Sensor Wasserwechsel manuell
int VAW=8;     // Ventil Abwasser
int VFW=9;     // Ventil Frischwasser
//int FWN=10;    // Ventil Notwasserabschaltung

void setup(){
  pinMode(SWH, INPUT);
  pinMode(SWL, INPUT);
  //pinMode(NOT, INPUT);
  pinMode(STP, INPUT);
  //pinMode(SWG, INPUT);
  //pinMode(WWM, INPUT);
  pinMode(VAW, OUTPUT);
  pinMode(VFW, OUTPUT);
  //pinMode(FWN, OUTPUT);

  Serial.begin(115200);
}

void loop(){
  /* Eingänge verarbeiten */
//  TempKontrolle();
  WasserRein();
  WasserStop();
  Tastatur();      // für die Simulation

  /* Logikverarbeitung */
  switch(Phase){
  case 1:
    keine_Aktion;
    // Anzeige im Serial Monitor    
    Zeige("keine_Aktion");
    // entweder realer Temperatursensor oder Simulationseingang    
    if(sTemp||Sensor=='t'){
      Phase=2;
    }
    break;
  case 2:
    Leeren;
    // Anzeige im Serial Monitor    
    Zeige("Leeren");
    // entweder realer Niedrigstandsensor oder Simulationseingang    
    if(buttonStateSWL||Sensor=='l'){
      Phase=3;
    }
    break;
  case 3:
    Fuellen;
    // Anzeige im Serial Monitor    
    Zeige("Fuellen");
    // entweder realer Hochstandsensor oder Simulationseingang    
    if(buttonStateSWH||Sensor=='h'){
      Phase=1;
    }
    break;
  default:
    Phase=1;
    break;
  }
}

/* Eingänge abfragen */
// void TempKontrolle(){      // stört bei Simulation
//  int reading=analogRead(STP);
//  float voltage=reading*5.0;
//  voltage/=1024.0;
//  float temperatureC=(voltage-0.5)*100;
//  if(temperatureC>=26){
//    sTemp=HIGH;
//  }
// }
void WasserRein(){
  buttonStateSWL=digitalRead(SWL);
}
void WasserStop(){
  buttonStateSWH=digitalRead(SWH);
}
// Simulationseingänge
void Tastatur(){
  if(Serial.available()){
    Sensor=Serial.read();
  }
}

/* Ausgänge setzen */
void Leeren(){
  digitalWrite(VAW,HIGH);
// Test, ob void abgearbeitet wird
  Serial.println("VAW HIGH");
}
void Fuellen(){
  digitalWrite(VAW,LOW);
  digitalWrite(VFW,HIGH);
// Test, ob void abgearbeitet wird
  Serial.println("VAW LOW");
  Serial.println("VFW HIGH");
}
void keine_Aktion(){
  digitalWrite(VFW,LOW);
// Test, ob void abgearbeitet wird
  Serial.println("VAF LOW");
}
// Anzeige im Serial Monitor    
void Zeige(char*Text){
  Serial.print(Sensor);
  Serial.print("\t");  // prints a tab
  Serial.println(Text);
}

Funktionen werden mit () aufgerufen.

Leeren();

Da solltest du dir vielleicht noch was zu Funktionen durchlesen

"eine void" gibt es nicht. Die Dinger heißen Funktionen. void ist der Rückgabewert - in diesem Fall nichts

Das hier macht nichts:

Leeren;

Der Name einer Funktion ist deren Adresse. Deshalb kompiliert das. Aber aufgerufen wird eine Funktion so:

Leeren();

Ojeh, war das einfach. Vielen Dank.