Hallo,
Ich habe vor einigen Wochen mein Projekt die LED Reihe angefangen und habe dabei ein kleines Problem.
Das Programm beinhaltet 4 Muster, die durch einen Knopf geändert werden können. Außerdem kann man mit einem Potentiometer die Geschwindigkeit verändern.
Wenn ich das Programm ausführe funktioniert noch alles super, aber wenn ich beim 4. Muster angelange, ändert sich nach einpaar mal ausführen die Variable, welche bestimmt, welches Muster erscheint. Wenn ich diese Variable durch einen Serial print am PC ausgebe, funktioniert das Programm einwandfrei, aber wenn ich den Part mit dem Ausgeben der Variable weglösche, hat es wieder den gleichen Fehler wie davor.
Das Programm, sowie der Schaltungsaufbau sind unten verlinkt.
char led[]={1,2,3,4,5,6,7,8,9,10,11,12,13}, z[12];
int b,i,v,x,y,t=100;
int muster=1;
int pot = A1;
const int buttonp = A3;
long currentmillis=0;
long previousmillis=0;
boolean buttonbackup=false;
int button(int ti)
{
boolean input;
boolean buttondown = false;
currentmillis=millis();
previousmillis=currentmillis;
while(currentmillis - previousmillis < ti/10)
{
input =digitalRead(buttonp);
if(input==HIGH & buttonbackup==false)
{
buttonbackup = true;
muster++;
if(muster>4) muster=muster-4;
}
else if(input==LOW & buttonbackup==true)
{
buttonbackup=false;
}
//Serial.println(muster);
ti= analogRead(pot);
currentmillis=millis();
}
/* if(buttondown==true)
{
muster++;
if(muster>3) muster=muster-3;
Serial.prvoidln(muster);
}*/
}
void up()
{
for(i=0;i<=12;i++)
{
digitalWrite(led[i],HIGH);
button(50);
if(buttonbackup==true) break;
}
}
void down()
{
for(i=12;i>=0;i--)
{
if(buttonbackup==true) break;
digitalWrite(led[i],LOW);
button(50);
}
}
void stack()
{
x=12;
y=12;
for(v=0;v<=y;v++)
{
if(buttonbackup==true) break;
for(i=0;i<=x;i++)
{
if(buttonbackup==true) break;
digitalWrite(led[i], HIGH);
button(100);
if(i==x) x--;
else digitalWrite(led[i], LOW);
}
}
}
void ausbreitung()
{
if(buttonbackup==true) return;
digitalWrite(led[6], HIGH);
button(100);
for(i=1;i<=6;i++)
{
digitalWrite(led[6+i], HIGH);
digitalWrite(led[6-i], HIGH);
button(100);
if(buttonbackup==true) break;
}
}
void ausbreitung2()
{
if(buttonbackup==true) return;
digitalWrite(led[6], HIGH);
button(100);
for(i=1;i<=6;i++)
{
if(buttonbackup==true) break;
digitalWrite(led[6+i], HIGH);
digitalWrite(led[6-i], HIGH);
if(i==2) digitalWrite(led[6], LOW);
digitalWrite(led[6+i-1], LOW);
digitalWrite(led[6-i+1], LOW);
button(100);
if(buttonbackup==true) break;
}
}
void einzug()
{
for(i=6;i>0;i--)
{
if(buttonbackup==true) break;
digitalWrite(led[6+i], HIGH);
digitalWrite(led[6-i], HIGH);
button(100);
}
if(buttonbackup==true) return;
digitalWrite(led[6], HIGH);
button(100);
}
void einzug2()
{
for(i=6;i>0;i--)
{
if(buttonbackup==true) break;
digitalWrite(led[6+i], HIGH);
digitalWrite(led[6-i], HIGH);
digitalWrite(led[6+i+1], LOW);
digitalWrite(led[6-i-1], LOW);
button(100);
if(i==1)
{
digitalWrite(led[6+i], LOW);
digitalWrite(led[6-i], LOW);
}
}
if(buttonbackup==true) return;
digitalWrite(led[6], HIGH);
button(100);
}
void knightrider()
{
for(i=0;i<13;i++)
{
digitalWrite(led[i],HIGH);
button(100);
digitalWrite(led[i+1],HIGH);
button(100);
if(buttonbackup==true) break;
if(i>0) digitalWrite(led[i-1],HIGH);
button(100);
digitalWrite(led[i+2],HIGH);
digitalWrite(led[i-1],LOW);
}
for(i=12;i>=0;i--)
{
digitalWrite(led[i],HIGH);
button(100);
digitalWrite(led[i-1],HIGH);
button(100);
if(buttonbackup==true) break;
if(i<12) digitalWrite(led[i+1],HIGH);
button(100);
digitalWrite(led[i-2],HIGH);
digitalWrite(led[i+1],LOW);
}
}
void ende()
{
for(i=0;i<=12;i++)
{
digitalWrite(led[i], LOW);
}
button(500);
}
void setup() {
for(i=0;i<=12;i++)
{
pinMode(led[i], OUTPUT);
}
pinMode(button, INPUT);
// Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
//if(muster>4) muster=muster-4;
switch(muster)
{
case 1:
up();
down();
ende();
break;
case 2:
stack();
ende();
break;
case 3:
ausbreitung2();
einzug();
einzug2();
ausbreitung();
ende();
break;
case 4:
knightrider();
ende();
break;
}
//if(muster>4) muster=muster-4;
}
Ich würde mich freuen, wenn mir wer dabei helfen könnte!
Danke
LED-Reihe.ino (3.88 KB)