Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: scale
main.cpp@0:14905a591b02, 2021-12-17 (annotated)
- Committer:
- dhaldek
- Date:
- Fri Dec 17 11:46:06 2021 +0000
- Revision:
- 0:14905a591b02
Generator zvuka promjenjive frekvencije
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dhaldek | 0:14905a591b02 | 1 | #include "mbed.h" |
dhaldek | 0:14905a591b02 | 2 | #include "scale.h" //Library za linearno skaliranje ulaza |
dhaldek | 0:14905a591b02 | 3 | |
dhaldek | 0:14905a591b02 | 4 | char SegConvert(char SegValue) { // funkcija 'SegConvert' za 7-segment display za brojanje jedinica |
dhaldek | 0:14905a591b02 | 5 | char SegByte=0x00; |
dhaldek | 0:14905a591b02 | 6 | switch (SegValue) { //Binarni zapis radi lakseg predocenja izlaza na displayu |
dhaldek | 0:14905a591b02 | 7 | case 0 : SegByte = 0b00111111;break; |
dhaldek | 0:14905a591b02 | 8 | case 1 : SegByte = 0b00000110;break; |
dhaldek | 0:14905a591b02 | 9 | case 2 : SegByte = 0b01011011;break; |
dhaldek | 0:14905a591b02 | 10 | case 3 : SegByte = 0b01001111;break; |
dhaldek | 0:14905a591b02 | 11 | case 4 : SegByte = 0b01100110;break; |
dhaldek | 0:14905a591b02 | 12 | case 5 : SegByte = 0b01101101;break; |
dhaldek | 0:14905a591b02 | 13 | case 6 : SegByte = 0b01111101;break; |
dhaldek | 0:14905a591b02 | 14 | case 7 : SegByte = 0b00000111;break; |
dhaldek | 0:14905a591b02 | 15 | case 8 : SegByte = 0b01111111;break; |
dhaldek | 0:14905a591b02 | 16 | case 9 : SegByte = 0b01101111;break; |
dhaldek | 0:14905a591b02 | 17 | } |
dhaldek | 0:14905a591b02 | 18 | return SegByte; //Vracanje odgovarajuce vrijednosti |
dhaldek | 0:14905a591b02 | 19 | } |
dhaldek | 0:14905a591b02 | 20 | |
dhaldek | 0:14905a591b02 | 21 | char LEDConvert(char LEDValue) { // funkcija 'SegConvert' za 3 LED diode za brojanje desetica |
dhaldek | 0:14905a591b02 | 22 | char LEDByte=0x00; |
dhaldek | 0:14905a591b02 | 23 | switch (LEDValue) { //Binarni zapis radi lakseg predocenja izlaza na LED diodama |
dhaldek | 0:14905a591b02 | 24 | case 0 : LEDByte = 0b00000000;break; |
dhaldek | 0:14905a591b02 | 25 | case 1 : LEDByte = 0b00000001;break; |
dhaldek | 0:14905a591b02 | 26 | case 2 : LEDByte = 0b00000011;break; |
dhaldek | 0:14905a591b02 | 27 | case 3 : LEDByte = 0b00000111;break; |
dhaldek | 0:14905a591b02 | 28 | } |
dhaldek | 0:14905a591b02 | 29 | return LEDByte; //Vracanje odgovarajuce vrijednosti |
dhaldek | 0:14905a591b02 | 30 | } |
dhaldek | 0:14905a591b02 | 31 | |
dhaldek | 0:14905a591b02 | 32 | float freq; //Varijabla tipa "float" za spremanje realnih vrijednosti iz varijale "pot" za kasniju obradu |
dhaldek | 0:14905a591b02 | 33 | int i; //Varijabla tipa "int" za kasniju pretvorbu iz float u integer varijable "freq"(float) u "i"(integer) |
dhaldek | 0:14905a591b02 | 34 | |
dhaldek | 0:14905a591b02 | 35 | DigitalIn zout(D15); //Digitalni ulaz, pritiskom tipkala na D15 generira se zvuk odredjene frekvencije |
dhaldek | 0:14905a591b02 | 36 | AnalogIn pot(A0); //Analogni ulaz potenciometra za namjestanje frekvencije zvuka |
dhaldek | 0:14905a591b02 | 37 | PwmOut zvuk(D10); //Digitalni izlaz PWM za generiranje zvuka na zvucniku |
dhaldek | 0:14905a591b02 | 38 | Ticker tocka; |
dhaldek | 0:14905a591b02 | 39 | DigitalOut tocka_led(D6); //Digitalni izlaz koji upravlja tockom na 7-segment displayu. Tocka treperi tijekom zvucnog signala |
dhaldek | 0:14905a591b02 | 40 | |
dhaldek | 0:14905a591b02 | 41 | void flip_tocka2(){ //Funkcija za invertiranje stanja LED diode tocke(DP) na 7-segment displayu |
dhaldek | 0:14905a591b02 | 42 | tocka_led=!tocka_led; //Invertiranje |
dhaldek | 0:14905a591b02 | 43 | } |
dhaldek | 0:14905a591b02 | 44 | void sviraj(){ //Funkcija koja prilikom izvrsavanja generira zvuk na zvucniku |
dhaldek | 0:14905a591b02 | 45 | zvuk=0.5; //Sirina periode signala od 50% |
dhaldek | 0:14905a591b02 | 46 | zvuk.period(1/(freq*100)); //Trajanje periode signala, frekvencija signala, x100 je iz razloga sto je korak namjestanja frekvencije 100 Hz |
dhaldek | 0:14905a591b02 | 47 | } |
dhaldek | 0:14905a591b02 | 48 | |
dhaldek | 0:14905a591b02 | 49 | BusOut Seg1(D3,D2,D7,D8,D9,D4,D5); //Redoslijed skupa izlaznih pinova za 7-segment display |
dhaldek | 0:14905a591b02 | 50 | BusOut LED(D11,D12,D13); //Redoslijed skupa izlaznih pinova za 3-LED diode |
dhaldek | 0:14905a591b02 | 51 | |
dhaldek | 0:14905a591b02 | 52 | int main() { //Glavni program |
dhaldek | 0:14905a591b02 | 53 | tocka_led=0; //Postavljanje tocke, GP LED diode na nulu |
dhaldek | 0:14905a591b02 | 54 | zout.mode(PullUp); //U mirovanju, pin zout(D15) je u stanju HIGH |
dhaldek | 0:14905a591b02 | 55 | |
dhaldek | 0:14905a591b02 | 56 | while (1) { //Trajno izvrsavanje programa do nestanka napajanja |
dhaldek | 0:14905a591b02 | 57 | freq=scale(pot, 0.0, 1.0, 1, 39); //Skaliranje ulaza prema potrebi, u ovom slucaju od 1 do 39, daje mogucnost generiranja zvuka od 100 Hz do 3900 Hz okretanjem potenciometra |
dhaldek | 0:14905a591b02 | 58 | i=freq; //Pretvorba iz float u integer |
dhaldek | 0:14905a591b02 | 59 | Seg1=SegConvert(i%10); //Zadnje dvije linije koda i ukljucujuci ovu su obrada vrijednosti potenciometra za prikaz jedinica na 7-segment displayu |
dhaldek | 0:14905a591b02 | 60 | LED=LEDConvert(i/10); //Predzadnje dvije linije koda i ukljucujuci ovu su obrada vrijednosti potenciometra za prikaz desetica na 3 LED diode |
dhaldek | 0:14905a591b02 | 61 | if(zout==0){ //Interrupt, pritiskom tipkala "zout"(D15) pocinje izvrsavanje koda za generiranje zvucnog signala |
dhaldek | 0:14905a591b02 | 62 | wait_us(50000); //Delay od 50ms zbog moguceg osciliranja stanja tipkala |
dhaldek | 0:14905a591b02 | 63 | tocka.attach(&flip_tocka2, 0.1); //Pokretanje tickera za invertiranje tocke GP LED diode na 7-segment displayu prilikom zvucnog signala |
dhaldek | 0:14905a591b02 | 64 | sviraj(); //Pokretanje funkcije za generiranje zvucnog signala |
dhaldek | 0:14905a591b02 | 65 | wait_us(3000000); //Delay od 3 sekunde koji odredjuje vrijeme zvucnog signala |
dhaldek | 0:14905a591b02 | 66 | tocka.detach(); //Iskljucenje tickera |
dhaldek | 0:14905a591b02 | 67 | tocka_led=0; //Postavljanje GP LED diode na nulu |
dhaldek | 0:14905a591b02 | 68 | zvuk=0; //Prestanak generiranja zvucnog signala |
dhaldek | 0:14905a591b02 | 69 | } |
dhaldek | 0:14905a591b02 | 70 | wait_us(100000); //Delay od 100ms u glavnom dijelu programa, vrijeme osvjezavanja promjene na displayu |
dhaldek | 0:14905a591b02 | 71 | } |
dhaldek | 0:14905a591b02 | 72 | } |