Sumejja Porča Hodžić Elmir
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 // 0 1 2 3 4 5 6 7 8 9 a b c d e * # 00003 char lookup[17] = { 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0x20, 0x03, 0x46, 0x21, 0x04, 0x09, 0x01}; 00004 DigitalOut displays[3] = { dp25, dp24, dp23}; 00005 DigitalOut dec_p = dp4; 00006 AnalogIn ain(dp9); 00007 00008 // Mapiranja su: 00009 // A - dp26 (bit 0) 00010 // B - dp27 (bit 1) 00011 // C - dp5 (bit 2) 00012 // D - dp6 (bit 3) 00013 // E - dp28 (bit 4) 00014 // F - dp1 (bit 5) 00015 // G - dp2 (bit 6) 00016 00017 BusOut segments (dp26, dp27, dp5, dp6, dp28, dp1, dp2); 00018 /* 00019 * Funkcija treba pisati na segment displaya, argumenti su: 00020 * index - kaze na koji display treba pisati (moguce vrijednosti su 2 do 4) 00021 * value - vrijednost koja se treba zapisati (moguce vrijednosti su cifre od 0 do 9) 00022 * decimal_point - vrijednost koja kaze da li treba decimalnu tacku osvijetliti (moguce vrijednosti su 00023 0 ili 1; 0 - iskljuceno, 1 - ukljuceno) 00024 */ 00025 void write_segment(int index, int value, int decimal_point) 00026 { 00027 if(value >= 0 && value <= 9) 00028 // Preslikavanje vrijednosti broja u kod 00029 segments = lookup[value]; 00030 00031 else 00032 segments = 0xff; 00033 00034 // DP je spojen na dp4 00035 dec_p = decimal_point; 00036 00037 // Aktiviramo odgovarajuci display 00038 // D2 je spojen na dp23 00039 // D3 je spojen na dp24 00040 // D4 je spojen na dp25 00041 switch (index) 00042 { 00043 case 2: 00044 displays[0] = 0; 00045 displays[1] = 1; 00046 displays[2] = 1; 00047 break; 00048 case 3: 00049 displays[0]= 1; 00050 displays[1] = 0; 00051 displays[2] = 1; 00052 break; 00053 case 4: 00054 displays[0] = 1; 00055 displays[1] = 1; 00056 displays[2] = 0; 00057 break; 00058 } 00059 } 00060 00061 int main() 00062 { 00063 int iteration_counter = 0; 00064 00065 // Varijabla koja ce reci koji display je trenutno aktivan (ima vrijednosti od 2 do 4) 00066 int index = 2; 00067 00068 float value, old_value(3.3 * ain); 00069 // Vrijednosti na pojedinim displayjima: 00070 char d2 = 'N', d3 = 'N', d4 = 'N'; 00071 00072 while (true) 00073 { 00074 iteration_counter ++; 00075 // Pisanje cifara na display 00076 switch (index) 00077 { 00078 case 2: 00079 write_segment(index, d2, 1); 00080 break; 00081 00082 case 3: 00083 write_segment(index, d3, 1); 00084 break; 00085 case 4: 00086 write_segment(index, d4, 0); 00087 break; 00088 } 00089 // 1 ms cekanje 00090 // Ako je pauza izmedju pojedinih pisanja 1ms to znaci da je za 3 displaya potrebno 3ms 00091 // Sto ispadne 1s / 3ms = 333.33 osvjezavanja u sekundi 00092 wait(0.001); 00093 00094 value = 3.3 * ain; 00095 00096 if (iteration_counter == 200) 00097 { 00098 d4 = int(value); 00099 00100 d3 = int((value - int(value))*10); 00101 00102 d2 = int(((value*10) - int(value*10))*10) ; 00103 00104 iteration_counter = 0; 00105 } 00106 00107 00108 // Prelazimo na iduci display 00109 index++; 00110 if (index == 5) 00111 index = 2; 00112 } 00113 return 0; 00114 }
Generated on Wed Jul 20 2022 18:16:59 by
1.7.2