Hallo alle zusammen,
Ich heisse Daniel und bin 32 Jahre alt. Ich habe mir vor kurzem einen Arduino UNO gekauft, nun habe ich versucht mehrere Lauflichter in einen Programm zu packen. Habe es verucht mit Switch Case und 4 Arrays verschiedene Lauflichter zu programmieren.
Den Code dafür, habe ich aus Programmschnipsel aus dem Internet zusammen geführt und versucht anzupassenn wie es brauche.
Das Programm funktioniert zum Teil. Nur das Problem ist, das ich im Unterprogramm led_1 bis led_4 ein Delay drin habe. Kann also, nicht mit den Taster weiter schalten, erst dann wenn die For Schleife beendet ist. Eigentlich wollte ich bei case : eine While schleife machen wenn count=1 ist usw . Damit das Lauflicht immer wiederholt wird. Nur das geht leider nicht, weil sonst der Taster nicht abgefragt wird. Ich hoffe ihr könnt mir helfen, ich sitze da jetzt schon mehrere Tage dran, und komme einfach nicht weiter. Habe es natürlich auch mit dem Beispiel BlinkWithoutDelay versucht, habe leider weiss ich nicht wie ich es anzupassen habe, damit es bei mir funktioniert.
Mit Interrupt wollte ich es nicht machen, will ich das Programm noch erweitern will, da der Controller nur 2 Interrupt hat ist es mir zu wenig. Brauche insgesamt 4 oder noch mehr.
const int inputPin = 4;
int count = 1;
int state = LOW;
int laststate = LOW;
byte Lauflicht1[15][8] =
{
{ 0,0,0,0,0,0,0,1 },
{ 0,0,0,0,0,0,1,0 },
{ 0,0,0,0,0,1,0,0 },
{ 0,0,0,0,1,0,0,0 },
{ 0,0,0,1,0,0,0,0 },
{ 0,0,1,0,0,0,0,0 },
{ 0,1,0,0,0,0,0,0 },
{ 1,0,0,0,0,0,0,0 },
{ 0,1,0,0,0,0,0,0 },
{ 0,0,1,0,0,0,0,0 },
{ 0,0,0,1,0,0,0,0 },
{ 0,0,0,0,1,0,0,0 },
{ 0,0,0,0,0,1,0,0 },
{ 0,0,0,0,0,0,1,0 }
};
byte Lauflicht2[8][8] =
{
{ 1,0,0,0,0,0,0,1 },
{ 0,1,0,0,0,0,1,0 },
{ 0,0,1,0,0,1,0,0 },
{ 0,0,0,1,1,0,0,0 },
{ 0,0,1,0,0,1,0,0 },
{ 0,1,0,0,0,0,1,0 },
{ 1,0,0,0,0,0,0,1 }
};
byte Lauflicht3[8][8] =
{
{ 1,0,0,0,0,0,0,0 },
{ 0,1,0,0,0,0,0,0 },
{ 0,0,1,0,0,0,0,0 },
{ 0,0,0,1,0,0,0,0 },
{ 0,0,0,0,1,0,0,0 },
{ 0,0,0,0,0,1,0,0 },
{ 0,0,0,0,0,0,1,0 },
{ 0,0,0,0,0,0,0,1 }
};
byte Lauflicht4[8][8] =
{
{ 0,0,0,0,0,0,0,1 },
{ 0,0,0,0,0,0,1,0 },
{ 0,0,0,0,0,1,0,0 },
{ 0,0,0,0,1,0,0,0 },
{ 0,0,0,1,0,0,0,0 },
{ 0,0,1,0,0,0,0,0 },
{ 0,1,0,0,0,0,0,0 },
{ 1,0,0,0,0,0,0,0 }
};
void schreibePunkt(byte punkt)
{
digitalWrite(15, punkt);
}
void Lauflicht1Schreiben(byte digit)
{
byte pin = 5;
for (byte segmentZaehler = 0; segmentZaehler < 8; ++segmentZaehler)
{
digitalWrite(pin, Lauflicht1[digit][segmentZaehler]);
++pin;
}
}
void Lauflicht2Schreiben(byte digit)
{
byte pin = 5;
for (byte segmentZaehler = 0; segmentZaehler < 8; ++segmentZaehler)
{
digitalWrite(pin, Lauflicht2[digit][segmentZaehler]);
++pin;
}
}
void Lauflicht3Schreiben(byte digit)
{
byte pin = 5;
for (byte segmentZaehler = 0; segmentZaehler < 8; ++segmentZaehler)
{
digitalWrite(pin, Lauflicht3[digit][segmentZaehler]);
++pin;
}
}
void Lauflicht4Schreiben(byte digit)
{
byte pin = 5;
for (byte segmentZaehler = 0; segmentZaehler < 8; ++segmentZaehler)
{
digitalWrite(pin, Lauflicht4[digit][segmentZaehler]);
++pin;
}
}
void setup() {
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(inputPin, INPUT);
}
void loop()
{
state = digitalRead (inputPin);
if(laststate == LOW && state == HIGH) {
switch(count) {
case 1: while (count = 1)
{led_1();}
break;
case 2: while (count = 2)
{led_2();}
break;
case 3: while (count = 3)
{led_3();}
break;
case 4: while (count = 4)
{led_4();}
break;
}
count++;
if(count == 5) count = 1;
}
laststate = state;
}
void led_1()
{
schreibePunkt(0);
for (byte zaehler = 14; zaehler > 0; --zaehler)
{
delay(250);
Lauflicht1Schreiben(zaehler - 1);
}
}
void led_2()
{
schreibePunkt(0);
for (byte zaehler = 7; zaehler > 0; --zaehler)
{
delay(250);
Lauflicht2Schreiben(zaehler - 1);
}
}
void led_3()
{
schreibePunkt(0);
for (byte zaehler = 8; zaehler > 0; --zaehler)
{
delay(250);
Lauflicht3Schreiben(zaehler - 1);
}
}
void led_4()
{
schreibePunkt(0);
for (byte zaehler = 8; zaehler > 0; --zaehler)
{
delay(250);
Lauflicht4Schreiben(zaehler - 1);
}
}
Wäre super, wenn ihr mir weiter helfen könntet.
Gruss Daniel