Moin, ich möchte für mein Model eine Beleuchtung programmieren.
Als erstes soll ein Lauflicht nach links und rechts mit jeweils 10 Leds laufen.
Im Anschluss sollen alle Leds einmal aufblinken. Zu einem späteren Zeitpunkt soll das eventuell erweitert werden bzw. noch andere Muster eingebunden werden.
Ich habe für das Lauflicht und blinken jeweils eigene Unterprogramme erstellt die dann aufgerufen werden soll.
Mein Problem ist nun wenn ich die Funktion Lauflicht und Blitzer nacheinander ausführe blinken die LEDs nur und das Lauflicht wird nicht ausgeführt (bzw. angezeigt).
Lasse ich starte ich nur das Lauflicht funktioniert es einwandfrei.
Ich habe einige Ansätze probiert um das Problem zu lösen, der letzte Stand ist mit Switch Case zu versuchen die Programme von einander zu trennen.
Anscheinend habe ich allerdings einen generellen Denkfehler und wäre um einen Denkanstoß oder Lösung dankbar.
int n=0; //Variable für Schleifen
int m=0;
int Lauflinks=1;
int ledPinlinks[8]={2,3,4,5,6,7,8,9}; //Ausgänge links !! Reihenfolge der Pins aufsteigend !!
int ledPinrechts[8]={53,52,51,50,49,48,47,46}; //Ausgänge rechts !! Reihenfolgeder Pins absteigen !!
int Status_Lauflicht=0;
int Status_Blitzer=0;
int ProgrammWahl=0;
int counter=0;
unsigned long previousMillis=0;
const long Laufintervall=1000; //75 //Zeitspanne Lauflicht
class Blink {
private:
unsigned long prevtime;
unsigned int zyklus;
unsigned int an;
public:
Blink(unsigned int _an, unsigned int _zyklus) { zyklus=_zyklus; an = _an;}
boolean currentState () {
// sollte häufig aufgerufen werden, damit der jeweils aktuelle Zustand zurückgeliefert wird
if (millis() - prevtime >= zyklus) {
prevtime = millis();
}
if (millis() - prevtime < an) return true;
else return false;
}
};
Blink blitz(20,2000); //200
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
// auf serielle Verbindung warten
while(!Serial);
delay(1000);
Serial.println("Programmieren ist toll!");
for(int i=0;i<8;i++){
pinMode(ledPinlinks[i],OUTPUT);
pinMode(ledPinrechts[i],OUTPUT);
}
pinMode(25,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
switch(ProgrammWahl){
case 0:
Lauflicht(5);
break;
case 1:
Blitzer(3);
break;
}
// if (Status_Lauflicht=0){Lauflicht(5);}
// if (Status_Blitzer==0) {Blitzer(3);}
}
void Lauflicht(int Durchlauf){
int i=0;
unsigned long currentMillis=millis();
do{
if(currentMillis-previousMillis>=Laufintervall){
previousMillis=currentMillis;
if(Lauflinks==1){
digitalWrite(ledPinlinks[counter-1],LOW);
digitalWrite(ledPinlinks[counter],HIGH);
digitalWrite(ledPinrechts[counter-1],LOW);
digitalWrite(ledPinrechts[counter],HIGH);
counter=counter+1;
if(counter>7){
counter=7;
Lauflinks=2;
}
}
if(Lauflinks==2){
digitalWrite(ledPinlinks[counter+1],LOW);
digitalWrite(ledPinlinks[counter],HIGH);
digitalWrite(ledPinrechts[counter+1],LOW);
digitalWrite(ledPinrechts[counter],HIGH);
counter=counter-1;
if(counter<0){
counter=1;
Lauflinks=1;
}
}
}
i++;
} while (i<32);
ProgrammWahl=1;
}
void Blitzer(int Durchlauf){
for (int i=0;i<8;i++){
digitalWrite(ledPinlinks[i], blitz.currentState() );
digitalWrite(ledPinrechts[i], blitz.currentState() );
}
ProgrammWahl=0;
}