So ich habe es nun anders gelöst. Für die es Interessiert oder nach sowas googlen und nix finden.
//Pin connected to ST_CP of 74HC595
int latchPin = 2;
//Pin connected to SH_CP of 74HC595
int clockPin = 1;
////Pin connected to DS of 74HC595
int dataPin = 0;
#define encoder0PinA 10
#define encoder0PinB 11
int encoder0Pos = 0;
int n = LOW;
int encoder0PinALast = LOW;
int encoder0sw = A0;
int mode = 1;
unsigned int seq1 = 0;
unsigned int seq2 = 0;
unsigned int seq3 = 0;
unsigned int seq4 = 0;
unsigned int seq5 = 0;
unsigned int seq6 = 0;
unsigned long int sequence0[9] = {
0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};
unsigned long int sequence1[9] = {
0x0,0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff};
void setup() {
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // turn on pullup resistor
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // turn on pullup resistor
attachInterrupt(0, doEncoder, CHANGE);
// attachInterrupt(1, doEncoder, CHANGE);
}
void doEncoder() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
encoder0Pos--;
}
else {
encoder0Pos++;
}
}
encoder0PinALast = n;
}
void ledmode_mode1_volume(){
if(encoder0Pos < 9){
seq6 = 0;
seq5 = 0;
seq4 = 0;
seq3 = 0;
seq2 = 0;
seq1 = encoder0Pos;
}
if(encoder0Pos > 8){
seq6 = 0;
seq5 = 0;
seq4 = 0;
seq3 = 0;
seq2 = encoder0Pos - 8;
seq1 = 8;
}
if(encoder0Pos > 16){
seq6 = 0;
seq5 = 0;
seq4 = 0;
seq3 = encoder0Pos - 16;
seq2 = 8;
seq1 = 8;
}
if(encoder0Pos > 24){
seq6 = 0;
seq5 = 0;
seq4 = encoder0Pos - 24;
seq3 = 8;
seq2 = 8;
seq1 = 8;
}
if(encoder0Pos > 32){
seq6 = 0;
seq5 = encoder0Pos - 32;
seq4 = 8;
seq3 = 8;
seq2 = 8;
seq1 = 8;
}
if(encoder0Pos > 40){
seq6 = encoder0Pos - 40;
seq5 = 8;
seq4 = 8;
seq3 = 8;
seq2 = 8;
seq1 = 8;
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq6]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq5]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq4]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq3]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq2]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq1]);
digitalWrite(latchPin, HIGH);
}
void ledmode_mode0_volume(){
if(encoder0Pos < 9){
seq6 = 0;
seq5 = 0;
seq4 = 0;
seq3 = 0;
seq2 = 0;
seq1 = encoder0Pos;
}
if(encoder0Pos > 8){
seq6 = 0;
seq5 = 0;
seq4 = 0;
seq3 = 0;
seq2 = encoder0Pos - 8;
seq1 = 0;
}
if(encoder0Pos > 16){
seq6 = 0;
seq5 = 0;
seq4 = 0;
seq3 = encoder0Pos - 16;
seq2 = 0;
seq1 = 0;
}
if(encoder0Pos > 24){
seq6 = 0;
seq5 = 0;
seq4 = encoder0Pos - 24;
seq3 = 0;
seq2 = 0;
seq1 = 0;
}
if(encoder0Pos > 32){
seq6 = 0;
seq5 = encoder0Pos - 32;
seq4 = 0;
seq3 = 0;
seq2 = 0;
seq1 = 0;
}
if(encoder0Pos > 40){
seq6 = encoder0Pos - 40;
seq5 = 0;
seq4 = 0;
seq3 = 0;
seq2 = 0;
seq1 = 0;
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq6]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq5]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq4]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq3]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq2]);
shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq1]);
digitalWrite(latchPin, HIGH);
}
void loop() {
if (encoder0Pos < 0){
encoder0Pos = 0;
}
if (encoder0Pos > 48){
encoder0Pos = 48;
}
switch(mode){
case 0:
ledmode_mode0_volume();
break;
case 1:
ledmode_mode1_volume();
break;
}
}
Danke für die anreize.