Test 2 Dobrica Stosic 2019/0277
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* 00002 Prikazana vrednost ne odgovara onome sto se moze cuti. 00003 Predpostavka je da je tako zbog ispunjenosti perioda. 00004 Zvuk je ovde digitalan i razmenjuje vrednosti izmedju maksimalne i 0. 00005 Sto znaci da ce za visokofrekfentni talas (sa malom periodom) i sa velikim 00006 duty cycleom vise izgledati kao konstantna vrednost. Ovakva kostantna vrednost 00007 ne dovodi do primetnog talasanja vazduha. 00008 */ 00009 00010 00011 // Biblioteke 00012 #include<stdio.h> 00013 #include<math.h> 00014 #include"mbed.h" 00015 00016 // Definisanje makroa 00017 #define FREQ 19800 00018 00019 // Globalne promenjlive 00020 int temp = -1, pot1_value = -1; 00021 AnalogIn pot1(PA_0); 00022 AnalogIn pot2(PA_1); 00023 InterruptIn btn1(PC_9); 00024 PwmOut buzzer(PA_11); 00025 BusOut display(PA_10, PA_9, PA_8, PB_10, PB_5, PB_4, PB_3, PA_5); 00026 DigitalOut SEL1(PC_7); 00027 DigitalOut SEL2(PB_6); 00028 int num[10] = { 0b01000000, //0 00029 0b01111001, //1 00030 0b00100100, //2 00031 0b00110000, //3 00032 0b00011001, //4 00033 0b00010010, //5 00034 0b00000010, //6 00035 0b01111000, //7 00036 0b00000000, //8 00037 0b00010000}; //9 00038 00039 // Deklaracija funkcija 00040 void ISR_btn1(void); 00041 00042 // Glavni program 00043 int main() 00044 { 00045 // set up 00046 btn1.fall(&ISR_btn1); 00047 00048 buzzer.period( 1.0/( (FREQ*pot2.read()) + 200 ) ); 00049 buzzer.write(0.0); 00050 SEL1.write(1); 00051 SEL2.write(1); 00052 00053 // deo koda koji se iznova izvrsava 00054 while(true) 00055 { 00056 00057 buzzer.period( 1.0/( (FREQ*pot2.read()) + 200 ) ); 00058 buzzer.write(pot1.read()* 1.0); 00059 00060 pot1_value = pot1.read()*100; 00061 00062 if( abs( temp - pot1_value) > 5) 00063 { 00064 temp = -1; 00065 } 00066 00067 if(temp < 0) 00068 { 00069 SEL1.write(1); 00070 SEL2.write(1); 00071 wait_ms(10); 00072 } 00073 else 00074 { 00075 if(temp<10) 00076 { 00077 SEL2.write(1); 00078 SEL1.write(0); 00079 display.write(num[temp%10]); 00080 wait_ms(10); 00081 } 00082 else 00083 { 00084 SEL1.write(1); 00085 SEL2.write(0); 00086 display.write((num[(temp/10)%10])); 00087 00088 wait_ms(10); 00089 00090 SEL2.write(1); 00091 SEL1.write(0); 00092 display.write(num[temp%10]); 00093 00094 wait_ms(10); 00095 } 00096 } 00097 00098 00099 } 00100 } 00101 00102 // Definicija funkcija 00103 void ISR_btn1() 00104 { 00105 temp = (pot1.read()*100.0f); 00106 temp = temp%100; 00107 }
Generated on Wed Aug 24 2022 10:20:50 by
1.7.2