FormazioneSitael / Mbed 2 deprecated SITAEL-TesysRail_Sine_FINALE

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TesysRail_Sine.cpp Source File

TesysRail_Sine.cpp

00001 #include "mbed.h"
00002 #define N 100
00003 
00004 
00005 // TEST DI GENERAZIONE SEGNALE AUDIO ANALOGICO
00006 
00007 // Definizione Seriale di comunicazione con PC
00008 Serial pc(USBTX, USBRX, 921600);
00009 
00010 //Pin di uscita del segnale Audio
00011 AnalogOut aAudioOut(PA_5);
00012 //DigitalOut dAudioOut (D13); // scopi diagnostici
00013 
00014 // periferiche presenti On Board 
00015 DigitalOut OnBoardRedLED (LED3);
00016 DigitalOut OnBoardGreenLED (LED1);
00017 DigitalOut OnBoardBlueLED (LED2);
00018 DigitalIn OnBoardButton (USER_BUTTON);
00019 Ticker mySoundGeneration;
00020 
00021  
00022 
00023     //Dichiarazione variabioi volatili e globali
00024     volatile bool bStop;
00025     volatile int i = 0;
00026     double y;
00027     char cRxChar;
00028     volatile double afSin[N]; 
00029     
00030     //Funzione che inserisce nell'array 'afSin' la sinusoide generata
00031     void sineGeneration()
00032     {
00033         for(int j = 0;j<N;j++)
00034         {
00035             afSin[j]=(sin((6.28/N)*j)+1)/2.0;
00036         
00037         }
00038     
00039     }
00040     
00041     //Funzione la quale riproduce la sinusoide precedentemente messa nell'array 'afSin'
00042     void soundGeneration()
00043     {  
00044 
00045       //pc.printf("Sono qui = 3\r\n");              //Necessità diagnostiche
00046         if(bStop==0)                              //Condizione necessaria per l'utilizzo di hyperterminal, nel caso si voglia fermare o far riprendere la produzione di frequenze
00047         {   
00048             aAudioOut.write(afSin[i]);
00049             i++;
00050             if(i >=N)
00051             {
00052                  i = 0;
00053             }
00054             
00055         } 
00056     
00057     }
00058 
00059     void cambiaFrequenza(double _fs){
00060         double _Ts, _T;
00061         _Ts= 1/_fs;
00062         _T=_Ts/N;
00063         
00064         mySoundGeneration.detach();
00065         mySoundGeneration.attach(&soundGeneration, _T);
00066     
00067     }    
00068 
00069     
00070 /********************/
00071 /*      Main        */
00072 /********************/
00073 
00074 
00075  
00076 int main()
00077 {
00078 
00079     //  messaggio di benvenuto
00080     pc.printf("Welcome to Tesys-Rail\r\n");
00081     
00082     //inizializza variabili necessarie per l'utilizzo della seriale
00083     bStop=0;
00084     cRxChar = 0;
00085     
00086     // ACCENSIONE led DI BENVENUTO
00087     OnBoardRedLED=1;
00088     OnBoardBlueLED=1;
00089     OnBoardGreenLED=1;
00090     wait(2);
00091     OnBoardRedLED=0;
00092     OnBoardBlueLED=0;
00093     OnBoardGreenLED=0;
00094      
00095      //Dichiarazione variabili
00096     double fs = 40.0;
00097     volatile double Ts = 1.0/fs;
00098     volatile double T = Ts/N;
00099     //printf("T = %.6f\r\n", T); //Necessità diagnostiche
00100    
00101     //  Agganciamento Ticker alla funzione soundGeneration
00102     sineGeneration();
00103     mySoundGeneration.attach(&soundGeneration, T);
00104 
00105      
00106      
00107 
00108         
00109     //++++++++++++++++++ INIZIO Test generazione Audio con segnale Analogico +++++++++++++++++++++ */
00110         
00111         /********************/
00112         /* Ciclo Principale */
00113         /********************/
00114         while(true)
00115         {
00116             //Inizio condizione per far fermare o riprendere l'esecuzione della funzione soundGeneration
00117                 
00118 
00119                 
00120                 if(pc.readable())
00121                 {
00122                     //pc.printf("Sono qui = 0\r\n");  //Necessità diagnostiche
00123         
00124                     cRxChar = pc.getc(); 
00125                     //+++++++++++++++++++++++++++++++++++++++++++++++
00126                     //Opzioni di cambio frequenza da seriale
00127                     switch(cRxChar)
00128                     {
00129                         case '1':
00130                             cambiaFrequenza(40.0);
00131                             pc.printf("\r\n");
00132                         break;
00133                         
00134                         case '2':
00135                             cambiaFrequenza(80.0);
00136                             pc.printf("\r\n");
00137                         break;
00138                         
00139                         case '3':
00140                             cambiaFrequenza(130.0);
00141                             pc.printf("\r\n");
00142                         break;
00143                         
00144                         case '4':
00145                             cambiaFrequenza(180.0);
00146                             pc.printf("\r\n");
00147                         break;
00148                         
00149                         case '5':
00150                             cambiaFrequenza(240.0);
00151                             pc.printf("\r\n");
00152                         break;
00153                         
00154                         case '6':
00155                             cambiaFrequenza(300.0);
00156                             pc.printf("\r\n");
00157                         break;
00158                         
00159                          case 's':
00160                             bStop = 1;
00161                             pc.printf("\r\n");
00162                         break;
00163                         
00164                         case 'r':
00165                             bStop = 0;
00166                             pc.printf("\r\n");
00167                         break;
00168                         
00169                         case 'c':
00170                             pc.printf("\033[2J");
00171                             pc.printf("\r");
00172                         break;
00173                          
00174                         default: 
00175                             pc.printf("\r\n");
00176                         break;                                                                            
00177                     
00178                     }
00179                    //+++++++++++++++++++++++++++++++++++++++++++++++
00180                     
00181                 }
00182                 
00183             }  
00184             /********************/
00185             /*      Fine        */             
00186             /* Ciclo Principale */
00187             /********************/
00188             
00189         }
00190         
00191         /********************/
00192         /*      Fine        */
00193         /*       Main       */
00194         /********************/
00195         
00196         
00197 
00198 
00199 
00200     
00201     
00202 
00203         
00204         
00205     
00206     //++++++++++++++++++ FINE Test generazione Audio con segnale Analogico +++++++++++++++++++++
00207 
00208     //++++++++++++++++++ INIZIO Test generazione Audio con segnale digitale +++++++++++++++++++++
00209     /*
00210     while(true)
00211     {
00212         dAudioOut = 1;
00213         wait_us(1270); // semiperiodo del segnale da generare (Sol 392Hz)
00214         dAudioOut = 0;
00215         wait_us(1270); // semiperiodo del segnale da generare
00216     }
00217     */
00218     //++++++++++++++++++ FINE Test generazione Audio con segnale digitale ++++++++++++++++++++++++
00219