interface PI

Dependencies:   mbed LCD_DISCO_F469NI TS_DISCO_F469NI F469_GUI BSP_DISCO_F469NI

main.cpp

Committer:
zigdrix
Date:
2020-10-19
Revision:
3:273047c393bd
Parent:
2:7002787e2ab1

File content as of revision 3:273047c393bd:

#include "mbed.h"
#include "stm32469i_discovery.h"
#include "TS_DISCO_F469NI.h"
#include "LCD_DISCO_F469NI.h"
#include "F469_GUI.hpp"
#include "math.h"

//#define TIME                              // Time for toggle the LED (seconds)
#define Num 20000
#define Resolucao   4095

Timeout timeout;                            // Create the Timeout object
Timeout timeout2;
Timeout timeout3;
Timeout timeout4;
Timeout timeout5;
Timeout timeout6;
DigitalOut ports[] = {(D0),(D1),(D2),(D3),(D4),(D5),(D6),(D7),(D8),(D9),(D10),(D11)};
AnalogIn analog_value(A0);
//DigitalOut toogle(D14);


//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
//};
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
};
//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
//};
char desligado=0;
int efeito=1;
int escolha_anterior=-1;
//1-Sem efeito
//2-Robo
//3-Reverb
//4-Chorus
//5-Distorcao
//6-Radio
int Numero_Amostras=50000;
int amostra_atual=0;
int reproducao_atual=0;
int chorus1_atual=0;
int chorus2_atual=0;
int chorus3_atual=0;
float TIME=0.000025,x;//20Khz
uint16_t Leitura_som[Num];
uint16_t Leitura_som_sub[Num];
uint16_t Reproducao_som[Num];
uint16_t aux_radio[Num];
uint16_t chorus1val[Num];
uint16_t chorus2val[Num];
uint16_t chorus3val[Num];


char configura=1;
const int NUMBER_BUTTONS = 7;   //Número de botões
const string STR1[NUMBER_BUTTONS] = {"OFF","Pass","Robo","Rev","Chor","Dist","Rad"};  //string que vai nos botões
    //cria botão na tela,(inicio em x, inicio em Y, largura do botão, altura do botão, número de botões
    //                    nome do botão,distãncia dos botões em x, distãncia dos botões em y, número de colunas,
    //                    número de colunas, número de linhas, fonte do texto, cor do texto, cores dos estados do botão)
ButtonGroup bGroup1(30, 90, 80, 80,  NUMBER_BUTTONS, STR1, 20, 20, 7, 1,Font24, LCD_COLOR_WHITE, 0xFF003538, 0xFFB70068, 0xFFFF7FFF);
Label bTouch(150, 280, Label::LEFT, Font24, LCD_COLOR_MAGENTA);


void Escolha(void);
void Captura_som(void);
void Reproduz_som(void);
void escreve_valor_digital_12bits(uint16_t valor);
void chorus1(void);
void chorus2(void);
void chorus3(void);




int main()
{  
    timeout3.attach(&Escolha, 0.01);
    timeout.attach(&Captura_som, TIME); // Set again the timer timeout for next iterations
    while (true)
    {
        
    }
}

void Captura_som()
{
    int i,j;
    float acc1,acc2;
    if(efeito!=6){
        Leitura_som[amostra_atual] = ((analog_value.read()*Resolucao));
        Reproducao_som[amostra_atual]=Leitura_som[amostra_atual];
        amostra_atual++;
        if(amostra_atual==Numero_Amostras){
            amostra_atual=0;
            if(efeito!=4)timeout2.attach(&Reproduz_som, TIME);
            }
            if(efeito==4)timeout2.attach(&Reproduz_som, TIME);
        
        if(desligado==0)timeout.attach(&Captura_som, TIME); // Set again the timer timeout for next iterations
    }
    else{
        timeout.attach(&Captura_som, TIME);
        acc1=0;
        for(j=0;j<151;j++){
                acc1=acc1+h[j]*Leitura_som[j];
            }
            
            escreve_valor_digital_12bits((uint16_t)acc1*3);
            i=0;
    while(i<151){
        Leitura_som[i]=Leitura_som[i+1];
        i++;
        }
    //for(i=0;i<50;i++) Leitura_som[i]=Leitura_som[i+1];
    Leitura_som[151] = ((analog_value.read()*Resolucao));
    //if(amostra_atual==Numero_Amostras)amostra_atual=0;
    }
}

void Reproduz_som()
{       
    if(efeito==5){
        if(Reproducao_som[reproducao_atual]>2000)Reproducao_som[reproducao_atual]=2000;
        }
    if(efeito==4){
        chorus1val[reproducao_atual]=Reproducao_som[reproducao_atual];
        if(reproducao_atual==(1000))timeout4.attach(&chorus1, TIME);
        }
    escreve_valor_digital_12bits((uint16_t)Reproducao_som[reproducao_atual]);
    reproducao_atual++;
    if(reproducao_atual==Numero_Amostras) reproducao_atual=0;
    else if(efeito==2)timeout2.attach(&Reproduz_som, TIME/200);
    //else if(efeito==6)timeout2.attach(&Reproduz_som, TIME);
    else timeout2.attach(&Reproduz_som, TIME);
    
}

void chorus1(void){
    if(efeito==4){
        if(chorus1_atual==2000)timeout5.attach(&chorus2, TIME);
        chorus2val[chorus1_atual]=chorus1val[chorus1_atual];
        escreve_valor_digital_12bits((uint16_t)chorus1val[chorus1_atual]);
        chorus1_atual++;
        if(chorus1_atual==Numero_Amostras)chorus1_atual=0;
        else timeout4.attach(&chorus1, TIME);
        }
    }
void chorus2(void){
    if(efeito==4){
        if(chorus2_atual==3000)timeout6.attach(&chorus3, TIME);
        chorus3val[chorus2_atual]=chorus2val[chorus2_atual];
        escreve_valor_digital_12bits((uint16_t)chorus2val[chorus2_atual]);
        chorus2_atual++;
        if(chorus2_atual==Numero_Amostras)chorus2_atual=0;
        else timeout5.attach(&chorus2, TIME);
        }
    }
void chorus3(void){
    if(efeito==4){
        escreve_valor_digital_12bits((uint16_t)chorus3val[chorus3_atual]);
        chorus3_atual++;
        if(chorus3_atual==Numero_Amostras)chorus3_atual=0;
        else timeout6.attach(&chorus3, TIME);
        }
    }


void escreve_valor_digital_12bits(uint16_t valor){
    int cont=0;
    for(cont=0;cont<12;cont++){
        ports[cont]=valor & (1<<cont);
    }
}

void Escolha(void){
    if (bGroup1.GetTouchedNumber(efeito));
    if(escolha_anterior!=efeito){
        escolha_anterior=efeito;
        amostra_atual=0;
        reproducao_atual=0;
    if(efeito==0){
        bTouch.Draw("OFF");
        desligado=1;
        }
    else if(efeito==1){
        bTouch.Draw("SEM EFEITO");
        Numero_Amostras=50;
        TIME=0.000025;
        }
    else if(efeito==2){
        bTouch.Draw("Efeito: ROBO");
        Numero_Amostras=50;
        TIME=0.000025;
        //TIME=0.0000005;
        }
    else if(efeito==3){
        bTouch.Draw("Efeito: REVERB");
        //Numero_Amostras=15000;
        //TIME=0.000025;
        TIME=0.000025;
        Numero_Amostras=8000;
        }
    else if(efeito==4){
        bTouch.Draw("Efeito: CHORUS");
        TIME=0.000025;
        Numero_Amostras=5000;
        }
    else if(efeito==5){
        bTouch.Draw("Efeito: DISTORCAO");
        TIME=0.000025;
        Numero_Amostras=50;
        }
    else if(efeito==6){
        bTouch.Draw("Efeito: RADIO");
        TIME=0.0001;
        Numero_Amostras=50;
        }
    if(efeito!=0){
        desligado=0;
        timeout.attach(&Captura_som, TIME);
        }
    }
    timeout3.attach(&Escolha, 1);
    
 }