interface PI
Dependencies: mbed LCD_DISCO_F469NI TS_DISCO_F469NI F469_GUI BSP_DISCO_F469NI
main.cpp@3:273047c393bd, 2020-10-19 (annotated)
- Committer:
- zigdrix
- Date:
- Mon Oct 19 22:18:46 2020 +0000
- Revision:
- 3:273047c393bd
- Parent:
- 2:7002787e2ab1
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
inkiiin | 0:0a8891401c4f | 1 | #include "mbed.h" |
inkiiin | 0:0a8891401c4f | 2 | #include "stm32469i_discovery.h" |
inkiiin | 0:0a8891401c4f | 3 | #include "TS_DISCO_F469NI.h" |
inkiiin | 0:0a8891401c4f | 4 | #include "LCD_DISCO_F469NI.h" |
inkiiin | 0:0a8891401c4f | 5 | #include "F469_GUI.hpp" |
zigdrix | 3:273047c393bd | 6 | #include "math.h" |
inkiiin | 0:0a8891401c4f | 7 | |
zigdrix | 2:7002787e2ab1 | 8 | //#define TIME // Time for toggle the LED (seconds) |
zigdrix | 3:273047c393bd | 9 | #define Num 20000 |
zigdrix | 3:273047c393bd | 10 | #define Resolucao 4095 |
zigdrix | 1:450d80728151 | 11 | |
zigdrix | 1:450d80728151 | 12 | Timeout timeout; // Create the Timeout object |
zigdrix | 3:273047c393bd | 13 | Timeout timeout2; |
zigdrix | 3:273047c393bd | 14 | Timeout timeout3; |
zigdrix | 3:273047c393bd | 15 | Timeout timeout4; |
zigdrix | 3:273047c393bd | 16 | Timeout timeout5; |
zigdrix | 3:273047c393bd | 17 | Timeout timeout6; |
zigdrix | 3:273047c393bd | 18 | DigitalOut ports[] = {(D0),(D1),(D2),(D3),(D4),(D5),(D6),(D7),(D8),(D9),(D10),(D11)}; |
zigdrix | 3:273047c393bd | 19 | AnalogIn analog_value(A0); |
zigdrix | 3:273047c393bd | 20 | //DigitalOut toogle(D14); |
zigdrix | 1:450d80728151 | 21 | |
zigdrix | 1:450d80728151 | 22 | |
zigdrix | 3:273047c393bd | 23 | //float h[50]={0.00013664,0.0031434,-0.0011824,-0.01819,0.0050009,0.03851,-0.0087039,-0.027769,0.0011091,-0.022893,0.014935,0.042351,-0.0081599,0.017305,-0.024729,-0.057635,0.017887,-0.021015,0.048111,0.090766,-0.038671,0.046058,-0.15008,-0.29325,0.34694,0.34694,-0.29325,-0.15008,0.046058,-0.038671,0.090766,0.048111,-0.021015,0.017887,-0.057635,-0.024729,0.017305,-0.0081599,0.042351,0.014935,-0.022893,0.0011091,-0.027769,-0.0087039,0.03851,0.0050009,-0.01819,-0.0011824,0.0031434,0.00013664 |
zigdrix | 3:273047c393bd | 24 | //}; |
zigdrix | 3:273047c393bd | 25 | float h[151]={ 0.00085858,-0.00042606,-0.0015497,0.0025922,-0.0012627,-0.0045709,0.0045298,0.0016832,-0.00021682,0.0032086,-0.005761,-0.001845,8.275e-05,-0.0026711,0.006908,0.0011507,0.0014115,0.0022169,-0.0076429,-0.00025806,-0.0040655,-0.0013819,0.0072834,-0.00032939,0.0073833,9.7708e-05,-0.0052098,7.8399e-05,-0.010456,0.0012451,0.0012081,0.0013649,0.0121,-0.0018408,0.0042649,-0.0038654,-0.011222,0.00072002,-0.010022,0.0065729,0.0072796,0.0027994,0.014384,-0.0079399,-0.00066081,-0.0085907,-0.015693,0.0060706,-0.0072193,0.015325,0.012945,0.00065311,0.014214,-0.020385,-0.0062987,-0.01286,-0.018089,0.020111,-0.0027722,0.029675,0.017308,-0.010075,0.011812,-0.048643,-0.011664,-0.015803,-0.018126,0.066211,0.0024952,0.0736,0.019681,-0.078652,0.0076586,-0.30679,-0.015847,0.58315,-0.015847,-0.30679,0.0076586,-0.078652,0.019681,0.0736,0.0024952,0.066211,-0.018126,-0.015803,-0.011664,-0.048643,0.011812,-0.010075,0.017308,0.029675,-0.0027722,0.020111,-0.018089,-0.01286,-0.0062987,-0.020385,0.014214,0.00065311,0.012945,0.015325,-0.0072193,0.0060706,-0.015693,-0.0085907,-0.00066081,-0.0079399,0.014384,0.0027994,0.0072796,0.0065729,-0.010022,0.00072002,-0.011222,-0.0038654,0.0042649,-0.0018408,0.0121,0.0013649,0.0012081,0.0012451,-0.010456,7.8399e-05,-0.0052098,9.7708e-05,0.0073833,-0.00032939,0.0072834,-0.0013819,-0.0040655,-0.00025806,-0.0076429,0.0022169,0.0014115,0.0011507,0.006908,-0.0026711,8.275e-05,-0.001845,-0.005761,0.0032086,-0.00021682,0.0016832,0.0045298,-0.0045709,-0.0012627,0.0025922,-0.0015497,-0.00042606,0.00085858 |
zigdrix | 3:273047c393bd | 26 | }; |
zigdrix | 3:273047c393bd | 27 | //float h[41]={ 0.0013777,-0.0041524,0.0044975,0.018256,-0.027017,-0.02849,0.036046,0.010033,0.011027,0.020938,-0.059537,-0.015841,-0.0016861,-0.017589,0.10377,0.017077,-0.0031668,0.016809,-0.31751,-0.017002,0.50469,-0.017002,-0.31751,0.016809,-0.0031668,0.017077,0.10377,-0.017589,-0.0016861,-0.015841,-0.059537,0.020938,0.011027,0.010033,0.036046,-0.02849,-0.027017,0.018256,0.0044975,-0.0041524,0.0013777 |
zigdrix | 3:273047c393bd | 28 | //}; |
zigdrix | 3:273047c393bd | 29 | char desligado=0; |
zigdrix | 3:273047c393bd | 30 | int efeito=1; |
zigdrix | 3:273047c393bd | 31 | int escolha_anterior=-1; |
zigdrix | 3:273047c393bd | 32 | //1-Sem efeito |
zigdrix | 3:273047c393bd | 33 | //2-Robo |
zigdrix | 3:273047c393bd | 34 | //3-Reverb |
zigdrix | 3:273047c393bd | 35 | //4-Chorus |
zigdrix | 3:273047c393bd | 36 | //5-Distorcao |
zigdrix | 3:273047c393bd | 37 | //6-Radio |
zigdrix | 3:273047c393bd | 38 | int Numero_Amostras=50000; |
zigdrix | 3:273047c393bd | 39 | int amostra_atual=0; |
zigdrix | 3:273047c393bd | 40 | int reproducao_atual=0; |
zigdrix | 3:273047c393bd | 41 | int chorus1_atual=0; |
zigdrix | 3:273047c393bd | 42 | int chorus2_atual=0; |
zigdrix | 3:273047c393bd | 43 | int chorus3_atual=0; |
zigdrix | 3:273047c393bd | 44 | float TIME=0.000025,x;//20Khz |
zigdrix | 3:273047c393bd | 45 | uint16_t Leitura_som[Num]; |
zigdrix | 3:273047c393bd | 46 | uint16_t Leitura_som_sub[Num]; |
zigdrix | 3:273047c393bd | 47 | uint16_t Reproducao_som[Num]; |
zigdrix | 3:273047c393bd | 48 | uint16_t aux_radio[Num]; |
zigdrix | 3:273047c393bd | 49 | uint16_t chorus1val[Num]; |
zigdrix | 3:273047c393bd | 50 | uint16_t chorus2val[Num]; |
zigdrix | 3:273047c393bd | 51 | uint16_t chorus3val[Num]; |
zigdrix | 1:450d80728151 | 52 | |
zigdrix | 3:273047c393bd | 53 | |
zigdrix | 3:273047c393bd | 54 | char configura=1; |
zigdrix | 3:273047c393bd | 55 | const int NUMBER_BUTTONS = 7; //Número de botões |
zigdrix | 3:273047c393bd | 56 | const string STR1[NUMBER_BUTTONS] = {"OFF","Pass","Robo","Rev","Chor","Dist","Rad"}; //string que vai nos botões |
zigdrix | 1:450d80728151 | 57 | //cria botão na tela,(inicio em x, inicio em Y, largura do botão, altura do botão, número de botões |
zigdrix | 1:450d80728151 | 58 | // nome do botão,distãncia dos botões em x, distãncia dos botões em y, número de colunas, |
zigdrix | 1:450d80728151 | 59 | // número de colunas, número de linhas, fonte do texto, cor do texto, cores dos estados do botão) |
zigdrix | 3:273047c393bd | 60 | ButtonGroup bGroup1(30, 90, 80, 80, NUMBER_BUTTONS, STR1, 20, 20, 7, 1,Font24, LCD_COLOR_WHITE, 0xFF003538, 0xFFB70068, 0xFFFF7FFF); |
zigdrix | 3:273047c393bd | 61 | Label bTouch(150, 280, Label::LEFT, Font24, LCD_COLOR_MAGENTA); |
zigdrix | 3:273047c393bd | 62 | |
zigdrix | 3:273047c393bd | 63 | |
zigdrix | 3:273047c393bd | 64 | void Escolha(void); |
zigdrix | 3:273047c393bd | 65 | void Captura_som(void); |
zigdrix | 3:273047c393bd | 66 | void Reproduz_som(void); |
zigdrix | 3:273047c393bd | 67 | void escreve_valor_digital_12bits(uint16_t valor); |
zigdrix | 3:273047c393bd | 68 | void chorus1(void); |
zigdrix | 3:273047c393bd | 69 | void chorus2(void); |
zigdrix | 3:273047c393bd | 70 | void chorus3(void); |
zigdrix | 3:273047c393bd | 71 | |
zigdrix | 3:273047c393bd | 72 | |
zigdrix | 3:273047c393bd | 73 | |
zigdrix | 3:273047c393bd | 74 | |
zigdrix | 3:273047c393bd | 75 | int main() |
zigdrix | 3:273047c393bd | 76 | { |
zigdrix | 3:273047c393bd | 77 | timeout3.attach(&Escolha, 0.01); |
zigdrix | 3:273047c393bd | 78 | timeout.attach(&Captura_som, TIME); // Set again the timer timeout for next iterations |
zigdrix | 3:273047c393bd | 79 | while (true) |
zigdrix | 3:273047c393bd | 80 | { |
zigdrix | 3:273047c393bd | 81 | |
zigdrix | 3:273047c393bd | 82 | } |
zigdrix | 3:273047c393bd | 83 | } |
zigdrix | 3:273047c393bd | 84 | |
zigdrix | 3:273047c393bd | 85 | void Captura_som() |
zigdrix | 3:273047c393bd | 86 | { |
zigdrix | 3:273047c393bd | 87 | int i,j; |
zigdrix | 3:273047c393bd | 88 | float acc1,acc2; |
zigdrix | 3:273047c393bd | 89 | if(efeito!=6){ |
zigdrix | 3:273047c393bd | 90 | Leitura_som[amostra_atual] = ((analog_value.read()*Resolucao)); |
zigdrix | 3:273047c393bd | 91 | Reproducao_som[amostra_atual]=Leitura_som[amostra_atual]; |
zigdrix | 3:273047c393bd | 92 | amostra_atual++; |
zigdrix | 3:273047c393bd | 93 | if(amostra_atual==Numero_Amostras){ |
zigdrix | 3:273047c393bd | 94 | amostra_atual=0; |
zigdrix | 3:273047c393bd | 95 | if(efeito!=4)timeout2.attach(&Reproduz_som, TIME); |
zigdrix | 3:273047c393bd | 96 | } |
zigdrix | 3:273047c393bd | 97 | if(efeito==4)timeout2.attach(&Reproduz_som, TIME); |
zigdrix | 3:273047c393bd | 98 | |
zigdrix | 3:273047c393bd | 99 | if(desligado==0)timeout.attach(&Captura_som, TIME); // Set again the timer timeout for next iterations |
zigdrix | 3:273047c393bd | 100 | } |
zigdrix | 3:273047c393bd | 101 | else{ |
zigdrix | 3:273047c393bd | 102 | timeout.attach(&Captura_som, TIME); |
zigdrix | 3:273047c393bd | 103 | acc1=0; |
zigdrix | 3:273047c393bd | 104 | for(j=0;j<151;j++){ |
zigdrix | 3:273047c393bd | 105 | acc1=acc1+h[j]*Leitura_som[j]; |
zigdrix | 3:273047c393bd | 106 | } |
zigdrix | 3:273047c393bd | 107 | |
zigdrix | 3:273047c393bd | 108 | escreve_valor_digital_12bits((uint16_t)acc1*3); |
zigdrix | 3:273047c393bd | 109 | i=0; |
zigdrix | 3:273047c393bd | 110 | while(i<151){ |
zigdrix | 3:273047c393bd | 111 | Leitura_som[i]=Leitura_som[i+1]; |
zigdrix | 3:273047c393bd | 112 | i++; |
inkiiin | 0:0a8891401c4f | 113 | } |
zigdrix | 3:273047c393bd | 114 | //for(i=0;i<50;i++) Leitura_som[i]=Leitura_som[i+1]; |
zigdrix | 3:273047c393bd | 115 | Leitura_som[151] = ((analog_value.read()*Resolucao)); |
zigdrix | 3:273047c393bd | 116 | //if(amostra_atual==Numero_Amostras)amostra_atual=0; |
inkiiin | 0:0a8891401c4f | 117 | } |
inkiiin | 0:0a8891401c4f | 118 | } |
zigdrix | 3:273047c393bd | 119 | |
zigdrix | 3:273047c393bd | 120 | void Reproduz_som() |
zigdrix | 3:273047c393bd | 121 | { |
zigdrix | 3:273047c393bd | 122 | if(efeito==5){ |
zigdrix | 3:273047c393bd | 123 | if(Reproducao_som[reproducao_atual]>2000)Reproducao_som[reproducao_atual]=2000; |
zigdrix | 3:273047c393bd | 124 | } |
zigdrix | 3:273047c393bd | 125 | if(efeito==4){ |
zigdrix | 3:273047c393bd | 126 | chorus1val[reproducao_atual]=Reproducao_som[reproducao_atual]; |
zigdrix | 3:273047c393bd | 127 | if(reproducao_atual==(1000))timeout4.attach(&chorus1, TIME); |
zigdrix | 3:273047c393bd | 128 | } |
zigdrix | 3:273047c393bd | 129 | escreve_valor_digital_12bits((uint16_t)Reproducao_som[reproducao_atual]); |
zigdrix | 3:273047c393bd | 130 | reproducao_atual++; |
zigdrix | 3:273047c393bd | 131 | if(reproducao_atual==Numero_Amostras) reproducao_atual=0; |
zigdrix | 3:273047c393bd | 132 | else if(efeito==2)timeout2.attach(&Reproduz_som, TIME/200); |
zigdrix | 3:273047c393bd | 133 | //else if(efeito==6)timeout2.attach(&Reproduz_som, TIME); |
zigdrix | 3:273047c393bd | 134 | else timeout2.attach(&Reproduz_som, TIME); |
zigdrix | 3:273047c393bd | 135 | |
zigdrix | 3:273047c393bd | 136 | } |
zigdrix | 3:273047c393bd | 137 | |
zigdrix | 3:273047c393bd | 138 | void chorus1(void){ |
zigdrix | 3:273047c393bd | 139 | if(efeito==4){ |
zigdrix | 3:273047c393bd | 140 | if(chorus1_atual==2000)timeout5.attach(&chorus2, TIME); |
zigdrix | 3:273047c393bd | 141 | chorus2val[chorus1_atual]=chorus1val[chorus1_atual]; |
zigdrix | 3:273047c393bd | 142 | escreve_valor_digital_12bits((uint16_t)chorus1val[chorus1_atual]); |
zigdrix | 3:273047c393bd | 143 | chorus1_atual++; |
zigdrix | 3:273047c393bd | 144 | if(chorus1_atual==Numero_Amostras)chorus1_atual=0; |
zigdrix | 3:273047c393bd | 145 | else timeout4.attach(&chorus1, TIME); |
zigdrix | 3:273047c393bd | 146 | } |
zigdrix | 3:273047c393bd | 147 | } |
zigdrix | 3:273047c393bd | 148 | void chorus2(void){ |
zigdrix | 3:273047c393bd | 149 | if(efeito==4){ |
zigdrix | 3:273047c393bd | 150 | if(chorus2_atual==3000)timeout6.attach(&chorus3, TIME); |
zigdrix | 3:273047c393bd | 151 | chorus3val[chorus2_atual]=chorus2val[chorus2_atual]; |
zigdrix | 3:273047c393bd | 152 | escreve_valor_digital_12bits((uint16_t)chorus2val[chorus2_atual]); |
zigdrix | 3:273047c393bd | 153 | chorus2_atual++; |
zigdrix | 3:273047c393bd | 154 | if(chorus2_atual==Numero_Amostras)chorus2_atual=0; |
zigdrix | 3:273047c393bd | 155 | else timeout5.attach(&chorus2, TIME); |
zigdrix | 3:273047c393bd | 156 | } |
zigdrix | 3:273047c393bd | 157 | } |
zigdrix | 3:273047c393bd | 158 | void chorus3(void){ |
zigdrix | 3:273047c393bd | 159 | if(efeito==4){ |
zigdrix | 3:273047c393bd | 160 | escreve_valor_digital_12bits((uint16_t)chorus3val[chorus3_atual]); |
zigdrix | 3:273047c393bd | 161 | chorus3_atual++; |
zigdrix | 3:273047c393bd | 162 | if(chorus3_atual==Numero_Amostras)chorus3_atual=0; |
zigdrix | 3:273047c393bd | 163 | else timeout6.attach(&chorus3, TIME); |
zigdrix | 3:273047c393bd | 164 | } |
zigdrix | 3:273047c393bd | 165 | } |
zigdrix | 3:273047c393bd | 166 | |
zigdrix | 3:273047c393bd | 167 | |
zigdrix | 3:273047c393bd | 168 | void escreve_valor_digital_12bits(uint16_t valor){ |
zigdrix | 3:273047c393bd | 169 | int cont=0; |
zigdrix | 3:273047c393bd | 170 | for(cont=0;cont<12;cont++){ |
zigdrix | 3:273047c393bd | 171 | ports[cont]=valor & (1<<cont); |
zigdrix | 3:273047c393bd | 172 | } |
zigdrix | 3:273047c393bd | 173 | } |
zigdrix | 3:273047c393bd | 174 | |
zigdrix | 3:273047c393bd | 175 | void Escolha(void){ |
zigdrix | 3:273047c393bd | 176 | if (bGroup1.GetTouchedNumber(efeito)); |
zigdrix | 3:273047c393bd | 177 | if(escolha_anterior!=efeito){ |
zigdrix | 3:273047c393bd | 178 | escolha_anterior=efeito; |
zigdrix | 3:273047c393bd | 179 | amostra_atual=0; |
zigdrix | 3:273047c393bd | 180 | reproducao_atual=0; |
zigdrix | 3:273047c393bd | 181 | if(efeito==0){ |
zigdrix | 3:273047c393bd | 182 | bTouch.Draw("OFF"); |
zigdrix | 3:273047c393bd | 183 | desligado=1; |
zigdrix | 3:273047c393bd | 184 | } |
zigdrix | 3:273047c393bd | 185 | else if(efeito==1){ |
zigdrix | 3:273047c393bd | 186 | bTouch.Draw("SEM EFEITO"); |
zigdrix | 3:273047c393bd | 187 | Numero_Amostras=50; |
zigdrix | 3:273047c393bd | 188 | TIME=0.000025; |
zigdrix | 3:273047c393bd | 189 | } |
zigdrix | 3:273047c393bd | 190 | else if(efeito==2){ |
zigdrix | 3:273047c393bd | 191 | bTouch.Draw("Efeito: ROBO"); |
zigdrix | 3:273047c393bd | 192 | Numero_Amostras=50; |
zigdrix | 3:273047c393bd | 193 | TIME=0.000025; |
zigdrix | 3:273047c393bd | 194 | //TIME=0.0000005; |
zigdrix | 3:273047c393bd | 195 | } |
zigdrix | 3:273047c393bd | 196 | else if(efeito==3){ |
zigdrix | 3:273047c393bd | 197 | bTouch.Draw("Efeito: REVERB"); |
zigdrix | 3:273047c393bd | 198 | //Numero_Amostras=15000; |
zigdrix | 3:273047c393bd | 199 | //TIME=0.000025; |
zigdrix | 3:273047c393bd | 200 | TIME=0.000025; |
zigdrix | 3:273047c393bd | 201 | Numero_Amostras=8000; |
zigdrix | 3:273047c393bd | 202 | } |
zigdrix | 3:273047c393bd | 203 | else if(efeito==4){ |
zigdrix | 3:273047c393bd | 204 | bTouch.Draw("Efeito: CHORUS"); |
zigdrix | 3:273047c393bd | 205 | TIME=0.000025; |
zigdrix | 3:273047c393bd | 206 | Numero_Amostras=5000; |
zigdrix | 3:273047c393bd | 207 | } |
zigdrix | 3:273047c393bd | 208 | else if(efeito==5){ |
zigdrix | 3:273047c393bd | 209 | bTouch.Draw("Efeito: DISTORCAO"); |
zigdrix | 3:273047c393bd | 210 | TIME=0.000025; |
zigdrix | 3:273047c393bd | 211 | Numero_Amostras=50; |
zigdrix | 3:273047c393bd | 212 | } |
zigdrix | 3:273047c393bd | 213 | else if(efeito==6){ |
zigdrix | 3:273047c393bd | 214 | bTouch.Draw("Efeito: RADIO"); |
zigdrix | 3:273047c393bd | 215 | TIME=0.0001; |
zigdrix | 3:273047c393bd | 216 | Numero_Amostras=50; |
zigdrix | 3:273047c393bd | 217 | } |
zigdrix | 3:273047c393bd | 218 | if(efeito!=0){ |
zigdrix | 3:273047c393bd | 219 | desligado=0; |
zigdrix | 3:273047c393bd | 220 | timeout.attach(&Captura_som, TIME); |
zigdrix | 3:273047c393bd | 221 | } |
zigdrix | 3:273047c393bd | 222 | } |
zigdrix | 3:273047c393bd | 223 | timeout3.attach(&Escolha, 1); |
zigdrix | 3:273047c393bd | 224 | |
zigdrix | 3:273047c393bd | 225 | } |
zigdrix | 1:450d80728151 | 226 |