Hey Leute,
erstmal danke an uwefed für die info mit dem refreshen, hab das mal umgesetzt und funktioniert soweit

Jetzt wollte ich nochmal etwas nachfragen und zwar habe ich das gefühl dass die einzelnen bits, welche die
LEDS ja repräsentieren immer weiter "durchgepusht" werden.
Ich wollte jetzt einfach mal ein Programm schreiben welches schrittweise die LEDS von Oben links nach unten Links
anschaltet und das habe ich mir so gedacht, dass ich einfach sage ich habe ein Array of byte mit 8 stellen.
Die erste Stelle ist 128, sprich die oberste LED ist an, die restlichen Stellen des Arrays sind 0, was bewirken soll
dass nur oben links die LED leuchten soll.
Dann halbiere ich diese 128 zu 64, damit die untere LED angeschaltet wird und die obere ausgeschaltet.
Nun funktioniert das auch halbwegs, aber aus irgendeinem grund bleibt im 2 Durchlauf die LED in der oberen Reihe an
und rückt einen platz weiter, sprich die erste LED ist nichtmehr an, sondern die 2., dann im 3 durchlauf ist die LED der 1. Reihe auf der 3 LED und
die der 2. Reihe auf der 2 LED und der der 3 Reihe auf der 1 LED usw.
Dadurch ergibt sich eine Diagonale beim 8 durchlauf, was ich jedoch nicht nachvollziehen kann, da ich ja nur die erste Stelle des arrays jeweils rausshifte.
Hier mein Quellcode dazu:
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
byte Matrix1[] = {0, 0, 0, 0, 0, 0, 0, 0};
byte Matrix2[] = {0, 0, 0, 0, 0, 0, 0, 0};
int Zaehler = 0;
int Rows = 8;
int RunterZaehlen = 128;
long time[8];
void setup() {
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
for(int i = 0; i<8; i++){
time[i] = millis() + i*i*i;
}
}
void LeereArray(){
digitalWrite(latchPin, LOW);
for(int i = 0; i<8; i++){
Matrix1[i] = 0;
shiftOut(dataPin, clockPin, MSBFIRST, Matrix1[i]);
}
digitalWrite(latchPin, HIGH);
delay(1000);
}
void Snake(){
int RunterZaehlen = 128;
for(int i = 0; i< 8;i++){
digitalWrite(latchPin, LOW);
Matrix1[1] = RunterZaehlen;
RunterZaehlen = RunterZaehlen / 2;
if(millis()>time[i]){
shiftOut(dataPin, clockPin, MSBFIRST, Matrix1[1]);
digitalWrite(latchPin, HIGH);
delay(1000);
}
}
}
void loop() {
Snake();
/*if(Zaehler == 1){
LeereArray();
}*/
}
 { //set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); for(int i = 0; i<8; i++){ time[i] = millis() + i*i*i;}}void LeereArray(){ digitalWrite(latchPin, LOW); for(int i = 0; i<8; i++){ Matrix1[i] = 0; shiftOut(dataPin, clockPin, MSBFIRST, Matrix1[i]); } digitalWrite(latchPin, HIGH); delay(1000);} void Snake(){ int RunterZaehlen = 128; for(int i = 0; i< 8;i++){ digitalWrite(latchPin, LOW); Matrix1[1] = RunterZaehlen; RunterZaehlen = RunterZaehlen / 2; if(millis()>time[i]){ shiftOut(dataPin, clockPin, MSBFIRST, Matrix1[1]); digitalWrite(latchPin, HIGH); delay(1000); } } }void loop() { Snake(); /*if(Zaehler == 1){ LeereArray(); }*/})
Hier hab ich das ganze zur besseren Übersicht nochmal fotografiert:
1:

2:

3:

Danke schonmal für die Hilfe

MfG: idl0r
P.S: das ganze geht immer bis unten rechts

und fängt ab der Hälfte von oben links wieder neu an, deshalb
sieht man da auch immer die Hälfte der "alten" bits