Sumejja Porča Hodžić Elmir

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }