int binary[4] = {0};
short counter{};
int last_time_generate = 0;
int last_time_plus = 0;
int last_time_minus = 0;
void IRAM_ATTR generate_random() {
if (millis() > last_time_generate + 150) {
counter = random(0, 15);
last_time_generate = millis();
}
}
void IRAM_ATTR plus_random() {
if (millis() > last_time_plus + 150) {
counter++;
last_time_plus = millis();
}
}
void IRAM_ATTR minus_random() {
if (millis() > last_time_minus + 150) {
counter--;
last_time_minus = millis();
}
}
void setup() {
pinMode(18, OUTPUT);
pinMode(17, OUTPUT);
pinMode(16, OUTPUT);
pinMode(4, OUTPUT);
attachInterrupt(digitalPinToInterrupt(12), generate_random, RISING);
attachInterrupt(digitalPinToInterrupt(14), plus_random, RISING);
attachInterrupt(digitalPinToInterrupt(27), minus_random, RISING);
}
void copy_array(int arr1[], int arr2[], int length) {
for (int i = 0; i < length; i++) {
arr1[i] = arr2[i];
}
}
void reverse(int arr[], int count) {
int reversed[4];
for (int i = 0, j = count; i < count; i++, j--) {
reversed[i] = arr[j - 1];
}
copy_array(arr, reversed, count);
}
void decimal_to_binary(int decimal) {
int remainder{}, number = decimal;
for (int index = 0; index < 4; index++) {
remainder = number % 2;
number /= 2;
binary[index] = remainder;
}
reverse(binary, 4);
}
int pins[4] = {18, 17, 16, 4};
void loop() {
decimal_to_binary(counter);
for (int i = 0; i < 4; i++) {
digitalWrite(pins[i], binary[i]);
}
}