#include "mbed.h"
// Pinovi za LED i enkoder
const int led_pins[] = {4, 5, 6, 7, 8, 9, 10, 11};
const int num_leds = sizeof(led_pins) / sizeof(led_pins[0]);
PWMOut leds[num_leds] = {PWMOut(PinName(led_pins[0])), PWMOut(PinName(led_pins[1])), PWMOut(PinName(led_pins[2])),
PWMOut(PinName(led_pins[3])), PWMOut(PinName(led_pins[4])), PWMOut(PinName(led_pins[5])),
PWMOut(PinName(led_pins[6])), PWMOut(PinName(led_pins[7]))};
DigitalIn clk(dp28);
DigitalIn dt(dp27);
DigitalIn sw(dp26);
int binary_values[] = {1, 2, 4, 8, 16, 32, 64, 128};
int brojac = 0;
bool encoder_started = false;
int prev_clk = clk.read();
void update_leds(int brojac) {
for (int i = 0; i < num_leds; i++) {
if (brojac & (1 << i) && encoder_started) {
leds[i] = 1.0f; // LED je uključena
} else {
leds[i] = 0.0f; // LED je isključena
}
}
}
void update_counter() {
int clk_state = clk.read();
int dt_state = dt.read();
if (clk_state != prev_clk) {
if (dt_state != clk_state) {
brojac++;
} else {
brojac--;
}
prev_clk = clk_state;
encoder_started = true;
}
}
int main() {
for (int i = 0; i < num_leds; i++) {
leds[i].period(0.02); // Postavi period LED na 50 Hz
}
Ticker encoderTicker;
encoderTicker.attach(&update_counter, 0.01); // Izvršava update_counter svakih 10 ms
while (true) {
if (sw.read() == 0) {
brojac = 0;
for (int i = 0; i < num_leds; i++) {
leds[i] = 0.0f;
}
encoder_started = false;
} else {
update_leds(brojac);
}
ThisThread::sleep_for(20ms); // Spava 20 ms
}
}