Nikola Aničić / Mbed 2 deprecated 19E042PIM_T2_2019_0099

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* 
00002  * Nikola Aničić 2019/0099 
00003  * ETF Beograd
00004  * napisano 06/11/2021
00005  */
00006  // Prilikom objave: Ime, Prezime, Broj indeksa (all caps)
00007  
00008  // Skinuti JP1 i JP2; JP3 mora da bude na mestu. 
00009  
00010  /*
00011   * Uvoz biblioteka
00012   */
00013   #include "mbed.h"
00014   
00015   /*
00016    * Definicije
00017    */
00018    #define POLLING_TIME 5 // Dva poliranja po promeni radi multipleksiranja displeja za T1
00019    #define INITIAL_WAIT 1
00020 
00021    #define FREQ_SCALE 5000
00022    
00023    #define ZERO 0xC0
00024    #define ONE 0xF9
00025    #define TWO 0xA4
00026    #define THREE 0xB0
00027    #define FOUR 0x99
00028    #define FIVE 0x92
00029    #define SIX 0x82
00030    #define SEVEN 0xF8
00031    #define EIGHT 0x80
00032    #define NINE 0x90
00033    
00034   /*
00035    * Globalne promenljive
00036    */
00037    
00038    // abcdefg = PA_10, PA_9, PA_8, PB_10, PB_5, PB_4, PB_3
00039    // SEL1 = PB_6
00040    // SEL2 = PC_7
00041    
00042    // FREQ je u opsegu {5 ms, 5 us}
00043    
00044    //               a     b      c     d     e      f    g     = gfedcba ; Na celu je DP uvek 1
00045    BusOut display(PA_10, PA_9, PA_8, PB_10, PB_5, PB_4, PB_3);
00046    DigitalOut SEL1 = PB_6;
00047    DigitalOut SEL2 = PC_7;
00048    
00049    AnalogIn POT1(PA_0);
00050    AnalogIn POT2(PA_1);
00051    
00052    PwmOut buzz (PA_11);
00053    
00054    InterruptIn SW1(PC_9);   // SW1
00055    //DigitalIn SW2(PC_8);     // SW2
00056 
00057    // static int tracker = 0;
00058    static bool showResult = 0;
00059    
00060    int sec_digit = 0;
00061    int prim_digit = 0;
00062    
00063   /*
00064    * Deklaracija funkcija
00065    */
00066    
00067    void ISR_SW1(void);
00068    
00069    int main() {
00070        // Inicijalizacija
00071        SEL2.write(1);
00072        SEL1.write(1);
00073        SW1.fall(&ISR_SW1);
00074        
00075        wait(INITIAL_WAIT);
00076        
00077        // Petlja
00078        while(true){
00079            
00080            float freq = POT2.read() * FREQ_SCALE + 30;
00081            
00082            buzz.period_us(freq);
00083            buzz.write(POT1.read()); 
00084            
00085            // Potenciometar 1 uopste ne reaguje na promene fizickog potenciometra.
00086            // Proverio sam za PA_0 zadatak Z2_02 i ocitavanje se slicno ne menja.
00087            
00088            // POT1 je proradio nakon dodatnog pritiska na plocu
00089            // kontakt izmedju ploce i maticne je ranije (pre vadjenja JP1 i 2) pravio probleme 
00090            // za povezanost displeja i zahtevao slicne mere.
00091            
00092            printf("\r%2.2f%% %.2f us", POT1.read()*100, freq);
00093            
00094            int curr_percentage = POT1.read()*100;
00095            
00096            
00097            if (showResult){
00098               
00099               sec_digit = curr_percentage/10;
00100               prim_digit = curr_percentage%10;
00101               
00102               showResult = 0;
00103             }
00104             
00105             
00106               SEL1.write(1);
00107               
00108               //ispis na displej
00109               switch (prim_digit){
00110                   case 0: 
00111                   
00112                   SEL2.write(0);
00113                   display.write(ZERO);
00114                   wait_ms(POLLING_TIME);
00115                   
00116                   break;
00117                   case 1: 
00118                   
00119                   SEL2.write(0);
00120                   display.write(ONE);
00121                   wait_ms(POLLING_TIME);
00122                   
00123                   break;
00124                   case 2: 
00125                   
00126                   SEL2.write(0);
00127                   display.write(TWO);
00128                   wait_ms(POLLING_TIME);
00129                   
00130                   break;
00131                   case 3: 
00132                   
00133                   SEL2.write(0);
00134                   display.write(THREE);
00135                   wait_ms(POLLING_TIME);
00136                   
00137                   break;
00138                   case 4: 
00139                   
00140                   SEL2.write(0);
00141                   display.write(FOUR);
00142                   wait_ms(POLLING_TIME);
00143                   
00144                   break;
00145                   case 5: 
00146                   
00147                   SEL2.write(0);
00148                   display.write(FIVE);
00149                   wait_ms(POLLING_TIME);
00150                   
00151                   break;
00152                   case 6: 
00153                   
00154                   SEL2.write(0);
00155                   display.write(SIX);
00156                   wait_ms(POLLING_TIME);
00157                   
00158                   break;
00159                   case 7: 
00160                   
00161                   SEL2.write(0);
00162                   display.write(SEVEN);
00163                   wait_ms(POLLING_TIME);
00164                   
00165                   break;
00166                   case 8: 
00167                   
00168                   SEL2.write(0);
00169                   display.write(EIGHT);
00170                   wait_ms(POLLING_TIME);
00171                   
00172                   break;
00173                   case 9: 
00174                   
00175                   SEL2.write(0);
00176                   display.write(NINE);
00177                   wait_ms(POLLING_TIME);
00178                   
00179                   break;
00180               }
00181               
00182               SEL2.write(1);
00183               
00184               switch (sec_digit){
00185                   case 0: 
00186                   
00187                   SEL1.write(1);
00188                   break;
00189                   case 1: 
00190                   
00191                   SEL1.write(0);
00192                   display.write(ONE);
00193                   wait_ms(POLLING_TIME);
00194                   
00195                   break;
00196                   case 2: 
00197                   
00198                   SEL1.write(0);
00199                   display.write(TWO);
00200                   wait_ms(POLLING_TIME);
00201                   
00202                   break;
00203                   case 3: 
00204                   
00205                   SEL1.write(0);
00206                   display.write(THREE);
00207                   wait_ms(POLLING_TIME);
00208                   
00209                   break;
00210                   case 4: 
00211                   
00212                   SEL1.write(0);
00213                   display.write(FOUR);
00214                   wait_ms(POLLING_TIME);
00215                   
00216                   break;
00217                   case 5: 
00218                   
00219                   SEL1.write(0);
00220                   display.write(FIVE);
00221                   wait_ms(POLLING_TIME);
00222                   
00223                   break;
00224                   case 6: 
00225                   
00226                   SEL1.write(0);
00227                   display.write(SIX);
00228                   wait_ms(POLLING_TIME);
00229                   
00230                   break;
00231                   case 7: 
00232                   
00233                   SEL1.write(0);
00234                   display.write(SEVEN);
00235                   wait_ms(POLLING_TIME);
00236                   
00237                   break;
00238                   case 8: 
00239                   
00240                   SEL1.write(0);
00241                   display.write(EIGHT);
00242                   wait_ms(POLLING_TIME);
00243                   
00244                   break;
00245                   case 9: 
00246                   
00247                   SEL1.write(0);
00248                   display.write(NINE);
00249                   wait_ms(POLLING_TIME);
00250                   
00251                   break;
00252               }
00253         }
00254     }
00255     
00256   /*
00257    * Funkcije
00258    */
00259    
00260    void ISR_SW1(){
00261       showResult = 1;
00262       //here 
00263     }
00264