Hallo, ich habe ein Problem beim einbinden eines Tasters in mein Program. Ich möchte per Tastendruck das Programm starten und nach 60 sek. Soll es wieder aus gehen und auf einen erneuten Tastendruck warten. Ich habe es schon mit verschiedenen Variablen probiert aber ich komme nicht zum Ziel da ich den die eigentliche Loop ja eigentlich ausklammern muss oder?
Kurz: Taster gedrückt LEDs Faden hintereinander an bis 255 bleiben da 60sek. Und gehen danach aus. Warten bis zum nächsten Taster puls.
int buttonPin = 8;
int pausen = 500;
int vals [] = { 0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23, 27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255 };
int vals1 [] = { 255, 215, 181, 152, 128, 108, 91, 76, 64, 54, 45, 38, 32, 27, 23, 19, 16, 13, 11, 10, 8, 7, 6, 5, 4, 3, 3, 2, 2, 2, 1, 0, };
int numVal = 32; //number of values in array
byte schwelle = 10; // 70% * 255; Schwelle, bei der die nächste LED einsetzt.
byte a,b,c,d,e,f; // Zählervariablen für 3 LEDs
unsigned long sweepstart; // Zeit merken, zu der der Dimmprozess gestartet wurde.
void setup()
{
for (int i = 2; i < 10; i++)
{
pinMode(i, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // der Taster wird mit internem Pullup verwendet, d.h. er ist mit dem GND und dem digitalen Input verbunden
}
}
void loop()
{
bool myCurrentButtonState = digitalRead(buttonPin); // Zählervariablen berechnen
a = min(a++, numVal-1); // Zähler 1. LED wird hochgezählt bis 31
if (vals[a] > schwelle)
{
b = min(b++, numVal-1); // Zähler 2. LED wird hochgezählt bis 31, wenn Wert 1. LED > Schwelle,
}
if (vals[b] > schwelle)
{
c = min(c++, numVal-1); // Zähler 3. LED wird hochgezählt bis 31, wenn Wert 2. LED > Schwelle,
}
if (vals[c] > schwelle)
{
d = min(d++, numVal-1); // Zähler 4. LED wird hochgezählt bis 31, wenn Wert 2. LED > Schwelle,
}
if (vals[d] > schwelle)
{
e = min(e++, numVal-1); // Zähler 5. LED wird hochgezählt bis 31, wenn Wert 2. LED > Schwelle,
}
if (vals[e] > schwelle)
{
f = min(f++, numVal-1); // Zähler 6. LED wird hochgezählt bis 31, wenn Wert 2. LED > Schwelle,
}
analogWrite(3, vals[a]);
analogWrite(5, vals[b]);
analogWrite(6, vals[c]);
analogWrite(9, vals[d]);
analogWrite(10, vals[e]);
analogWrite(11, vals[f]);
delay(20); // Rücksetzen alle Variablen und wiederholen nach einer Pause
if(millis()-sweepstart > pausen * 128)
{ // Ist die Wartezeit abgelaufen? (Dauer=pausen*128)
a=0; // Zählervariablen rücksetzen
b=0;
c=0;
d=0;
e=0;
f=0;
sweepstart = millis(); // Zeitpunkt des Neustarts merken
}
}