Marko Spremic 2020/0066 Test2
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Wed Jul 13 2022 03:25:39 by
1.7.2