TVZ2021 / Mbed OS generator_zvuka

Dependencies:   scale

Committer:
dhaldek
Date:
Fri Dec 17 11:46:06 2021 +0000
Revision:
0:14905a591b02
Generator zvuka promjenjive frekvencije

Who changed what in which revision?

UserRevisionLine numberNew 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 }