#include "mbed.h"
// Definiši pinove za segmentne LED-ice i prekidače
DigitalOut D1(PTB18);
DigitalOut D2(PTB19);
DigitalOut D3(PTD1);
DigitalOut D4(PTD2);
DigitalOut A(PTA0);
DigitalOut B(PTA1);
DigitalOut C(PTA2);
DigitalOut D(PTA3);
DigitalOut E(PTA4);
DigitalOut F(PTA5);
DigitalOut G(PTA6);
DigitalOut DP(PTA7);
DigitalIn t1(PTB0);
DigitalIn t2(PTB1);
DigitalIn t3(PTB2);
DigitalIn t4(PTB3);
int counter = 0;
bool auto_mode = true;
// Funkcija za prikazivanje cifre na 7-segmentnom displeju
void readDigit(int digit) {
switch (digit) {
case 0:
A = 0; B = 0; C = 0; D = 0; E = 0; F = 0; G = 1; break;
case 1:
A = 1; B = 0; C = 0; D = 1; E = 1; F = 1; G = 1; break;
case 2:
A = 0; B = 0; C = 1; D = 0; E = 0; F = 1; G = 0; break;
case 3:
A = 0; B = 0; C = 0; D = 0; E = 1; F = 1; G = 0; break;
case 4:
A = 1; B = 0; C = 0; D = 0; E = 1; F = 0; G = 0; break;
case 5:
A = 0; B = 1; C = 0; D = 0; E = 1; F = 0; G = 0; break;
case 6:
A = 0; B = 1; C = 0; D = 0; E = 0; F = 0; G = 0; break;
case 7:
A = 0; B = 0; C = 0; D = 1; E = 1; F = 1; G = 1; break;
case 8:
A = 0; B = 0; C = 0; D = 0; E = 0; F = 0; G = 0; break;
case 9:
A = 0; B = 0; C = 0; D = 0; E = 1; F = 0; G = 0; break;
}
}
// Funkcija za prikaz broja na prvom displeju
void display1(int digit) {
D1 = 0;
D2 = 1;
D3 = 1;
D4 = 1;
readDigit(digit);
}
// Funkcija za prikaz broja na drugom displeju
void display2(int digit) {
D1 = 1;
D2 = 0;
D3 = 1;
D4 = 1;
readDigit(digit);
}
// Funkcija za prikaz broja na trećem displeju
void display3(int digit) {
D1 = 1;
D2 = 1;
D3 = 0;
D4 = 1;
readDigit(digit);
}
// Funkcija za prikaz broja na četvrtom displeju
void display4(int digit) {
D1 = 1;
D2 = 1;
D3 = 1;
D4 = 0;
readDigit(digit);
}
int main() {
// Inicijalizuj stanje prekidača
int t1_state = 0;
int t2_state = 0;
int t3_state = 0;
int t4_state = 0;
while (true) {
// Provjeri stanje t1
int t1_current = t1.read();
if (t1_current != t1_state) {
ThisThread::sleep_for(10ms);
t1_current = t1.read();
if (t1_current != t1_state) {
t1_state = t1_current;
if (t1_state == 1) {
counter += 1;
}
}
}
// Provjeri stanje t2
int t2_current = t2.read();
if (t2_current != t2_state) {
ThisThread::sleep_for(10ms);
t2_current = t2.read();
if (t2_current != t2_state) {
t2_state = t2_current;
if (t2_state == 1) {
counter -= 1;
}
}
}
// Provjeri stanje t3
int t3_current = t3.read();
if (t3_current != t3_state) {
ThisThread::sleep_for(10ms);
t3_current = t3.read();
if (t3_current != t3_state) {
t3_state = t3_current;
if (t3_state == 1) {
counter = 0;
}
}
}
// Provjeri stanje t4
int t4_current = t4.read();
if (t4_current != t4_state) {
ThisThread::sleep_for(10ms);
t4_current = t4.read();
if (t4_current != t4_state) {
t4_state = t4_current;
if (t4_state == 1) {
auto_mode = !auto_mode;
}
}
}
// Ako je automatski režim aktivan, povećaj broj
if (auto_mode) {
counter += 1;
}
// Prikaz broja na 7-segmentnom displeju
int digit1 = counter % 10;
int digit2 = (counter / 10) % 10;
int digit3 = (counter / 100) % 10;
int digit4 = (counter / 1000) % 10;
display1(digit1);
ThisThread::sleep_for(5ms);
display2(digit2);
ThisThread::sleep_for(5ms);
display3(digit3);
ThisThread::sleep_for(5ms);
display4(digit4);
ThisThread::sleep_for(5ms);
}
}