Marko Spremic 2020/0066 Test2

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002  *Marko Spremic 
00003  *Indeks: 2020/0066
00004  *
00005  *To ne mora uvek da bude slucaj. Meni za 0 najjace svira zujalica, a za 99 najslabije dotovo da ne. 
00006  *Kada stavimo duty cycle na 10%, piezo ce biti distortovan 10% vremena, a 90% neaktivan. Oslcilaciona proporcija je niska.
00007  *Kada stavimo duty cycle na 50%, piezo ce biti distortovan pola vremena, a pola neaktivan. Oslcilaciona proporcija je visoka. Piezo osciluje na velikoj amplitudi, pola vremena, a pola vremena neaktivan.
00008  *Kada stavimo duty cycle na 90%, piezo ce biti distortovan 90% vremena, a 10% neaktivan. Oslcilaciona proporcija je niska, zato sto je razlika izmedju distorzije i neaktivnosti velika.
00009  *Iz toga najglasnija bi trebala da bude na 50%, pa da opada ka 100%, odnosno ka 0%.
00010  *Mada ovo sam uocio da zavisi i od frekvencije na kojoj se zvuk pusta. Ovo sam ja zakljucio nakon malo isprobavanja sa plocom, dok sam ovo iznad nasao na netu.
00011  */
00012 //Ukljucivanje biblioteka:
00013 #include "mbed.h"
00014  
00015 //Definisanje direktiva:
00016 #define time 8
00017  
00018   
00019 //Definisanje glavnih promenljivih:
00020 AnalogIn pot1(PA_0);
00021 AnalogIn pot2(PA_1);
00022 PwmOut buzz(PA_11);
00023 InterruptIn sw1(PC_13);
00024 InterruptIn sw2(PC_8);
00025 BusOut led_dis(PA_10, PA_9, PA_8, PB_10, PB_5, PB_4, PB_3, PA_2);
00026 DigitalOut SEL2(PC_7);
00027 DigitalOut SEL1(PB_6);
00028 
00029 //Globalne promenljive:
00030 char check = 0, check1 = 0;   
00031 
00032 //Definisanje pomocne funkcije:
00033 void ISR_sw2(void);
00034 void write_num(int broj);
00035 
00036  //Definisanje glavne funkcije:
00037 int main()
00038 {
00039     sw2.fall(&ISR_sw2);
00040     double pot1_vr = 0, pot2_vr = 0, period_buzz = 0; char x1 = -1, x2 = 0; int vr = 0;
00041     buzz.write(0);
00042     while(1)
00043     {
00044         //glavna petlja
00045         pot1_vr = pot1.read();
00046         pot2_vr = pot2.read();
00047         vr = (int)(pot1_vr*100);
00048         period_buzz = 50+4950*pot2_vr;
00049         buzz.write(pot1_vr);
00050         buzz.period_us(period_buzz);
00051         if(check&&check1)
00052         {
00053             //brojevi za prikazivanje
00054             x1 = (char)vr/10;
00055             x2 = (char)vr%10;    
00056             if(x1 == 0) x1 = -1;        
00057             check1 = 0;
00058         }
00059         /*else
00060         {
00061             x1 = -1;
00062             x2 = -1;
00063         }*/
00064         SEL2.write(1);
00065         SEL1.write(0);
00066         write_num(x1);
00067         wait_ms(time);
00068         
00069         SEL2.write(0);
00070         SEL1.write(1);
00071         write_num(x2);
00072         wait_ms(time); 
00073     }
00074 }
00075 //azuriranje displeja
00076 void ISR_sw2()
00077 {
00078     check = (check)? 0 : 1;
00079     check1 = 1;
00080 }
00081 //Ispisivanje broja na displeju
00082  void write_num(int broj)
00083  {
00084      switch(broj)
00085      {
00086          case 0: led_dis = 0xC0; break;
00087          case 1: led_dis = 0xF9; break;
00088          case 2: led_dis = 0xA4; break;
00089          case 3: led_dis = 0xB0; break;
00090          case 4: led_dis = 0x99; break;
00091          case 5: led_dis = 0x92; break;
00092          case 6: led_dis = 0x82; break;
00093          case 7: led_dis = 0xF8; break;
00094          case 8: led_dis = 0x80; break;
00095          case 9: led_dis = 0x90; break;
00096          default: led_dis = 0xFF;
00097      }
00098  }