Tarik Demirović, Enil Pajić

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 DigitalOut ENBL = dp14;
00003 BusOut bDISP (dp23, dp24, dp25);
00004 BusOut dDISP[3] = {dp23, dp24, dp25};
00005  
00006 BusOut bDIGIT(dp2, dp1, dp28, dp6, dp5, dp27, dp26); // (dp26, dp27, dp5, dp6, dp28, dp1, dp2);
00007 DigitalOut dDIGIT[7] = {dp2, dp1, dp28, dp6, dp5, dp27, dp26};
00008 DigitalOut DECP (dp4);
00009 DigitalOut eA(dp26), eB(dp27), eC(dp5), eD(dp6), eE(dp28), eF(dp1), eG(dp2);
00010  
00011 typedef unsigned long T;
00012 template <T N>
00013 class eBIN
00014     {
00015     public: 
00016         enum {VAL = (N % 8) + (eBIN<N/8>::VAL << 1)};
00017     };
00018 template <>
00019 class eBIN<0>
00020     {
00021     public:
00022         enum {VAL = 0};
00023     };
00024 #define BIN(N) eBIN<0##N>::VAL
00025  
00026 enum Keys {N0, N1, N2, N3, N4, N5, N6, N7, N8, N9, A, B, C, D, Star, Hash, None = -1};
00027 enum Diodes {D1 = 6, D2 = 5, D3 = 3};
00028 void Display (Keys Key, Diodes Diode, bool DisplayPoint)
00029     {
00030         if (Key == None) return;
00031         
00032         DECP = DisplayPoint ? 0 : 1;
00033         switch (Key)
00034             {
00035                 case N0:
00036                     bDIGIT = BIN(0000001); //1
00037                     break;
00038                 case N1:
00039                     bDIGIT = BIN(1001111); //79
00040                     break;
00041                 case N2:
00042                     bDIGIT = BIN(0010010); //18
00043                     break;
00044                 case N3:
00045                     bDIGIT = BIN(0000110); //6
00046                     break;
00047                 case N4:
00048                     bDIGIT = BIN(1001100); //76
00049                     break;
00050                 case N5:
00051                     bDIGIT = BIN(0100100); //36
00052                     break;
00053                 case N6:
00054                     bDIGIT = BIN(0100000); //32
00055                     break;
00056                 case N7:
00057                     bDIGIT = BIN(0001111); //15
00058                     break;
00059                 case N8:
00060                     bDIGIT = BIN(0000000); //0
00061                     break;
00062                 case N9:
00063                     bDIGIT = BIN(0000100); //4
00064                     break;
00065                 case A:
00066                     bDIGIT = BIN(0001000); //A //8
00067                     break;
00068                 case B:
00069                     bDIGIT = BIN(1100000); //b //96
00070                     break;
00071                 case C:
00072                     bDIGIT = BIN(1110010); //c //114
00073                     break;
00074                 case D:
00075                     bDIGIT = BIN(0000010); //d //2
00076                     break;
00077                 case Star:
00078                     //xD ovo je 'e' slovo. Za gornje 'o' slovo je 0011100, za 'u' je 1100011 a za donje 'o' je 1100010
00079                     bDIGIT = BIN(0010000); // 16 //za 'P' = 0011000
00080                     break;
00081                 case Hash:
00082                     bDIGIT = BIN(1001000); //slovo H kao HASH :D //72
00083                     break;
00084                 case None:
00085                     bDIGIT = BIN(1111111); //127
00086                     break;
00087             }
00088             bDISP = (int)Diode;
00089         
00090     } 
00091 void DisplayKeys (Keys K1, Keys K2, Keys K3, unsigned int Point, int DelayMS = 10)
00092     {
00093         Display (K1, D1, Point == 1);
00094         if (K1 != None) wait_ms (DelayMS);
00095         Display (K2, D2, Point == 2);
00096         if (K2 != None) wait_ms (DelayMS);
00097         Display (K3, D3, Point == 3);
00098         if (K3 != None) wait_ms (DelayMS);
00099     }
00100 double Zaokruzi (double broj) //Na 2 dec
00101     {
00102         return double(int(broj * 100.0 + .5) / 100.0);
00103     }
00104 double Zaokruzi2 (double broj) //Na 3 dec
00105     {
00106         return double(int(broj * 1000.0 + .5) / 1000.0);
00107     }
00108 void DajCifre (double N, int &Cio, int &PrvaDec, int &DrugaDec) //broj u #.## formatu
00109     {
00110         double dec = (N - (int)N);
00111         dec = Zaokruzi(dec * 100.);
00112         DrugaDec = (int)dec % 10;
00113         PrvaDec = ((int)dec / 10) % 10;
00114         Cio = (int)N;
00115     }
00116 
00117 void DajCifre (double N, int &Cio, int &PrvaDec, int &DrugaDec, int &TrecaDec) //broj u #.### formatu
00118     {
00119         double dec = (N - (int)N);
00120         dec = Zaokruzi2(dec * 1000.);
00121         TrecaDec = (int)dec % 10;
00122         DrugaDec = ((int)dec / 10) % 10;
00123         PrvaDec = ((int)dec / 100) % 10;
00124         Cio = (int)N;
00125     }
00126 AnalogIn aIN (dp9);
00127 //LV4-Grupa1-Tim003-Zadatak2
00128 int main() { //Zadatak 1.
00129     ENBL = 1; //Provjeri
00130     int C = 0, PD = 0, DD = 0, b = 0;
00131     double Napon = 0.;
00132     while(1) 
00133         {
00134             if (b == 500) {Napon = 1. - aIN ; b = 0;}
00135             b++;
00136             DajCifre (Napon < 0 ? -Napon : Napon, C, PD, DD);
00137             DisplayKeys ((Keys)C, (Keys)PD, (Keys)DD, 0, 1);
00138             //wait (0.2);
00139         }
00140     }
00141 int main_2()
00142     {
00143         
00144     }