void loop() {
if (Play) {
if (play()) {
Button_Check();
}
}
}
////////////////////////////////////////////////////////////////////////////////////
//FUNKTIONEN
////////////////////////////////////////////////////////////////////////////////////
//________________________________________________________________________SETLEDS()
void setLeds() {
/* if (Mode==false) {*/
for (unsigned int i = 0; i<=15; i=i+1) {
// if (second) {
/* if (ReadValue(program_sequence,ProgramSequenceTakt,active_channel,((i*Faktor)+16), false) == 0) {
digitalWrite((StepLedPINS[i]), LOW);
} else {
digitalWrite((StepLedPINS[i]), HIGH);
}*/
// } else {
if (ReadValue(program_sequence,ProgramSequenceTakt,active_channel,(i*Faktor), false) == 0) {
digitalWrite((StepLedPINS[i]), LOW);
} else {
digitalWrite((StepLedPINS[i]), HIGH);
}
// }
}
/*} else {
for (int i = 0; i <= 15; i++) {
if (i==program_sequence || i == (Paste-1)) {
digitalWrite((StepLedPINS[i]), HIGH);
} else {
if (i != play_sequence) {
digitalWrite((StepLedPINS[i]), LOW);
}
}
}
}*/
}
//________________________________________________________________________DISPLAY_BARS()
void display_bars(unsigned int count) {
for (unsigned int i = 0; i < 4; i = i + 1) {
if ( i == (count-1)) {
if (count == 1) {
digitalWrite(TaktPINS[i],HIGH);
} else {
analogWrite(TaktPINS[i],100);
}
} else {
digitalWrite(TaktPINS[i],LOW);
}
}
}
//________________________________________________________________________DISPLAY_VALUES()
void display_values(unsigned int a, unsigned int b, unsigned int c, unsigned int d) {
digitalWrite(14, HIGH);
for (unsigned int i = 0; i < 4; i = i+1) {
digitalWrite(DisplayDataPIN,numbers[b][i]);
digitalWrite(DisplayClockPIN, HIGH);
digitalWrite(DisplayDataPIN,LOW);
digitalWrite(DisplayClockPIN, LOW);
}
for (unsigned int i = 0; i < 4; i = i+1) {
digitalWrite(DisplayDataPIN,numbers[a][i]);
digitalWrite(DisplayClockPIN, HIGH);
digitalWrite(DisplayDataPIN,LOW);
digitalWrite(DisplayClockPIN, LOW);
}
for (unsigned int i = 0; i < 4; i = i+1) {
digitalWrite(DisplayDataPIN,numbers[d][i]);
digitalWrite(DisplayClockPIN, HIGH);
digitalWrite(DisplayDataPIN,LOW);
digitalWrite(DisplayClockPIN, LOW);
}
for (unsigned int i = 0; i < 4; i = i+1) {
digitalWrite(DisplayDataPIN,numbers[c][i]);
digitalWrite(DisplayClockPIN, HIGH);
digitalWrite(DisplayDataPIN,LOW);
digitalWrite(DisplayClockPIN, LOW);
}
}
//________________________________________________________________________READVALUE()
inline boolean ReadValue(int seq, int takt, int channel, int p, boolean Switch) {
takt--;
int count = (seq*4*10*32)+(takt*10*32)+(channel*32)+p;
int x = count % 8;
int x2 = (count-x)/8;
count=-1;
boolean BIT = bitRead(sequenzen[x2],x);
if (Switch) {
bitWrite(sequenzen[x2],x,inv(BIT));
} else {
return BIT;
}
}
//________________________________________________________________________WRITEVALUE()
void WriteValue(int seq, int takt, int channel, int p, boolean value) {
takt--;
int count = (seq*4*10*32)+(takt*10*32)+(channel*32)+p;
int x = count % 8;
int x2 = (count-x)/8;
count=-1;
bitWrite(sequenzen[x2],x,value);
}
//________________________________________________________________________inv()
inline boolean inv(boolean x) {
if (x==HIGH) {
return LOW;
} else {
return HIGH;
}
}
boolean play () {
if ((micros() - Timer) > 66000) {
for (int i = 0; i<10; i++) {
channelvals[i]=ReadValue(play_sequence,PlaySequenceTakt,i,Step,false);
}
for (int i = 0; i<10; i++) {
digitalWrite(55+i,channelvals[i]);
}
Step++;
Timer = micros();
lastOut = micros();
if ((micros()-lastOut) > 50) {
for (int i = 0; i<10; i++) {
digitalWrite(55+i,LOW);
}
}
if (Step > 31) {
Step = 0;
} else {
Step = Step;
}
if (PlaySequenceTakt == ProgramSequenceTakt) {
if (Faktor == 2) {
digitalWrite(SetStepsLedPINS[3], stepper[Step/Faktor][0]);
digitalWrite(SetStepsLedPINS[2], stepper[Step/Faktor][1]);
digitalWrite(SetStepsLedPINS[1], stepper[Step/Faktor][2]);
digitalWrite(SetStepsLedPINS[0], stepper[Step/Faktor][3]);
} else {
if (Step > 15) {
StepSize=Step-16;
} else {
StepSize = Step;
}
digitalWrite(SetStepsLedPINS[3], HIGH);
digitalWrite(SetStepsLedPINS[2], HIGH);
digitalWrite(SetStepsLedPINS[1], HIGH);
digitalWrite(SetStepsLedPINS[0], HIGH);
}
} else {
digitalWrite(SetStepsLedPINS[3], HIGH);
digitalWrite(SetStepsLedPINS[2], HIGH);
digitalWrite(SetStepsLedPINS[1], HIGH);
digitalWrite(SetStepsLedPINS[0], HIGH);
}
return false;
} else {
return true;
}
}
//________________________________________________________________________Button_Check()
boolean Button_Check() {
for (unsigned int i = 0; i < 16; i++) {
button_state=digitalRead(ProgramButtonPINS[i]);
if (button_state==LOW) {
if (button_ok[i]) {
button_ok[i]= false;
button_last = millis();
ReadValue(program_sequence,ProgramSequenceTakt,active_channel,(i*Faktor), true);
setLeds();
}
} else if ((button_ok[i]) == false) {
if ((millis()-button_last) > 100) {
button_ok[i] = true;
}
}
}
//________________________________________________________________ButtonA
button_state=digitalRead(ButtonAPIN);
if (button_state==LOW) {
if (ButtonA_ok) {
ButtonA_ok = false;
button_last=millis();
active_channel--;
setLeds();
display_values(0,0,0,active_channel);
}
} else if ((ButtonA_ok) == false) {
if ((millis()-button_last) > 200) {
ButtonA_ok = true;
}
}
//________________________________________________________________ButtonB
button_state=digitalRead(ButtonBPIN);
if (button_state==LOW) {
if (ButtonB_ok) {
ButtonB_ok = false;
button_last=millis();
active_channel++;
setLeds();
display_values(0,0,0,active_channel);
}
} else if ((ButtonB_ok) == false) {
if ((millis()-button_last) > 200) {
ButtonB_ok = true;
}
}
}
Thank you for the modulo stuff !
I now started to rearrange and improve the code. Thats what ive got yet. Do you see anything to improve?