Letzte switch case bedingung wird nie ausgeführt

Hallo miteinander

Mein Programm steuert eigentlich nur ein Schrittmotor, 2 servos, 1 vibrationsmodul und daran ist noch ein endschalter und ein infrarot sensor(TCRT5000) angeschlossen. Für die steuerung 2 kleine Taster und als status anzeige eine RGB LED( Neopixel WS2812B).
ist für ein Zigihülsen automat, ich habe die Powermatic 3+ Stopfmaschine. Mein Programm steckt die Hülsen auf die powermatic, funktioniert auch alles soweit ohne probleme.

Ich habe mein programm nach diesem Beispiel programmiert (Multithreading in C und Arduino)

In meinem Programm wird die letzte case bedingung nie ausgeführt, ich sehe einfach nicht warum. Entweder ich sehe den Wald vor lauter Bäumen nicht oder wat anderes :crazy_face:
Der Wert von zustand stimmt mit der letzten Bedingung überein, in dem fall 7

Hier Mein loop()
am Schluss die auskommentierte if bedingung überprüft das selbe, da funktioniert es.
Wie gesagt, funktioniert sonst alles.

void loop() {
  static enum  ezustand {AUS, EIN, AUSRICHTEN, VIBRIEREN, STEPPER, LADEN, STOPFEN, FEHLER} zustand = AUS;
  static bool OneCycle = false;
  uint8_t tmpTasterPressed = 0;

  //tvibrieren();

  switch(zustand)
  { 
  case AUS:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            zustand = AUSRICHTEN;
        }else if(tmpTasterPressed == pinTasterStart)
        {
            zustand = EIN;
        }else{
            setNeoPixel(ROT);
        }
        
        break;
  case EIN:
        if(checkTaster() == pinTasterStop)
        {
            if(OneCycle)
            {
                zustand = FEHLER; 
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else{
            OneCycle = false;
            setNeoPixel(GRUEN);
        }

        if(zustand != FEHLER) zustand = VIBRIEREN;
        break;
  case AUSRICHTEN:
        if(checkTaster(false) == pinTasterStop)
        {
            BlinkLED(250, BLAU);  //Ausrichten
            runStepper(true); 
        }else{
          zustand = AUS;
        }
        break;
  case VIBRIEREN:
        vibrierenEin(4000);
        zustand = STEPPER;
        break;
  case STEPPER:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            if(OneCycle) 
            {
                zustand = FEHLER;
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else if(tmpTasterPressed == pinTasterStart)
        {
            OneCycle = false;
            setNeoPixel(GRUEN);
        }
        
        if(zustand != FEHLER)
        {
            if(runStepper(false))  zustand = LADEN;     //Schrittmotor 45Grad drehen
        }
        break;
  case LADEN:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            if(OneCycle) 
            {
                zustand = FEHLER;
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else if(tmpTasterPressed == pinTasterStart)
        {
            OneCycle = false;
            setNeoPixel(GRUEN);
        }

        if(zustand != FEHLER)
        {
          if(runServo(2, 154, servoLaden))    //Zigihülse reinstecken
          {
              if(checkIR())   //Prüfen ob die Hülse richtig drauf ist
              {
                  zustand = STOPFEN;
              }else{
                  zustand = FEHLER;
              }
          }
        }
        break;
  case STOPFEN:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            if(OneCycle) 
            {
                zustand = FEHLER;
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else if(tmpTasterPressed == pinTasterStart)
        {
            OneCycle = false;
            setNeoPixel(GRUEN);
        }
        //rückgabe wert wird in eine var. geschrieben damit die funktion nur einmal pro durchlauf ausgeführt wird
        uint8_t returnStopfMaschine = StopfMaschine(); 
        if(zustand != FEHLER)
        {
            if(returnStopfMaschine == 0)
            { 
                zustand = FEHLER;
            }else if(returnStopfMaschine == 2)
            {
                if(OneCycle)
                {
                    zustand = AUS;
                }else{
                    zustand = STEPPER;
                }
            }
        }
        break;
  case FEHLER:
      Serial.println("Fehler");
      BlinkLED(250, ROT);
      if(checkTaster() == pinTasterStop) zustand = AUS;
      break;
  }
  
  /*if(zustand == FEHLER) 
  Serial.println("Fehler");
  {
      BlinkLED(250, ROT);
      if(checkTaster() == pinTasterStop) 
      {zustand = AUS;}
  }*/
  Serial.println(zustand);
}

Das ist das Gleiche, wie vorher.
Wenn es nach dem if nur 1 Anweisung gibt, kann man die {} weg lassen.

Gruß Tommy

Die switch case Bedingung tritt nie ein, also die case FEHLER: bedingung, der code da wird nie ausgeführt. FEHLER steht in dem fall für 7 und zustand hat den wert 7

Was bist denn Du für ein seltsamer Zeitgenosse. Einfach so den Inhalt löschen und damit den logischen Ablauf zerstören.

@finn912 hatte geschrieben:

Gruß Tommy

Warum kommst Du mit so einem unmöglichen Codefragment an?
Da fehlen 99% der wichtigen Informationen!
Du rufst offensichtlich Funktionen auf, die mal mit und mal ohne Parameter gesteuert werden können, Keine Idee, was da an anderer Stelle noch verarbeitet wird oder sonst was.

Ich sag Dir, was Dein Problem ist:
Der zustand Fehler wird im ersten Umlauf im case EIN:gesetzt.
Danach wird von vorn begonnen und Du hast irgendwo fremd den Zustand gelöscht.

Das ist genau die Erklährung, warum das mit einer Bedingungsabfrage am Ende funktioniert.

Hast du noch geschrieben. Und da kann das falsche von mir auch wieder weg.

Nö, kann es nicht. Das zerstört den logischen Ablauf der Beiträge.

Gruß Tommy

ich kann den rest auch noch einfügen, wenn das nötig ist.
Der wird da nur geändert wenn der Stop taster 2 mal gedrückt wurde, im zustand EIN wird das vermutlich nie passieren.
Das programm läuft fehlerfrei, bis auf die letzte switch bedingung.

#include <Adafruit_NeoPixel.h>
#include <Servo.h>

//..............Servo..............
Servo servoLaden;
Servo servoStart;
#define pinServoLaden      9
#define pinServoStart     10
//..............Schrittmotor..............
#define pinStepperDir     11
#define pinStepperStep    12
#define pinStepperEnable  13
//..............Taster..............
#define pinTasterStop      6
#define pinTasterStart     7
//..............NeoPixel LED..............
#define pinNeoPixel        1
enum LEDFARBE {GRUEN, ROT, ORANGE, BLAU, LEDAUS};
Adafruit_NeoPixel pixels(1, pinNeoPixel, NEO_GRB + NEO_KHZ800);
//..............endschalter..............
#define pinEndschalter     2
//..............IR sensor..............
#define pinIRLed           8
#define pinPhotoDiode     A0
//..............vibrator..............
#define pinVibrator        3

uint8_t checkTaster(bool delayEin = true, int delayTime = 500);
//rückgabe wert: 0 = fehler,  1 = noch nicht fertig, 2 = fertig
uint8_t StopfMaschine()
{
  static enum {AUS, EIN, START, STOPFEN, FEHLER} zustand = AUS;

  switch(zustand)
  {
  case AUS:
      if(checkEndschalter())
      {
          zustand = EIN;
      }else{
          zustand = FEHLER;
      }
      break;
  case EIN:
      if(runServo(2, 40, servoStart))     //An der Stopfmaschine start drücken
      {
          zustand = START;
      }
      break;
  case START:
      if(!checkEndschalter())
      {
          zustand = STOPFEN;
      }
      break;
  case STOPFEN:
      if(checkEndschalter())
      {
          zustand = AUS;
          return 2;
      }
      break;
  case FEHLER:
      zustand = AUS;
      return 0;
  }
  return 1;
}
void initialMotorServo(){
  servoStart.attach(pinServoStart);
  servoLaden.attach(pinServoLaden);
  runServo(2, 10, servoLaden);  //sicher stellen damit der servo in der richtigen pos. ist
  runServo(2, 10, servoStart);  //sicher stellen damit der servo in der richtigen pos. ist

  digitalWrite(pinStepperEnable, LOW);
  digitalWrite(pinStepperDir, LOW);  //gegen den Uhrzeigersinn

  delay(10);
}

void setNeoPixel(LEDFARBE val)
{
  static LEDFARBE lastFarbe = LEDAUS;

  if(lastFarbe != val)
  {
      lastFarbe = val;
      switch (val) 
      {
      case GRUEN:
          pixels.setPixelColor(0, pixels.Color(0, 255, 0));
          break;
      case ROT:
          pixels.setPixelColor(0, pixels.Color(255, 0, 0));
          break;
      case ORANGE:
          pixels.setPixelColor(0, pixels.Color(255, 140, 0));
          break;
      case BLAU:
          pixels.setPixelColor(0, pixels.Color(0, 0, 205));
          break;
      case LEDAUS:
          pixels.setPixelColor(0, pixels.Color(0, 0, 0));
          break;
      }
      pixels.show();
  }
}

void BlinkLED(unsigned long interval, LEDFARBE farbe){
  static bool LEDon = false;
  static unsigned long prevMillis = 0;

  if(millis() - prevMillis >= interval)
  {
      prevMillis = millis();
      if(LEDon)
      {
          LEDon = false;
          setNeoPixel(farbe);
      }else{
          LEDon = true;
          setNeoPixel(LEDAUS);
      }
  }
}


bool runStepper(bool ausrichten)
{
  static uint8_t LastStep = 1;

  if(!ausrichten){
      digitalWrite(pinStepperStep, HIGH);
      delayMicroseconds(6000);
      digitalWrite(pinStepperStep, LOW);
      delayMicroseconds(6000);
      if(LastStep >= 100)   //Schrittmotor immer um 45 Grad drehen
      {
          LastStep = 1;
          return true;
      }else{
          LastStep += 1;
          return false;
      }
  }else{
      digitalWrite(pinStepperStep, HIGH);
      delay(30);
      digitalWrite(pinStepperStep, LOW);
      delay(30);
      return true;   
  }
}

bool runServo(uint8_t startWinkel, uint8_t endWinkel, Servo& sObjekt)
{
  static int LastWinkel = -1;
  static bool Reverse = false;

  if(LastWinkel == -1) LastWinkel = startWinkel;

  if(LastWinkel >= endWinkel || Reverse)
  {
      Reverse = true;
      //In ausgangs position zurück drehen
      LastWinkel -= 1;
      sObjekt.write(LastWinkel);
      delay(3);
      if(LastWinkel <= startWinkel)
      {
          LastWinkel = -1;
          Reverse = false;
          return true;
      }else{
          return false;
      }
  }else{
      LastWinkel += 1;
      sObjekt.write(LastWinkel);
      delay(3);
      return false;
  }
}


uint8_t checkTaster(bool delayEIN, int delayTime){
  static unsigned long prevMillis = 0; 
  
  if(millis() - prevMillis >= delayTime || !delayEIN)   
  {
      if(digitalRead(pinTasterStart) == LOW)
      {
          prevMillis = millis();
          return pinTasterStart;
      }else if(digitalRead(pinTasterStop) == LOW)
      {
          prevMillis = millis();
          return pinTasterStop;
      }else{
          return 0;
      }
  }else{
      return 0;
  }
}

bool checkEndschalter(){
  if(digitalRead(pinEndschalter) == LOW){
      return true;
  }else{
      return false;
  }
}

bool checkIR(){
  if(analogRead(pinPhotoDiode) <= 685){
      return true;
  }else{
      return false;
  }
}


unsigned long vibDauer = 0;
void vibrierenEin(int dauer)
{
  vibDauer = dauer + millis();
}

void tvibrieren()
{
  if(millis() <= vibDauer)   
  {
      digitalWrite(pinVibrator, HIGH);
  }else{
      digitalWrite(pinVibrator, LOW);
  }
}

so das ist alles

Setup vergessen :upside_down_face:

void setup() {
  Serial.begin(9600);
  pinMode(pinTasterStart, INPUT_PULLUP);
  pinMode(pinTasterStop, INPUT_PULLUP);

  pinMode(pinStepperDir, OUTPUT);
  pinMode(pinStepperStep, OUTPUT);
  pinMode(pinStepperEnable, OUTPUT);

  pinMode(pinEndschalter, INPUT);
  pinMode(pinIRLed, OUTPUT);
  digitalWrite(pinIRLed, HIGH);
  pinMode(pinVibrator, OUTPUT);

  pixels.begin();
  pixels.setBrightness(20);    //0 bis 255
  pixels.show();

  initialMotorServo();
}

Also ich bekomme Deine Fragmente nicht kompiliert.

/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino: In function 'void loop()':
sketch_dec02d:57:38: error: too few arguments to function 'uint8_t checkTaster(bool, int)'
       tmpTasterPressed = checkTaster();
                                      ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:404:9: note: declared here
 uint8_t checkTaster(bool delayEIN, int delayTime)
         ^~~~~~~~~~~
sketch_dec02d:72:23: error: too few arguments to function 'uint8_t checkTaster(bool, int)'
       if (checkTaster() == pinTasterStop)
                       ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:404:9: note: declared here
 uint8_t checkTaster(bool delayEIN, int delayTime)
         ^~~~~~~~~~~
sketch_dec02d:95:28: error: too few arguments to function 'uint8_t checkTaster(bool, int)'
       if (checkTaster(false) == pinTasterStop)
                            ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:404:9: note: declared here
 uint8_t checkTaster(bool delayEIN, int delayTime)
         ^~~~~~~~~~~
sketch_dec02d:110:38: error: too few arguments to function 'uint8_t checkTaster(bool, int)'
       tmpTasterPressed = checkTaster();
                                      ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:404:9: note: declared here
 uint8_t checkTaster(bool delayEIN, int delayTime)
         ^~~~~~~~~~~
sketch_dec02d:137:38: error: too few arguments to function 'uint8_t checkTaster(bool, int)'
       tmpTasterPressed = checkTaster();
                                      ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:404:9: note: declared here
 uint8_t checkTaster(bool delayEIN, int delayTime)
         ^~~~~~~~~~~
sketch_dec02d:171:38: error: too few arguments to function 'uint8_t checkTaster(bool, int)'
       tmpTasterPressed = checkTaster();
                                      ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:404:9: note: declared here
 uint8_t checkTaster(bool delayEIN, int delayTime)
         ^~~~~~~~~~~
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:210:10: warning: jump to case label [-fpermissive]
     case FEHLER:
          ^~~~~~
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:190:15: note:   crosses initialization of 'uint8_t returnStopfMaschine'
       uint8_t returnStopfMaschine = StopfMaschine();
               ^~~~~~~~~~~~~~~~~~~
sketch_dec02d:213:23: error: too few arguments to function 'uint8_t checkTaster(bool, int)'
       if (checkTaster() == pinTasterStop)
                       ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:404:9: note: declared here
 uint8_t checkTaster(bool delayEIN, int delayTime)
         ^~~~~~~~~~~
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:54:10: warning: enumeration value 'FEHLER' not handled in switch [-Wswitch]
   switch (zustand)
          ^
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino: In function 'uint8_t checkTaster(bool, int)':
/tmp/arduino_modified_sketch_82541/sketch_dec02d.ino:407:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (millis() - prevMillis >= delayTime || !delayEIN)
       ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
Bibliothek Adafruit_NeoPixel-master in Version 1.10.7 im Ordner: /home/user1/arduino-1.8.19/portable/sketchbook/libraries/Adafruit_NeoPixel-master  wird verwendet
Bibliothek Servo in Version 1.1.8 im Ordner: /home/user1/arduino-1.8.19/libraries/Servo  wird verwendet
exit status 1
too few arguments to function 'uint8_t checkTaster(bool, int)'

Der Sketch dazu

#include <Adafruit_NeoPixel.h>
#include <Servo.h>

//..............Servo..............
Servo servoLaden;
Servo servoStart;
#define pinServoLaden      9
#define pinServoStart     10
//..............Schrittmotor..............
#define pinStepperDir     11
#define pinStepperStep    12
#define pinStepperEnable  13
//..............Taster..............
#define pinTasterStop      6
#define pinTasterStart     7
//..............NeoPixel LED..............
#define pinNeoPixel        1
enum LEDFARBE {GRUEN, ROT, ORANGE, BLAU, LEDAUS};
Adafruit_NeoPixel pixels(1, pinNeoPixel, NEO_GRB + NEO_KHZ800);
//..............endschalter..............
#define pinEndschalter     2
//..............IR sensor..............
#define pinIRLed           8
#define pinPhotoDiode     A0
//..............vibrator..............
#define pinVibrator        3


void setup()
{
  Serial.begin(9600);
  pinMode(pinTasterStart, INPUT_PULLUP);
  pinMode(pinTasterStop, INPUT_PULLUP);
  pinMode(pinStepperDir, OUTPUT);
  pinMode(pinStepperStep, OUTPUT);
  pinMode(pinStepperEnable, OUTPUT);
  pinMode(pinEndschalter, INPUT);
  pinMode(pinIRLed, OUTPUT);
  digitalWrite(pinIRLed, HIGH);
  pinMode(pinVibrator, OUTPUT);
  pixels.begin();
  pixels.setBrightness(20);    //0 bis 255
  pixels.show();
  initialMotorServo();
}


void loop()
{
  static enum  ezustand {AUS, EIN, AUSRICHTEN, VIBRIEREN, STEPPER, LADEN, STOPFEN, FEHLER} zustand = AUS;
  static bool OneCycle = false;
  uint8_t tmpTasterPressed = 0;
  //tvibrieren();
  switch (zustand)
  {
    case AUS:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        zustand = AUSRICHTEN;
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        zustand = EIN;
      }
      else
      {
        setNeoPixel(ROT);
      }
      break;
    case EIN:
      if (checkTaster() == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      if (zustand != FEHLER)
      {
        zustand = VIBRIEREN;
      }
      break;
    case AUSRICHTEN:
      if (checkTaster(false) == pinTasterStop)
      {
        BlinkLED(250, BLAU);  //Ausrichten
        runStepper(true);
      }
      else
      {
        zustand = AUS;
      }
      break;
    case VIBRIEREN:
      vibrierenEin(4000);
      zustand = STEPPER;
      break;
    case STEPPER:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      if (zustand != FEHLER)
      {
        if (runStepper(false))
        {
          zustand = LADEN;  //Schrittmotor 45Grad drehen
        }
      }
      break;
    case LADEN:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      if (zustand != FEHLER)
      {
        if (runServo(2, 154, servoLaden))   //Zigihülse reinstecken
        {
          if (checkIR())  //Prüfen ob die Hülse richtig drauf ist
          {
            zustand = STOPFEN;
          }
          else
          {
            zustand = FEHLER;
          }
        }
      }
      break;
    case STOPFEN:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      //rückgabe wert wird in eine var. geschrieben damit die funktion nur einmal pro durchlauf ausgeführt wird
      uint8_t returnStopfMaschine = StopfMaschine();
      if (zustand != FEHLER)
      {
        if (returnStopfMaschine == 0)
        {
          zustand = FEHLER;
        }
        else if (returnStopfMaschine == 2)
        {
          if (OneCycle)
          {
            zustand = AUS;
          }
          else
          {
            zustand = STEPPER;
          }
        }
      }
      break;
    case FEHLER:
      Serial.println("Fehler");
      BlinkLED(250, ROT);
      if (checkTaster() == pinTasterStop)
      {
        zustand = AUS;
      }
      break;
  }
  /*if(zustand == FEHLER)
    Serial.println("Fehler");
    {
      BlinkLED(250, ROT);
      if(checkTaster() == pinTasterStop)
      {zustand = AUS;}
    }*/
  Serial.println(zustand);
}





uint8_t checkTaster(bool delayEin = true, int delayTime = 500);

//rückgabe wert: 0 = fehler,  1 = noch nicht fertig, 2 = fertig
uint8_t StopfMaschine()
{
  static enum {AUS, EIN, START, STOPFEN, FEHLER} zustand = AUS;
  switch (zustand)
  {
    case AUS:
      if (checkEndschalter())
      {
        zustand = EIN;
      }
      else
      {
        zustand = FEHLER;
      }
      break;
    case EIN:
      if (runServo(2, 40, servoStart))    //An der Stopfmaschine start drücken
      {
        zustand = START;
      }
      break;
    case START:
      if (!checkEndschalter())
      {
        zustand = STOPFEN;
      }
      break;
    case STOPFEN:
      if (checkEndschalter())
      {
        zustand = AUS;
        return 2;
      }
      break;
    case FEHLER:
      zustand = AUS;
      return 0;
  }
  return 1;
}


void initialMotorServo()
{
  servoStart.attach(pinServoStart);
  servoLaden.attach(pinServoLaden);
  runServo(2, 10, servoLaden);  //sicher stellen damit der servo in der richtigen pos. ist
  runServo(2, 10, servoStart);  //sicher stellen damit der servo in der richtigen pos. ist
  digitalWrite(pinStepperEnable, LOW);
  digitalWrite(pinStepperDir, LOW);  //gegen den Uhrzeigersinn
  delay(10);
}

void setNeoPixel(LEDFARBE val)
{
  static LEDFARBE lastFarbe = LEDAUS;
  if (lastFarbe != val)
  {
    lastFarbe = val;
    switch (val)
    {
      case GRUEN:
        pixels.setPixelColor(0, pixels.Color(0, 255, 0));
        break;
      case ROT:
        pixels.setPixelColor(0, pixels.Color(255, 0, 0));
        break;
      case ORANGE:
        pixels.setPixelColor(0, pixels.Color(255, 140, 0));
        break;
      case BLAU:
        pixels.setPixelColor(0, pixels.Color(0, 0, 205));
        break;
      case LEDAUS:
        pixels.setPixelColor(0, pixels.Color(0, 0, 0));
        break;
    }
    pixels.show();
  }
}

void BlinkLED(unsigned long interval, LEDFARBE farbe)
{
  static bool LEDon = false;
  static unsigned long prevMillis = 0;
  if (millis() - prevMillis >= interval)
  {
    prevMillis = millis();
    if (LEDon)
    {
      LEDon = false;
      setNeoPixel(farbe);
    }
    else
    {
      LEDon = true;
      setNeoPixel(LEDAUS);
    }
  }
}


bool runStepper(bool ausrichten)
{
  static uint8_t LastStep = 1;
  if (!ausrichten)
  {
    digitalWrite(pinStepperStep, HIGH);
    delayMicroseconds(6000);
    digitalWrite(pinStepperStep, LOW);
    delayMicroseconds(6000);
    if (LastStep >= 100)  //Schrittmotor immer um 45 Grad drehen
    {
      LastStep = 1;
      return true;
    }
    else
    {
      LastStep += 1;
      return false;
    }
  }
  else
  {
    digitalWrite(pinStepperStep, HIGH);
    delay(30);
    digitalWrite(pinStepperStep, LOW);
    delay(30);
    return true;
  }
}

bool runServo(uint8_t startWinkel, uint8_t endWinkel, Servo &sObjekt)
{
  static int LastWinkel = -1;
  static bool Reverse = false;
  if (LastWinkel == -1)
  {
    LastWinkel = startWinkel;
  }
  if (LastWinkel >= endWinkel || Reverse)
  {
    Reverse = true;
    //In ausgangs position zurück drehen
    LastWinkel -= 1;
    sObjekt.write(LastWinkel);
    delay(3);
    if (LastWinkel <= startWinkel)
    {
      LastWinkel = -1;
      Reverse = false;
      return true;
    }
    else
    {
      return false;
    }
  }
  else
  {
    LastWinkel += 1;
    sObjekt.write(LastWinkel);
    delay(3);
    return false;
  }
}


uint8_t checkTaster(bool delayEIN, int delayTime)
{
  static unsigned long prevMillis = 0;
  if (millis() - prevMillis >= delayTime || !delayEIN)
  {
    if (digitalRead(pinTasterStart) == LOW)
    {
      prevMillis = millis();
      return pinTasterStart;
    }
    else if (digitalRead(pinTasterStop) == LOW)
    {
      prevMillis = millis();
      return pinTasterStop;
    }
    else
    {
      return 0;
    }
  }
  else
  {
    return 0;
  }
}

bool checkEndschalter()
{
  if (digitalRead(pinEndschalter) == LOW)
  {
    return true;
  }
  else
  {
    return false;
  }
}

bool checkIR()
{
  if (analogRead(pinPhotoDiode) <= 685)
  {
    return true;
  }
  else
  {
    return false;
  }
}


unsigned long vibDauer = 0;
void vibrierenEin(int dauer)
{
  vibDauer = dauer + millis();
}

void tvibrieren()
{
  if (millis() <= vibDauer)
  {
    digitalWrite(pinVibrator, HIGH);
  }
  else
  {
    digitalWrite(pinVibrator, LOW);
  }
}

Wenn Du das vergleichst und keinen anderen Code bringen kannst, ist das raten auf einem Level, was das ganze Wochenende brauchen wird um erstmal was grundlegendes hinzubekommen...

Im Deklarations teil fehlt bei dir:
uint8_t checkTaster(bool delayEin = true, int delayTime = 500);

ok alles in einmal.

#include <Adafruit_NeoPixel.h>
#include <Servo.h>

//..............Servo..............
Servo servoLaden;
Servo servoStart;
#define pinServoLaden      9
#define pinServoStart     10
//..............Schrittmotor..............
#define pinStepperDir     11
#define pinStepperStep    12
#define pinStepperEnable  13
//..............Taster..............
#define pinTasterStop      6
#define pinTasterStart     7
//..............NeoPixel LED..............
#define pinNeoPixel        1
enum LEDFARBE {GRUEN, ROT, ORANGE, BLAU, LEDAUS};
Adafruit_NeoPixel pixels(1, pinNeoPixel, NEO_GRB + NEO_KHZ800);
//..............endschalter..............
#define pinEndschalter     2
//..............IR sensor..............
#define pinIRLed           8
#define pinPhotoDiode     A0
//..............vibrator..............
#define pinVibrator        3

uint8_t checkTaster(bool delayEin = true, int delayTime = 500);


void setup() {
  Serial.begin(9600);
  pinMode(pinTasterStart, INPUT_PULLUP);
  pinMode(pinTasterStop, INPUT_PULLUP);

  pinMode(pinStepperDir, OUTPUT);
  pinMode(pinStepperStep, OUTPUT);
  pinMode(pinStepperEnable, OUTPUT);

  pinMode(pinEndschalter, INPUT);
  pinMode(pinIRLed, OUTPUT);
  digitalWrite(pinIRLed, HIGH);
  pinMode(pinVibrator, OUTPUT);

  pixels.begin();
  pixels.setBrightness(20);    //0 bis 255
  pixels.show();

  initialMotorServo();
}

void loop() {
  static enum ezustand {AUS, EIN, AUSRICHTEN, VIBRIEREN, STEPPER, LADEN, STOPFEN, FEHLER} zustand = AUS;
  static bool OneCycle = false;
  uint8_t tmpTasterPressed = 0;

  //tvibrieren();

  switch(zustand)
  { 
  case AUS:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            zustand = AUSRICHTEN;
        }else if(tmpTasterPressed == pinTasterStart)
        {
            zustand = EIN;
        }else{
            setNeoPixel(ROT);
        }
        
        break;
  case EIN:
        if(checkTaster() == pinTasterStop)
        {
            if(OneCycle)
            {
                zustand = FEHLER; 
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else{
            OneCycle = false;
            setNeoPixel(GRUEN);
        }

        if(zustand != FEHLER) zustand = VIBRIEREN;
        break;
  case AUSRICHTEN:
        if(checkTaster(false) == pinTasterStop)
        {
            BlinkLED(250, BLAU);  //Ausrichten
            runStepper(true); 
        }else{
          zustand = AUS;
        }
        break;
  case VIBRIEREN:
        vibrierenEin(4000);
        zustand = STEPPER;
        break;
  case STEPPER:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            if(OneCycle) 
            {
                zustand = FEHLER;
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else if(tmpTasterPressed == pinTasterStart)
        {
            OneCycle = false;
            setNeoPixel(GRUEN);
        }
        
        if(zustand != FEHLER)
        {
            if(runStepper(false))  zustand = LADEN;     //Schrittmotor 45Grad drehen
        }
        break;
  case LADEN:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            if(OneCycle) 
            {
                zustand = FEHLER;
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else if(tmpTasterPressed == pinTasterStart)
        {
            OneCycle = false;
            setNeoPixel(GRUEN);
        }

        if(zustand != FEHLER)
        {
          if(runServo(2, 154, servoLaden))    //Zigihülse reinstecken
          {
              if(checkIR())   //Prüfen ob die Hülse richtig drauf ist
              {
                  zustand = STOPFEN;
              }else{
                  zustand = FEHLER;
              }
          }
        }
        break;
  case STOPFEN:
        tmpTasterPressed = checkTaster();
        if(tmpTasterPressed == pinTasterStop)
        {
            if(OneCycle) 
            {
                zustand = FEHLER;
            }else{
                OneCycle = true;
                setNeoPixel(ORANGE);
            }
        }else if(tmpTasterPressed == pinTasterStart)
        {
            OneCycle = false;
            setNeoPixel(GRUEN);
        }
        //rückgabe wert wird in eine var. geschrieben damit die funktion nur einmal pro durchlauf ausgeführt wird
        uint8_t returnStopfMaschine = StopfMaschine(); 
        if(zustand != FEHLER)
        {
            if(returnStopfMaschine == 0)
            { 
                zustand = FEHLER;
            }else if(returnStopfMaschine == 2)
            {
                if(OneCycle)
                {
                    zustand = AUS;
                }else{
                    zustand = STEPPER;
                }
            }
        }
        break;
  case FEHLER:
      Serial.println("Fehler");
      BlinkLED(250, ROT);
      if(checkTaster() == pinTasterStop) zustand = AUS;
      break;
  }
  
  /*if(zustand == FEHLER) 
  Serial.println("Fehler");
  {
      BlinkLED(250, ROT);
      if(checkTaster() == pinTasterStop) 
      {zustand = AUS;}
  }*/
  Serial.println(zustand);
}


//rückgabe wert: 0 = fehler,  1 = noch nicht fertig, 2 = fertig
uint8_t StopfMaschine()
{
  static enum {AUS, EIN, START, STOPFEN, FEHLER} zustand = AUS;

  switch(zustand)
  {
  case AUS:
      if(checkEndschalter())
      {
          zustand = EIN;
      }else{
          zustand = FEHLER;
      }
      break;
  case EIN:
      if(runServo(2, 40, servoStart))     //An der Stopfmaschine start drücken
      {
          zustand = START;
      }
      break;
  case START:
      if(!checkEndschalter())
      {
          zustand = STOPFEN;
      }
      break;
  case STOPFEN:
      if(checkEndschalter())
      {
          zustand = AUS;
          return 2;
      }
      break;
  case FEHLER:
      zustand = AUS;
      return 0;
  }
  return 1;
}

void initialMotorServo(){
  servoStart.attach(pinServoStart);
  servoLaden.attach(pinServoLaden);
  runServo(2, 10, servoLaden);  //sicher stellen damit der servo in der richtigen pos. ist
  runServo(2, 10, servoStart);  //sicher stellen damit der servo in der richtigen pos. ist

  digitalWrite(pinStepperEnable, LOW);
  digitalWrite(pinStepperDir, LOW);  //gegen den Uhrzeigersinn

  delay(10);
}

void setNeoPixel(LEDFARBE val)
{
  static LEDFARBE lastFarbe = LEDAUS;

  if(lastFarbe != val)
  {
      lastFarbe = val;
      switch (val) 
      {
      case GRUEN:
          pixels.setPixelColor(0, pixels.Color(0, 255, 0));
          break;
      case ROT:
          pixels.setPixelColor(0, pixels.Color(255, 0, 0));
          break;
      case ORANGE:
          pixels.setPixelColor(0, pixels.Color(255, 140, 0));
          break;
      case BLAU:
          pixels.setPixelColor(0, pixels.Color(0, 0, 205));
          break;
      case LEDAUS:
          pixels.setPixelColor(0, pixels.Color(0, 0, 0));
          break;
      }
      pixels.show();
  }
}

void BlinkLED(unsigned long interval, LEDFARBE farbe){
  static bool LEDon = false;
  static unsigned long prevMillis = 0;

  if(millis() - prevMillis >= interval)
  {
      prevMillis = millis();
      if(LEDon)
      {
          LEDon = false;
          setNeoPixel(farbe);
      }else{
          LEDon = true;
          setNeoPixel(LEDAUS);
      }
  }
}


bool runStepper(bool ausrichten)
{
  static uint8_t LastStep = 1;

  if(!ausrichten){
      digitalWrite(pinStepperStep, HIGH);
      delayMicroseconds(6000);
      digitalWrite(pinStepperStep, LOW);
      delayMicroseconds(6000);
      if(LastStep >= 100)   //Schrittmotor immer um 45 Grad drehen
      {
          LastStep = 1;
          return true;
      }else{
          LastStep += 1;
          return false;
      }
  }else{
      digitalWrite(pinStepperStep, HIGH);
      delay(30);
      digitalWrite(pinStepperStep, LOW);
      delay(30);
      return true;   
  }
}

bool runServo(uint8_t startWinkel, uint8_t endWinkel, Servo& sObjekt)
{
  static int LastWinkel = -1;
  static bool Reverse = false;

  if(LastWinkel == -1) LastWinkel = startWinkel;

  if(LastWinkel >= endWinkel || Reverse)
  {
      Reverse = true;
      //In ausgangs position zurück drehen
      LastWinkel -= 1;
      sObjekt.write(LastWinkel);
      delay(3);
      if(LastWinkel <= startWinkel)
      {
          LastWinkel = -1;
          Reverse = false;
          return true;
      }else{
          return false;
      }
  }else{
      LastWinkel += 1;
      sObjekt.write(LastWinkel);
      delay(3);
      return false;
  }
}


uint8_t checkTaster(bool delayEIN, int delayTime){
  static unsigned long prevMillis = 0; 
  
  if(millis() - prevMillis >= delayTime || !delayEIN)   
  {
      if(digitalRead(pinTasterStart) == LOW)
      {
          prevMillis = millis();
          return pinTasterStart;
      }else if(digitalRead(pinTasterStop) == LOW)
      {
          prevMillis = millis();
          return pinTasterStop;
      }else{
          return 0;
      }
  }else{
      return 0;
  }
}

bool checkEndschalter(){
  if(digitalRead(pinEndschalter) == LOW){
      return true;
  }else{
      return false;
  }
}

bool checkIR(){
  if(analogRead(pinPhotoDiode) <= 685){
      return true;
  }else{
      return false;
  }
}


unsigned long vibDauer = 0;
void vibrierenEin(int dauer)
{
  vibDauer = dauer + millis();
}

void tvibrieren()
{
  if(millis() <= vibDauer)   
  {
      digitalWrite(pinVibrator, HIGH);
  }else{
      digitalWrite(pinVibrator, LOW);
  }
}
1 Like

Ah, ja.

es wird besser.
Und siehe.... u.a.

/tmp/arduino_modified_sketch_678458/sketch_dec02d.ino:211:10: warning: jump to case label [-fpermissive]
     case FEHLER:
          ^~~~~~

Na mal schaun....

@michael80 nachgeschaut. [edit - User vertauscht]

#include <Adafruit_NeoPixel.h>
#include <Servo.h>

//..............Servo..............
Servo servoLaden;
Servo servoStart;
#define pinServoLaden      9
#define pinServoStart     10
//..............Schrittmotor..............
#define pinStepperDir     11
#define pinStepperStep    12
#define pinStepperEnable  13
//..............Taster..............
#define pinTasterStop      6
#define pinTasterStart     7
//..............NeoPixel LED..............
#define pinNeoPixel        1
enum LEDFARBE {GRUEN, ROT, ORANGE, BLAU, LEDAUS};
Adafruit_NeoPixel pixels(1, pinNeoPixel, NEO_GRB + NEO_KHZ800);
//..............endschalter..............
#define pinEndschalter     2
//..............IR sensor..............
#define pinIRLed           8
#define pinPhotoDiode     A0
//..............vibrator..............
#define pinVibrator        3

uint8_t checkTaster(bool delayEin = true, int delayTime = 500);


void setup()
{
  Serial.begin(9600);
  pinMode(pinTasterStart, INPUT_PULLUP);
  pinMode(pinTasterStop, INPUT_PULLUP);
  pinMode(pinStepperDir, OUTPUT);
  pinMode(pinStepperStep, OUTPUT);
  pinMode(pinStepperEnable, OUTPUT);
  pinMode(pinEndschalter, INPUT);
  pinMode(pinIRLed, OUTPUT);
  digitalWrite(pinIRLed, HIGH);
  pinMode(pinVibrator, OUTPUT);
  pixels.begin();
  pixels.setBrightness(20);    //0 bis 255
  pixels.show();
  initialMotorServo();
}

void loop()
{
  static enum ezustand {AUS, EIN, AUSRICHTEN, VIBRIEREN, STEPPER, LADEN, STOPFEN, FEHLER} zustand = AUS;
  static bool OneCycle = false;
  uint8_t tmpTasterPressed = 0;
  uint8_t returnStopfMaschine = 0;
  //tvibrieren();
  switch (zustand)
  {
    case AUS:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        zustand = AUSRICHTEN;
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        zustand = EIN;
      }
      else
      {
        setNeoPixel(ROT);
      }
      break;
    case EIN:
      if (checkTaster() == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      if (zustand != FEHLER)
      {
        zustand = VIBRIEREN;
      }
      break;
    case AUSRICHTEN:
      if (checkTaster(false) == pinTasterStop)
      {
        BlinkLED(250, BLAU);  //Ausrichten
        runStepper(true);
      }
      else
      {
        zustand = AUS;
      }
      break;
    case VIBRIEREN:
      vibrierenEin(4000);
      zustand = STEPPER;
      break;
    case STEPPER:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      if (zustand != FEHLER)
      {
        if (runStepper(false))
        {
          zustand = LADEN;  //Schrittmotor 45Grad drehen
        }
      }
      break;
    case LADEN:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      if (zustand != FEHLER)
      {
        if (runServo(2, 154, servoLaden))   //Zigihülse reinstecken
        {
          if (checkIR())  //Prüfen ob die Hülse richtig drauf ist
          {
            zustand = STOPFEN;
          }
          else
          {
            zustand = FEHLER;
          }
        }
      }
      break;
    case STOPFEN:
      tmpTasterPressed = checkTaster();
      if (tmpTasterPressed == pinTasterStop)
      {
        if (OneCycle)
        {
          zustand = FEHLER;
        }
        else
        {
          OneCycle = true;
          setNeoPixel(ORANGE);
        }
      }
      else if (tmpTasterPressed == pinTasterStart)
      {
        OneCycle = false;
        setNeoPixel(GRUEN);
      }
      //rückgabe wert wird in eine var. geschrieben damit die funktion nur einmal pro durchlauf ausgeführt wird
      returnStopfMaschine = StopfMaschine();
      if (zustand != FEHLER)
      {
        if (returnStopfMaschine == 0)
        {
          zustand = FEHLER;
        }
        else if (returnStopfMaschine == 2)
        {
          if (OneCycle)
          {
            zustand = AUS;
          }
          else
          {
            zustand = STEPPER;
          }
        }
      }
      break;
    case FEHLER:
      Serial.println("Fehler");
      BlinkLED(250, ROT);
      if (checkTaster() == pinTasterStop)
      {
        zustand = AUS;
      }
      break;
  }
  /*if(zustand == FEHLER)
    Serial.println("Fehler");
    {
      BlinkLED(250, ROT);
      if(checkTaster() == pinTasterStop)
      {zustand = AUS;}
    }*/
  Serial.println(zustand);
}


//rückgabe wert: 0 = fehler,  1 = noch nicht fertig, 2 = fertig
uint8_t StopfMaschine()
{
  static enum {AUS, EIN, START, STOPFEN, FEHLER} zustand = AUS;
  switch (zustand)
  {
    case AUS:
      if (checkEndschalter())
      {
        zustand = EIN;
      }
      else
      {
        zustand = FEHLER;
      }
      break;
    case EIN:
      if (runServo(2, 40, servoStart))    //An der Stopfmaschine start drücken
      {
        zustand = START;
      }
      break;
    case START:
      if (!checkEndschalter())
      {
        zustand = STOPFEN;
      }
      break;
    case STOPFEN:
      if (checkEndschalter())
      {
        zustand = AUS;
        return 2;
      }
      break;
    case FEHLER:
      zustand = AUS;
      return 0;
  }
  return 1;
}

void initialMotorServo()
{
  servoStart.attach(pinServoStart);
  servoLaden.attach(pinServoLaden);
  runServo(2, 10, servoLaden);  //sicher stellen damit der servo in der richtigen pos. ist
  runServo(2, 10, servoStart);  //sicher stellen damit der servo in der richtigen pos. ist
  digitalWrite(pinStepperEnable, LOW);
  digitalWrite(pinStepperDir, LOW);  //gegen den Uhrzeigersinn
  delay(10);
}

void setNeoPixel(LEDFARBE val)
{
  static LEDFARBE lastFarbe = LEDAUS;
  if (lastFarbe != val)
  {
    lastFarbe = val;
    switch (val)
    {
      case GRUEN:
        pixels.setPixelColor(0, pixels.Color(0, 255, 0));
        break;
      case ROT:
        pixels.setPixelColor(0, pixels.Color(255, 0, 0));
        break;
      case ORANGE:
        pixels.setPixelColor(0, pixels.Color(255, 140, 0));
        break;
      case BLAU:
        pixels.setPixelColor(0, pixels.Color(0, 0, 205));
        break;
      case LEDAUS:
        pixels.setPixelColor(0, pixels.Color(0, 0, 0));
        break;
    }
    pixels.show();
  }
}

void BlinkLED(unsigned long interval, LEDFARBE farbe)
{
  static bool LEDon = false;
  static unsigned long prevMillis = 0;
  if (millis() - prevMillis >= interval)
  {
    prevMillis = millis();
    if (LEDon)
    {
      LEDon = false;
      setNeoPixel(farbe);
    }
    else
    {
      LEDon = true;
      setNeoPixel(LEDAUS);
    }
  }
}


bool runStepper(bool ausrichten)
{
  static uint8_t LastStep = 1;
  if (!ausrichten)
  {
    digitalWrite(pinStepperStep, HIGH);
    delayMicroseconds(6000);
    digitalWrite(pinStepperStep, LOW);
    delayMicroseconds(6000);
    if (LastStep >= 100)  //Schrittmotor immer um 45 Grad drehen
    {
      LastStep = 1;
      return true;
    }
    else
    {
      LastStep += 1;
      return false;
    }
  }
  else
  {
    digitalWrite(pinStepperStep, HIGH);
    delay(30);
    digitalWrite(pinStepperStep, LOW);
    delay(30);
    return true;
  }
}

bool runServo(uint8_t startWinkel, uint8_t endWinkel, Servo &sObjekt)
{
  static int LastWinkel = -1;
  static bool Reverse = false;
  if (LastWinkel == -1)
  {
    LastWinkel = startWinkel;
  }
  if (LastWinkel >= endWinkel || Reverse)
  {
    Reverse = true;
    //In ausgangs position zurück drehen
    LastWinkel -= 1;
    sObjekt.write(LastWinkel);
    delay(3);
    if (LastWinkel <= startWinkel)
    {
      LastWinkel = -1;
      Reverse = false;
      return true;
    }
    else
    {
      return false;
    }
  }
  else
  {
    LastWinkel += 1;
    sObjekt.write(LastWinkel);
    delay(3);
    return false;
  }
}


uint8_t checkTaster(bool delayEIN, int delayTime)
{
  static unsigned long prevMillis = 0;
  if (millis() - prevMillis >= uint32_t(delayTime) || !delayEIN)
  {
    if (digitalRead(pinTasterStart) == LOW)
    {
      prevMillis = millis();
      return pinTasterStart;
    }
    else if (digitalRead(pinTasterStop) == LOW)
    {
      prevMillis = millis();
      return pinTasterStop;
    }
    else
    {
      return 0;
    }
  }
  else
  {
    return 0;
  }
}

bool checkEndschalter()
{
  if (digitalRead(pinEndschalter) == LOW)
  {
    return true;
  }
  else
  {
    return false;
  }
}

bool checkIR()
{
  if (analogRead(pinPhotoDiode) <= 685)
  {
    return true;
  }
  else
  {
    return false;
  }
}


unsigned long vibDauer = 0;
void vibrierenEin(int dauer)
{
  vibDauer = dauer + millis();
}

void tvibrieren()
{
  if (millis() <= vibDauer)
  {
    digitalWrite(pinVibrator, HIGH);
  }
  else
  {
    digitalWrite(pinVibrator, LOW);
  }
}

Du hast noch eine Baustelle mit dem

uint8_t checkTaster(bool delayEIN, int delayTime)

Ich hab da ein cast auf uint32_t gemacht, aber das geht besser.

1 Like

Ähm was genau heisst diese warnung?
Bessere Frage ist, warum bekomme ich keine warnung?

Ich danke dir für deine mühe :smiling_face:

Du willst dort hinspringen, das geht aber nicht.
An der Stelle ist der switch/case bereits beendet.
Der case FEHLER liegt ausserhalb.

Was da passiert, kannst Du mit dem Code vergleichen, den ich jetzt sauber compilieren kann.

oh ah :crazy_face:
Boah ich habs einfach nicht gesehen

Dein code scheint zu funktionieren, ich schaue mir das morgen genauer an, mir platzt nämlich bald der kopf von dem zeug :grin:

Aber weisst du warum ich keine warnung bekomme? muss ich da was einschalten?

ich danke dir vielmals :heart_eyes:

DATEI - VOREINSTELLUNGEN - Ausführliche Ausgabe während [x] Kompilierung [x] Hochladen
Compiler-Warnungen: ALLE

Für das formatierte ausgeben - so wie ich den Code oben formatiert habe - gibt es STRG-T. Die Reaktion auf die Tastenkombination kann eingestellt werden.
Nicht alle aktuellen Einstellungen funktioniert auf Anhieb, für uinxöse habe ich eine Anleitung zur Aktuallisierung geschrieben.
Mit der bisherigen Version geht auch einiges mehr als das, was eingestellt ist...
Ich werd nachher mal mal Einstellungsfile noch mit reinwerfen.

1 Like

Ich danke dir :smiling_face:

Hätte ich das eingeschallten gehabt, wäre ich vermutlich schon eher auf den Fehler gekommen, vermutlich :sweat_smile:
Bin etwas eingerostet nach jahren der programmier abstinenz.

Da schau ich morgen rein, ich brauch jetzt eine PC pause.
Dir noch einen schönen Abend :slightly_smiling_face:

Hab das ganze jetzt getestet. Funktioniert jetzt alles wie gewünscht, keine Fehler gefunden, bis jetzt :sweat_smile:
Dank deiner hilfe, nochmal vielen dank :+1::blush:

in 3 min. 20 sek. hat das gebastel 24 zigis gestopft :sunglasses:

Falls jemand auch sowas bauen will, kann sich bei mir melden für die .stl dateien, um die auszudrucken. Braucht natürlich ein 3D Drucker.

1 Like

Auch wenn ich vor vielen Jahren von 60 auf 0 an einem Tag bin, würde ich gerne jemandem zeigen wie's geht :wink:

kannst ja nen paar Bilder machen und beschreiben -> Dann unter Zeigt her eure geilen Projekte! eintragen.

Schön, das es funktioniert :slight_smile: