Was Du möchtest ist möglich, indem Du einen „Endlichen Automaten“ programmierst. Das ist eine Art Programmierstrickmuster, das Quasi-Gleichzeitigkeit ermöglicht. Was mir hierzu eingefallen ist, kannst Du hier lesen. Außerdem ist auch das Beispiel „BlinkWithoutDelay“ in der IDE (Datei -> Beispiele -> 2. Digital) hilfreich.
Hallo Andree, von Ulrich -- noch neuerer
dein PGM funktioniert. es nudelt 2 Sekunden um dann in einem void-loop Durchgang die for-Schleife raus zu schießen. Es flackert tatsächlich aber viel zu schnell. Also: void-loop ist die Schleife ; for wegnehmen. Ist der Zeitpunkt ermittelt, einen Daten[] wert rausschieben und dann weiternudeln, vielleicht nach zig void-loop Durchläufen wird der nächste Startzeitpunkt ermittelt und dann eben der nächste Daten[] wert herausgeschoben. Ich habe es ausprobiert - funktioniert schön. Etwas Kosmetik an Datentypen, Einrückungen habe ich mir erlaubt.
//bua 2021-01-31 74HC595 ohne delay und auch ohne for ----- für MEGA 2560
int latchPin = 47; //ST
int clockPin = 45; //SH
int dataPin = 51; //DS
byte index1 =0;
int daten [] = {1,2,4,8,16,32,64,128};
unsigned long currentMillis;
unsigned long previousMillis;
const unsigned long interval = 2000L;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, daten[index1]);
digitalWrite(latchPin, HIGH);
index1++;
if(index1>= 8){index1=0;}
}
}
du musst den Code in code tags einrahmen. Entweder linker Button über den Smilie Buttons.
Oder händisch mit code und /code jeweils in eckige Klammern. Dazwischen den eigentlichen Code.
Oder in der IDE > Bearbeiten > Für Forum kopieren anklicken und hier einfügen. Dann sind die code tags automatisch dabei.