const int bit_number = 4;
const int time_const = 1000;
int binary[bit_number];
int bit_array[128][bit_number];
byte look_up16[] = {8, 11, 14, 15, 16, 15, 13, 11, 7, 4, 2, 0, 0, 1, 3, 6};
//byte look_up32 = {16, 19, 22, 25, 27, 29, 31, 32, 32, 32, 31, 30, 28, 26, 23, 20, 17, 14, 11, 8, 6, 4, 2, 1, 0, 0, 1, 2, 3, 6, 8, 11};
//byte look_up64 = {32, 35, 39, 42, 45, 48, 51, 53, 56, 58, 60, 61, 62, 63, 64, 64, 64, 63, 62, 61, 60, 58, 56, 53, 51, 48, 45, 42, 39, 35, 32, 29, 25, 22, 19, 16, 13, 11, 8, 6, 4, 3, 2, 1, 0, 0, 0, 1, 2, 3, 4, 6, 8, 11, 13, 16, 19, 22, 25, 29, 32, 35, 39, 42};
//byte look_up128[] = {64, 67, 71, 74, 77, 81, 84, 87, 90, 93, 96, 99, 102, 104, 107, 109, 112, 114, 116, 118, 119, 121, 122, 124, 125, 126, 127, 127, 128, 128, 128, 128, 128, 127, 127, 126, 125, 124, 122, 121, 119, 118, 116, 114, 112, 109, 107, 104, 102, 99, 96, 93, 90, 87, 84, 81, 77, 74, 71, 67, 64, 61, 57, 54, 51, 47, 44, 41, 38, 35, 32, 29, 26, 24, 21, 19, 16, 14, 12, 10, 9, 7, 6, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 6, 7, 9, 10, 12, 14, 16, 19, 21, 24, 26, 29, 32, 35, 38, 41, 44, 47, 51, 54, 57, 61, 64, 67, 71, 74, 77, 81, 84, 87};
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
for (byte i = 0; i < pow(2, bit_number); i++) {
getDigitalFromInt(look_up16[i]);
for (byte j = 0; j < bit_number; j++) {
bit_array[i][j] = binary[j];
}
}
}
void loop() {
for (byte i = 0; i < pow(2, bit_number); i++) {
digitalControlUnit(bit_array[i][0], bit_array[i][1], bit_array[i][2], bit_array[i][3]);
/*, bit_array[i][4], bit_array[i][5], bit_array[i][6]*/
delay(time_const);
}
}
void digitalControlUnit(int b0, int b1, int b2, int b3) {
//, int b4, int b5, int b6
if (b0 == 1){
PORTD |= 1 << 2;
} else {
PORTD &= ~(1 << 2);
}
if (b1 == 1){
PORTD |= 1 << 3;
} else {
PORTD &= ~(1 << 3);
}
if (b2 == 1){
PORTD |= 1 << 4;
} else {
PORTD &= ~(1 << 4);
}
if (b3 == 1){
PORTD |= 1 << 5;
} else {
PORTD &= ~(1 << 5);
}/*
if (b4 == 1){
PORTD |= 1 << 6;
} else {
PORTD &= ~(1 << 6);
}
if (b5 == 1){
PORTD |= 1 << 7;
} else {
PORTD &= ~(1 << 7);
}
if (b6 == 1){
PORTB |= 1 << 0;
} else {
PORTB &= ~(1 << 0);
}*/
}
void getDigitalFromInt(int analog_value) {
for (byte i = 0; i < bit_number; i++) {
binary[i] = analog_value % 2;
analog_value = (analog_value - binary[i])/2;
}
}