auch auf die gefahr hin, dass das thema irgendwo schon behandelt wurde und ich mich zum doesbaddel mache, frage ich mal nach:
eine sequenz mit delay() funktioniert ohne probleme. so weit bin ich schon gekommen.
jetzt moechte ich gerne, dass wenn der input "HIGH" ist, die erste LED mit "HIGH" geschrieben wird. beim naechsten intervall soll dann die 2. LED mit "HIGH" geschrieben werden. das weitersteppen funktioniert in meinem programm nur per zufall bzw. mit einer zu schnellen geschwindigkeit.
die variable wird erst mit einem input "LOW" inkrementiert... gerne haette ich eine loesung, bei der ein zwischenwert von HIGH zu LOW den wert inkrementiert.
ich weiß jetzt noch nicht so richtig was du meinst und willst.
Wenn du in bestimmten Zeitabschnitten eine Aktion auslösen willst, dann kannst du ganz gut einen Timer verwenden Arduino Playground - MsTimer2
Wenn du mehrer Aktionen zu verschiedenen Zeitpunkten durchführen möchtest, dann kannst du den Timer dazu verwenden, eine Funktion aufzurufen, in der Zähler hochgezählt werden.
Den Wert des Zählers kannst du mit einer if-Anweisung abfragen und eine Aktion durchführen lassen. Somit kannst du beliebige Aktionen zu verschiedenen Zeitpunkten (mehrere counter) ausführen.
Beachte, dass die Zähler nach einer Aktion wieder auf Null gesetzt werden müssen.
Gerade die "hohe" Geschwindigkeit gekoppelt mit Unregelmäßigkeit lässt darauf schliessen das Du vielleicht gar kein Software- sondern ein Hardwareproblem hast.
Bei Deinem Code wird der Zähler permanent bei jedem Loop-Durchlauf inkrementiert, solange der Input LOW ist. Wenn Du es nur bei einem Wechsel von HIGH zu LOW haben willst, musst Du Dir den vorherigen Zustand merken.
int inPin12 = 12;
int state = LOW;
int lastState = LOW; // Variable zum Speichern des letzten Zustandes
int count = 0;
void setup()
{
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(inPin12, INPUT);
}
void loop()
{
state = digitalRead(inPin12);
if (state == HIGH)
{
digitalWrite(count, HIGH);
lastState = HIGH;
}
else
{
digitalWrite(count, LOW);
if (lastState == HIGH)
{
count++;
if (count >= 8)
count = 0;
lastState = LOW;
}
}
}
Wenn die Inkrementierung auch beim Wechsel von LOW zu HIGH erfolgen soll, dann so:
int inPin12 = 12;
int state = LOW;
int lastState = LOW; // Variable zum Speichern des letzten Zustandes
int count = 0;
void setup()
{
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(inPin12, INPUT);
}
void loop()
{
state = digitalRead(inPin12);
if (state == HIGH)
{
digitalWrite(count, HIGH);
}
else
{
digitalWrite(count, LOW);
}
if (state != lastState)
{
count++;
if (count >= 8)
count = 0;
lastState = state;
}
}