Test 2 Dobrica Stosic 2019/0277

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }