Moin Jungs, ich schon wieder mit einem Problem.
Ich versuche in meiner Programmierung 4 Zustände zu messen un wenn diese in der richtigen reinfolge aktiviert werden soll eine LED angehen, das funktioniert grundsätzlich auch und ich habe es erfolgreich testen können.
Das Problem ist dann die IF Abfrage am Ende, schalte ich alle vier gemeseenen LEDs in der falschen Reihenfolge ab, geht natürlich oben genannte LED nicht an.. Also soll er einmal den Strom über powerctrl abschalten.
Füge ich die IF Abfrage aber an, schaltet er auch bei der richtigen Reihenfolge nicht die LED an.
ICh hoffe ich konnte das irgendwie verständlich machen.
const int buttonA = A0;
const int buttonB = A1;
const int buttonC = A2;
const int buttonD = A3;
const int ledPin = 7;
const int powerctrl = 8;
enum AutomatenZustand {START,WaitForA,WaitForB,WaitForC,WaitForD,ACTIVE};
AutomatenZustand zustand = START;
int ledState = LOW;
int aktiverZustand = 0;
int powerState = HIGH;
unsigned long previousMillis = 0;
const long interval = 2000;
void setup() {
pinMode(ledPin,OUTPUT);
pinMode(buttonA , INPUT);
pinMode(buttonB, INPUT);
pinMode(buttonC, INPUT);
pinMode(buttonD, INPUT);
pinMode(powerctrl, OUTPUT);
}
void loop() {
automat();
}
void automat() {
int buttonStateA = analogRead(buttonA);
int buttonStateB = analogRead(buttonB);
int buttonStateC = analogRead(buttonC);
int buttonStateD = analogRead(buttonD);
unsigned long currentMillis = millis();
switch(zustand){
case START:
ledState = LOW;
digitalWrite(ledPin,ledState);
powerState = HIGH;
digitalWrite(powerctrl,powerState);
delay(1000);
if(buttonStateA < 160 && buttonStateB < 160 && buttonStateC < 160 && buttonStateD < 160){
zustand = WaitForA;
}
break;
case WaitForA:
if(buttonStateA > 160 && buttonStateB < 160 && buttonStateC < 160 && buttonStateD < 160){
zustand = WaitForB;
}
break;
case WaitForB:
if(buttonStateA > 160 && buttonStateB > 200 && buttonStateC < 160 && buttonStateD < 160){
zustand = WaitForC;
}
break;
case WaitForC:
if(buttonStateA > 160 && buttonStateB > 200 && buttonStateC > 240 && buttonStateD < 250){
zustand = WaitForD;
}
break;
case WaitForD:
if(buttonStateA > 160 && buttonStateB > 200 && buttonStateC > 240 && buttonStateD > 260){
ledState = HIGH;
digitalWrite(ledPin,ledState);
zustand = ACTIVE;
}
break;
case ACTIVE:
delay(10000);
powerState = LOW;
digitalWrite(powerctrl,powerState);
{
if(currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
zustand = START;
}
}
break;
}
if(buttonStateA > 350 && buttonStateB > 350 && buttonStateC > 350 && buttonStateD > 350 && ledState == LOW){
powerState = LOW;
digitalWrite(powerctrl,powerState);
delay(3000);
powerState = HIGH;
digitalWrite(powerctrl,powerState);
delay(3000);
} }