#include "mbed.h"
PwmOut led1(p15);
PwmOut led2(p16);
PwmOut led3(p17);
AnalogIn potenciometar(p20);
InterruptIn taster_naprijed(p10);
InterruptIn taster_nazad(p9);
volatile int trenutna_led = 1;
volatile bool debounce_flag = false;
Timeout debounce_timeout;
void debounce_reset() {
debounce_flag = false;
}
void postavi_svjetlost_led(PwmOut &led, float vrijednost) {
led = vrijednost; // Postavlja PWM vrijednost za LED-icu (0.0 do 1.0)
}
void ugasi_led(PwmOut &led) {
led = 0.0; // Postavlja svjetlost LED-ice na 0
}
// Funkcija za prelazak na sljedeću LED-icu
void promijeni_na_naprijed() {
if (!debounce_flag) {
// Postavi debounce flag i timeout
debounce_flag = true;
debounce_timeout.attach(&debounce_reset, 0.2); // Debounce timeout 200 ms
// Ugasi trenutnu LED-icu prije prelaska
if (trenutna_led == 1) {
ugasi_led(led1);
} else if (trenutna_led == 2) {
ugasi_led(led2);
} else if (trenutna_led == 3) {
ugasi_led(led3);
}
// Prelazak na sljedeću LED-icu
trenutna_led = (trenutna_led % 3) + 1;
}
}
// Funkcija za prelazak na prethodnu LED-icu
void promijeni_na_nazad() {
if (!debounce_flag) {
// Postavi debounce flag i timeout
debounce_flag = true;
debounce_timeout.attach(&debounce_reset, 0.2); // Debounce timeout 200 ms
// Ugasi trenutnu LED-icu prije prelaska
if (trenutna_led == 1) {
ugasi_led(led1);
} else if (trenutna_led == 2) {
ugasi_led(led2);
} else if (trenutna_led == 3) {
ugasi_led(led3);
}
// Prelazak na prethodnu LED-icu
trenutna_led = (trenutna_led + 1) % 3 + 1;
}
}
int main() {
// Postavljanje PWM perioda za LED-ice
led1.period(0.001); // 1 ms period (1 kHz frekvencija)
led2.period(0.001);
led3.period(0.001);
// Povezivanje prekida sa funkcijama
taster_naprijed.rise(&promijeni_na_naprijed);
taster_nazad.rise(&promijeni_na_nazad);
while (1) {
// Očitaj vrijednost sa potenciometra
float vrijednost_potenciometra = potenciometar.read(); // Vrijednost između 0.0 i 1.0
// Postavi svjetlost trenutne LED-ice
if (trenutna_led == 1) {
postavi_svjetlost_led(led1, vrijednost_potenciometra);
} else if (trenutna_led == 2) {
postavi_svjetlost_led(led2, vrijednost_potenciometra);
} else if (trenutna_led == 3) {
postavi_svjetlost_led(led3, vrijednost_potenciometra);
}
wait_us(10000); // Kratka pauza od 10 ms
}
}