LV4_tim008_Z01 Sumejja Porča

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, char value, int decimal_point)
00026 { 
00027  if(value >= '0' && value <= '9')
00028 // Preslikavanje vrijednosti broja u kod
00029 segments = lookup[value - '0'];
00030  
00031 else 
00032 segments = 0xff;
00033  
00034 // DP je spojen na dp4
00035 dec_p = !(decimal_point & (1 << 0));
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[2]  = 1;
00055 displays[2]  = 1;
00056 displays[2]  = 0;
00057 break;
00058 }
00059 }
00060 
00061 int main()
00062 {
00063 // Varijabla koja ce reci koji display je trenutno aktivan (ima vrijednosti od 2 do 4)
00064 int index = 2;
00065 
00066 float value, old_value(3.3 * ain);
00067 // Vrijednosti na pojedinim displayjima:
00068 char d2 = 'N', d3 = 'N', d4 = 'N';
00069  
00070 while (true)
00071 {
00072 // Pisanje cifara na display
00073 switch (index)
00074 {
00075 case 2:
00076 write_segment(index, d2, 0);
00077 break;
00078 
00079 case 3:
00080 write_segment(index, d3, 0);
00081 break;
00082 case 4:
00083 write_segment(index, d4, 1);
00084 break;
00085 }
00086 // 1 ms cekanje
00087 // Ako je pauza izmedju pojedinih pisanja 1ms to znaci da je za 3 displaya potrebno 3ms
00088 // Sto ispadne 1s / 3ms = 333.33 osvjezavanja u sekundi
00089 wait(0.001);
00090  
00091 value = 3.3 * ain;
00092  
00093 if (value != old_value )
00094 { 
00095 d4 = int(value);
00096  
00097 d3 = int((value - int(value))*10);
00098  
00099 d2 = int(((value*10) - int(value*10))*10) ;
00100 }
00101  
00102 
00103 old_value = value;
00104 // Prelazimo na iduci display
00105 index++;
00106 if (index == 5)
00107 index = 2;
00108 }
00109 return 0;
00110 }
00111