int steps = 8;
int pulses = 5;
int remainder[16];
int count[16];
int level;
int stepstatus=0;
char pattern[16];
float currentmicroTime;
float currentmicroTime2;
char trackArray[8][16];
void setup() {
Serial.begin(9600);
}
void loop() {
delay (3000);
currentmicroTime = (float)micros();
compute_bitmap(steps,pulses);
currentmicroTime2 = (float)micros();
Serial.print("For ");Serial.print(steps);Serial.print(" steps and ");Serial.print(pulses);Serial.print(" pulses, "); Serial.print("the pattern is:");
Serial.println();
for (int i = steps-1; i >= 0 ; i--) {
Serial.print(trackArray[1][i]);
}
Serial.println();Serial.println();
Serial.print("Bjorklund took ");Serial.print(currentmicroTime2-currentmicroTime);Serial.print(" microseconds.");
Serial.println();Serial.println();Serial.println();Serial.println();
delay (5000);
}
void compute_bitmap (int num_slots,int num_pulses) {
//int remainder[16];
if (num_pulses > num_slots) {num_pulses = num_slots;}
int divisor = num_slots - num_pulses;
steps = num_slots; pulses = num_pulses;
remainder[0] = num_pulses;
level = 0;
do {
count[level] = divisor / remainder[level];
remainder[level+1] = divisor % remainder[level];
divisor = remainder[level];
level = level +1; }
while (remainder[level] > 1);
count[level] = divisor;
build_string (level);
}
void build_string (int level) {
if (level == -1) {
//Serial.println('0');
trackArray[1][stepstatus]='0';
stepstatus=stepstatus+1;
}
else if (level == -2) {
//Serial.println('1'); // Debug
trackArray[1][stepstatus]='1';
stepstatus=stepstatus+1;
}
else {
for (int i = 0; i < count[level]; i++)
build_string(level-1);
if (remainder[level] !=0)
build_string(level-2);
}
}