Esercizio aggiornato

Dependencies:   mbed

Fork of Amaldi_9_Exercise_Sound-Generation by Amaldi

Committer:
Vito1704
Date:
Thu May 31 15:24:22 2018 +0000
Revision:
5:413f85118dd5
Parent:
4:6225b049c06b
Programma per la creazione di suoni

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pinofal 2:93bba36e0c06 1 // Tested : NUCLEO F207ZG
pinofal 2:93bba36e0c06 2 #include "mbed.h"
Vito1704 5:413f85118dd5 3 #include<stdlib.h>
pinofal 2:93bba36e0c06 4 // Definizione periferiche
pinofal 2:93bba36e0c06 5 Serial pc(USBTX, USBRX);
pinofal 2:93bba36e0c06 6 AnalogOut OutWave(PA_5);
pinofal 2:93bba36e0c06 7 //DigitalOut DigitalWave(PA_5);
pinofal 2:93bba36e0c06 8 DigitalOut led1(LED1);
pinofal 2:93bba36e0c06 9 DigitalOut led2(LED2);
pinofal 2:93bba36e0c06 10 DigitalOut led3(LED3);
pinofal 2:93bba36e0c06 11
pinofal 2:93bba36e0c06 12 // definizione della frequenza delle note ottava centrale del pianoforte
francesco01 4:6225b049c06b 13 #define m 0
pinofal 2:93bba36e0c06 14 #define C 261.63
pinofal 2:93bba36e0c06 15 #define Cd 277.18
pinofal 2:93bba36e0c06 16 #define Db 277.18
pinofal 2:93bba36e0c06 17 #define D 293.66
pinofal 2:93bba36e0c06 18 #define Dd 311.13
pinofal 2:93bba36e0c06 19 #define Eb 311.13
pinofal 2:93bba36e0c06 20 #define E 329.63
pinofal 2:93bba36e0c06 21 #define F 349.23
pinofal 2:93bba36e0c06 22 #define Fd 369.99
pinofal 2:93bba36e0c06 23 #define Gb 369.99
pinofal 2:93bba36e0c06 24 #define G 392.9
pinofal 2:93bba36e0c06 25 #define Gd 415.3
pinofal 2:93bba36e0c06 26 #define Ab 415.3
pinofal 2:93bba36e0c06 27 #define A 440.0
pinofal 2:93bba36e0c06 28 #define Ad 466.16
pinofal 2:93bba36e0c06 29 #define Bb 466.16
pinofal 2:93bba36e0c06 30 #define B 493.18
pinofal 2:93bba36e0c06 31
pinofal 2:93bba36e0c06 32
pinofal 2:93bba36e0c06 33
pinofal 2:93bba36e0c06 34
pinofal 2:93bba36e0c06 35
pinofal 2:93bba36e0c06 36
pinofal 2:93bba36e0c06 37 // numero di campioni che compongono un periodo della sinusoide in Output sull'ADC
pinofal 2:93bba36e0c06 38 #define SAMPLESINENUM 45// consigliabile avere multipli di 45
pinofal 2:93bba36e0c06 39
pinofal 2:93bba36e0c06 40 // parametri dell'onda coseno da generare
pinofal 2:93bba36e0c06 41 #define PI (3.141592653589793238462)
pinofal 2:93bba36e0c06 42 #define AMPLITUDE 32767 //(1.0) // x * 3.3V
pinofal 2:93bba36e0c06 43 #define PHASE (PI/2) // 2*pi è un periodo
pinofal 2:93bba36e0c06 44 #define OFFSET 32767 //(0x7FFF)
pinofal 2:93bba36e0c06 45
pinofal 2:93bba36e0c06 46 // numero di note componenti la scala diatonica
pinofal 2:93bba36e0c06 47 #define NUMTONE 120
pinofal 2:93bba36e0c06 48
pinofal 2:93bba36e0c06 49 // Output LED di diagnostica
pinofal 2:93bba36e0c06 50 DigitalOut led(LED1);
pinofal 2:93bba36e0c06 51
pinofal 2:93bba36e0c06 52 // ticker per la generazione dell'onda con DAC
pinofal 2:93bba36e0c06 53 Ticker SampleOutTicker;
pinofal 2:93bba36e0c06 54
pinofal 2:93bba36e0c06 55 // Buffer contenente la sinusoide da porre in output.
pinofal 2:93bba36e0c06 56 unsigned short usaSine[SAMPLESINENUM];
pinofal 2:93bba36e0c06 57
pinofal 2:93bba36e0c06 58 // prototipo di funzione che genera i campioni della sinusoide da utilizzare per la generazione tramite DAC
pinofal 2:93bba36e0c06 59 void CalculateSinewave(void);
pinofal 2:93bba36e0c06 60
pinofal 2:93bba36e0c06 61 // carattere in arrivo dal PC
pinofal 2:93bba36e0c06 62 volatile char cReadChar;
Vito1704 5:413f85118dd5 63 volatile char CReadMusic;
pinofal 2:93bba36e0c06 64 // indice, nell'array, del campione da porre in output
pinofal 2:93bba36e0c06 65 volatile int nSampleOutIndex;
pinofal 2:93bba36e0c06 66 // contatore dei campioni in output sul DAC
pinofal 2:93bba36e0c06 67 volatile int nSampleOutCount;
pinofal 2:93bba36e0c06 68 // Periodo di generazione campioni in output DeltaT = T/NumSample
pinofal 2:93bba36e0c06 69 double fDeltaT;
pinofal 2:93bba36e0c06 70 // amplificazione per il dato da spedire sull'ADC
pinofal 2:93bba36e0c06 71 volatile double fAmp;
pinofal 2:93bba36e0c06 72 //volatile double fAmpNew;
pinofal 2:93bba36e0c06 73 // flag per bloccare la generazione del segnale
pinofal 2:93bba36e0c06 74 volatile bool bStop;
pinofal 2:93bba36e0c06 75 // frequenza segnale da generare
pinofal 2:93bba36e0c06 76 volatile double fFreq;
pinofal 2:93bba36e0c06 77 // periodo della sinusoide da generare
pinofal 2:93bba36e0c06 78 double fPeriod;
pinofal 2:93bba36e0c06 79 double dDiatonic[NUMTONE];
pinofal 2:93bba36e0c06 80
pinofal 2:93bba36e0c06 81 //****************************
pinofal 2:93bba36e0c06 82 // Create the sinewave buffer
pinofal 2:93bba36e0c06 83 //****************************
pinofal 2:93bba36e0c06 84 void CalculateSinewave(int nOffset, int nAmplitude, double fPhase)
pinofal 2:93bba36e0c06 85 {
pinofal 2:93bba36e0c06 86 // variabile contenente l'angolo in radianti
pinofal 2:93bba36e0c06 87 double fRads;
pinofal 2:93bba36e0c06 88 // indici per i cicli
pinofal 2:93bba36e0c06 89 int nIndex;
pinofal 2:93bba36e0c06 90 // passo in frequenza fissato dal numero di campioni in cui voglio dividere un periodo di sinusoide: DeltaF = 360°/NUMSAMPLE
pinofal 2:93bba36e0c06 91 double fDeltaF;
pinofal 2:93bba36e0c06 92 // angolo per il quale bisogna calcolare il valore di sinusoide: fAngle = nIndex*DeltaF
pinofal 2:93bba36e0c06 93 double fAngle;
pinofal 2:93bba36e0c06 94
pinofal 2:93bba36e0c06 95 fDeltaF = 360.0/SAMPLESINENUM;
pinofal 2:93bba36e0c06 96 for (nIndex = 0; nIndex < SAMPLESINENUM; nIndex++)
pinofal 2:93bba36e0c06 97 {
pinofal 2:93bba36e0c06 98 fAngle = nIndex*fDeltaF; // angolo per il quale bisogna calcolare il campione di sinusoide
pinofal 2:93bba36e0c06 99 fRads = (PI * fAngle)/180.0; // Convert degree in radian
pinofal 2:93bba36e0c06 100 //usaSine[nIndex] = AMPLITUDE * cos(fRads + PHASE) + OFFSET;
pinofal 2:93bba36e0c06 101 usaSine[nIndex] = nAmplitude * cos(fRads + fPhase) + nOffset;
pinofal 2:93bba36e0c06 102 }
pinofal 2:93bba36e0c06 103 }
pinofal 2:93bba36e0c06 104
pinofal 2:93bba36e0c06 105
pinofal 2:93bba36e0c06 106 //**********************************************
pinofal 2:93bba36e0c06 107 // Crea le frequenze delle note del pianoforte
pinofal 2:93bba36e0c06 108 //**********************************************
pinofal 2:93bba36e0c06 109 void CreateDiatonic()
pinofal 2:93bba36e0c06 110 {
pinofal 2:93bba36e0c06 111 int nTono;
pinofal 2:93bba36e0c06 112 int nOttava;
pinofal 2:93bba36e0c06 113
pinofal 2:93bba36e0c06 114 // ottava centrale = ottava 4
pinofal 2:93bba36e0c06 115 dDiatonic[4*12+0]=261.63; // C
pinofal 2:93bba36e0c06 116 dDiatonic[4*12+1]=277.18; // C#/Db
pinofal 2:93bba36e0c06 117 dDiatonic[4*12+2]=293.66; // D
pinofal 2:93bba36e0c06 118 dDiatonic[4*12+3]=311.13; // D#/Eb
pinofal 2:93bba36e0c06 119 dDiatonic[4*12+4]=329.63; // E
pinofal 2:93bba36e0c06 120 dDiatonic[4*12+5]=349.23; // F
pinofal 2:93bba36e0c06 121 dDiatonic[4*12+6]=369.99; // F#/Gb
pinofal 2:93bba36e0c06 122 dDiatonic[4*12+7]=392.00; // G
pinofal 2:93bba36e0c06 123 dDiatonic[4*12+8]=415.30; // G#/Ab
pinofal 2:93bba36e0c06 124 dDiatonic[4*12+9]=440.00; // A
pinofal 2:93bba36e0c06 125 dDiatonic[4*12+10]=466.16; // A#/Bb
pinofal 2:93bba36e0c06 126 dDiatonic[4*12+11]=493.88; // B
pinofal 2:93bba36e0c06 127
pinofal 2:93bba36e0c06 128 // dalla ottava 5 alla 9
pinofal 2:93bba36e0c06 129 for(nOttava=5; nOttava<9; nOttava++)
pinofal 2:93bba36e0c06 130 {
pinofal 2:93bba36e0c06 131 for(nTono=0; nTono<12; nTono++)
pinofal 2:93bba36e0c06 132 {
pinofal 2:93bba36e0c06 133 dDiatonic[(nOttava*12)+nTono]=dDiatonic[((nOttava-1)*12)+nTono]*2;
pinofal 2:93bba36e0c06 134 }
pinofal 2:93bba36e0c06 135 }
pinofal 2:93bba36e0c06 136
pinofal 2:93bba36e0c06 137 // dalla ottava 0 alla 3
pinofal 2:93bba36e0c06 138 for(nOttava=3; nOttava>=0; nOttava--)
pinofal 2:93bba36e0c06 139 {
pinofal 2:93bba36e0c06 140 for(nTono=0; nTono<12; nTono++)
pinofal 2:93bba36e0c06 141 {
pinofal 2:93bba36e0c06 142 dDiatonic[(nOttava*12)+nTono]=dDiatonic[((nOttava+1)*12)+nTono]/2;
pinofal 2:93bba36e0c06 143 }
pinofal 2:93bba36e0c06 144 }
pinofal 2:93bba36e0c06 145 }
pinofal 2:93bba36e0c06 146
pinofal 2:93bba36e0c06 147 //***************************
pinofal 2:93bba36e0c06 148 // generazione sample da DAC
pinofal 2:93bba36e0c06 149 //***************************
pinofal 2:93bba36e0c06 150 void SampleOut()
pinofal 2:93bba36e0c06 151 {
pinofal 2:93bba36e0c06 152 // se è stato inviato il comando Stop, non fare niente fino a nuovo comando
pinofal 2:93bba36e0c06 153 if(bStop)
pinofal 2:93bba36e0c06 154 {
pinofal 2:93bba36e0c06 155 }
pinofal 2:93bba36e0c06 156 else // se non è stato inviato il comando di bStop continua
pinofal 2:93bba36e0c06 157 {
pinofal 2:93bba36e0c06 158 // output del campione della forma d'onda
pinofal 2:93bba36e0c06 159 OutWave.write_u16(usaSine[nSampleOutIndex]);
pinofal 2:93bba36e0c06 160
pinofal 2:93bba36e0c06 161 // incrementa l'indice del campione in output, modulo NUMSAMPLE: se NUMSAMPLE è 360, nSampleOutIndex va da 0 a 359
pinofal 2:93bba36e0c06 162 nSampleOutIndex++;
pinofal 2:93bba36e0c06 163 if(nSampleOutIndex >= SAMPLESINENUM)
pinofal 2:93bba36e0c06 164 {
pinofal 2:93bba36e0c06 165 nSampleOutIndex=0;
pinofal 2:93bba36e0c06 166 }
pinofal 2:93bba36e0c06 167
pinofal 2:93bba36e0c06 168 }
pinofal 2:93bba36e0c06 169 }
pinofal 2:93bba36e0c06 170
pinofal 2:93bba36e0c06 171
pinofal 2:93bba36e0c06 172
pinofal 2:93bba36e0c06 173
pinofal 2:93bba36e0c06 174 //*******************
pinofal 2:93bba36e0c06 175 // Loop Principale
pinofal 2:93bba36e0c06 176 //*******************
pinofal 2:93bba36e0c06 177 int main()
pinofal 2:93bba36e0c06 178 {
pinofal 2:93bba36e0c06 179 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 2:93bba36e0c06 180 pc.baud(921600); //921600 bps
pinofal 2:93bba36e0c06 181
pinofal 2:93bba36e0c06 182
pinofal 2:93bba36e0c06 183 // messaggio di benvenuto
pinofal 2:93bba36e0c06 184 pc.printf("\r\nHallo Amaldi Students - Exercise 9 \r\n");
Vito1704 5:413f85118dd5 185 pc.printf("\r\n*** Amaldi Vs Beethoven ***\r\n");
pinofal 2:93bba36e0c06 186
pinofal 2:93bba36e0c06 187 //inizializza variabili
pinofal 2:93bba36e0c06 188 cReadChar = 0;
pinofal 2:93bba36e0c06 189 nSampleOutIndex=0;
pinofal 2:93bba36e0c06 190 nSampleOutCount=0;
pinofal 2:93bba36e0c06 191 bStop=true;
pinofal 2:93bba36e0c06 192
pinofal 2:93bba36e0c06 193 // test dei LED
pinofal 2:93bba36e0c06 194 led1=1; //Verde
pinofal 2:93bba36e0c06 195 wait_ms(1000);
pinofal 2:93bba36e0c06 196 led1=0;
pinofal 2:93bba36e0c06 197 led2=1; // Blu
pinofal 2:93bba36e0c06 198 wait_ms(1000);
pinofal 2:93bba36e0c06 199 led2=0;
pinofal 2:93bba36e0c06 200 led3=1; //Rosso
pinofal 2:93bba36e0c06 201 wait_ms(1000);
pinofal 2:93bba36e0c06 202 led3=0;
pinofal 2:93bba36e0c06 203
pinofal 2:93bba36e0c06 204
Vito1704 5:413f85118dd5 205
Vito1704 5:413f85118dd5 206 pc.printf("\r\n*** Select Score ***\r\n");
Vito1704 5:413f85118dd5 207 pc.printf("\r\n> 0: Lalala land ***\r\n");
Vito1704 5:413f85118dd5 208 pc.printf("\r\n> 1: Minuetto ***\r\n");
Vito1704 5:413f85118dd5 209 pc.printf("\r\n> 2: Prima invenzione ***\r\n");
Vito1704 5:413f85118dd5 210 pc.printf("\r\n> 3: Nona sinfonia ***\r\n");
Vito1704 5:413f85118dd5 211 pc.printf("\r\n> 4: When the saint go macinin ***\r\n");
Vito1704 5:413f85118dd5 212 pc.printf("\r\n> 5: Preludio ***\r\n");
Vito1704 5:413f85118dd5 213 pc.printf("\r\n> 6: ***\r\n");
Vito1704 5:413f85118dd5 214 pc.printf("\r\n> 7: Minuetto ***\r\n");
Vito1704 5:413f85118dd5 215 pc.printf("\r\n> 8: Minuetto ***\r\n");
Vito1704 5:413f85118dd5 216 pc.printf("\r\n> 9: Me Composer ***\r\n");
Vito1704 5:413f85118dd5 217 //dichiarazione array pause
Vito1704 5:413f85118dd5 218 float pausa [7];
Vito1704 5:413f85118dd5 219 pausa [1] = 1 ; //semibreve
Vito1704 5:413f85118dd5 220 pausa [2] = 0.5; //minima
Vito1704 5:413f85118dd5 221 pausa [3] = 0.25;//semiminima
Vito1704 5:413f85118dd5 222 pausa [4] = 0.125;//croma
Vito1704 5:413f85118dd5 223 pausa [5] = 0.0625;//semicroma
Vito1704 5:413f85118dd5 224 pausa [6] = 0.03125;//semibiscroma
Vito1704 5:413f85118dd5 225 //dichiarazione matrice
Vito1704 5:413f85118dd5 226 float note [25][7];
Vito1704 5:413f85118dd5 227 note [1][1] = 261.63,1;//Do semibreve (Frequenza),(Tempo in s)
Vito1704 5:413f85118dd5 228 note [1][2] = 261.63,0.5;//Do minima
Vito1704 5:413f85118dd5 229 note [1][3] = 261.63,0.25;//Do semiminima
Vito1704 5:413f85118dd5 230 note [1][4] = 261.63,0.125;//Do croma
Vito1704 5:413f85118dd5 231 note [1][5] = 261.63,0.0625;//Do semicroma
Vito1704 5:413f85118dd5 232 note [1][6] = 261.63,0.03125;//Do semibiscroma
Vito1704 5:413f85118dd5 233 note [2][1] = 293.66,1;//Re semibreve
Vito1704 5:413f85118dd5 234 note [2][2] = 293.66,0.5;//Re minima
Vito1704 5:413f85118dd5 235 note [2][3] = 293.66,0.25;//Re semiminima
Vito1704 5:413f85118dd5 236 note [2][4] = 293.66,0.125;//Re croma
Vito1704 5:413f85118dd5 237 note [2][5] = 293.66,0.0625;//Re semicroma
Vito1704 5:413f85118dd5 238 note [2][6] = 293.66,0.03125;//Re semibiscroma
Vito1704 5:413f85118dd5 239 note [3][1] = 330.00,1;//Mi semibreve
Vito1704 5:413f85118dd5 240 note [3][2] = 330.00,0.5;//Mi minima
Vito1704 5:413f85118dd5 241 note [3][3] = 330.00,0.25;//Mi semiminima
Vito1704 5:413f85118dd5 242 note [3][4] = 330.00,0.125;//Mi croma
Vito1704 5:413f85118dd5 243 note [3][5] = 330.00,0.0625;//Mi semicroma
Vito1704 5:413f85118dd5 244 note [3][6] = 330.00,0.03125;//Mi semibiscroma
Vito1704 5:413f85118dd5 245 note [4][1] = 349.00,1;//Fa semibreve
Vito1704 5:413f85118dd5 246 note [4][2] = 349.00,0.5;//Fa minima
Vito1704 5:413f85118dd5 247 note [4][3] = 349.00,0.25;//Fa semiminima
Vito1704 5:413f85118dd5 248 note [4][4] = 349.00,0.125;//Fa croma
Vito1704 5:413f85118dd5 249 note [4][5] = 349.00,0.0625;//Fa semicroma
Vito1704 5:413f85118dd5 250 note [4][6] = 349.00,0.03125;//Fa semibiscroma
Vito1704 5:413f85118dd5 251 note [5][1] = 392.00,1;//Sol semibreve
Vito1704 5:413f85118dd5 252 note [5][2] = 392.00,0.5;//Sol minima
Vito1704 5:413f85118dd5 253 note [5][3] = 392.00,0.25;//Sol semiminima
Vito1704 5:413f85118dd5 254 note [5][4] = 392.00,0.125;//Sol croma
Vito1704 5:413f85118dd5 255 note [5][5] = 392.00,0.0625;//Sol semicroma
Vito1704 5:413f85118dd5 256 note [5][6] = 392.00,0.03125;//Sol semibiscroma
Vito1704 5:413f85118dd5 257 note [6][1] = 440.00,1;//La semibreve
Vito1704 5:413f85118dd5 258 note [6][2] = 440.00,0.5;//la minima
Vito1704 5:413f85118dd5 259 note [6][3] = 349.00,0.25;//La semiminima
Vito1704 5:413f85118dd5 260 note [6][4] = 440.00,0.125;//La croma
Vito1704 5:413f85118dd5 261 note [6][5] = 440.00,0.0625;//La semicroma
Vito1704 5:413f85118dd5 262 note [6][6] = 440.00,0.03125;//La semibiscroma
Vito1704 5:413f85118dd5 263 note [7][1] = 494.00,1;//Si semibreve
Vito1704 5:413f85118dd5 264 note [7][2] = 494.00,0.5;//Si minima
Vito1704 5:413f85118dd5 265 note [7][3] = 494.00,0.25;//Si semiminima
Vito1704 5:413f85118dd5 266 note [7][4] = 494.00,0.125;//Si croma
Vito1704 5:413f85118dd5 267 note [7][5] = 494.00,0.0625;//Si semicroma
Vito1704 5:413f85118dd5 268 note [7][6] = 494.00,0.03125;//Si semibiscroma
Vito1704 5:413f85118dd5 269 note [8][1] = 277.18,1;//Do# semibreve
Vito1704 5:413f85118dd5 270 note [8][2] = 277.18,0.5;//Do# minima
Vito1704 5:413f85118dd5 271 note [8][3] = 277.18,0.25;//Do# semiminima
Vito1704 5:413f85118dd5 272 note [8][4] = 277.18,0.125;//Do# croma
Vito1704 5:413f85118dd5 273 note [8][5] = 277.18,0.0625;//Do# semicroma
Vito1704 5:413f85118dd5 274 note [8][6] = 277.18,0.03125;//Do# semibiscroma
Vito1704 5:413f85118dd5 275 note [9][1] = 311.13,1;//Re# semibreve
Vito1704 5:413f85118dd5 276 note [9][2] = 311.13,0.5;//Re# minima
Vito1704 5:413f85118dd5 277 note [9][3] = 311.13,0.25;//Re# semiminima
Vito1704 5:413f85118dd5 278 note [9][4] = 311.13,0.125;//Re#croma
Vito1704 5:413f85118dd5 279 note [9][5] = 311.13,0.0625;//Re# semicroma
Vito1704 5:413f85118dd5 280 note [9][6] = 311.13,0.03125;//Re# semibiscroma
Vito1704 5:413f85118dd5 281 note [10][1] = 370.00,1;//Fa# semibreve
Vito1704 5:413f85118dd5 282 note [10][2] = 370.00,0.5;//Fa# minima
Vito1704 5:413f85118dd5 283 note [10][3] = 370.00,0.25;//fa# semiminima
Vito1704 5:413f85118dd5 284 note [10][4] = 370.00,0.125;//Fa#croma
Vito1704 5:413f85118dd5 285 note [10][5] = 370.00,0.0625;//Fa# semicroma
Vito1704 5:413f85118dd5 286 note [10][6] = 370.00,0.03125;//Fa# semibiscroma
Vito1704 5:413f85118dd5 287 note [11][1] = 370.00,1;//Fa# semibreve
Vito1704 5:413f85118dd5 288 note [11][2] = 370.00,0.5;//Fa# minima
Vito1704 5:413f85118dd5 289 note [11][3] = 370.00,0.25;//fa# semiminima
Vito1704 5:413f85118dd5 290 note [11][4] = 370.00,0.125;//Fa#croma
Vito1704 5:413f85118dd5 291 note [11][5] = 370.00,0.0625;//Fa# semicroma
Vito1704 5:413f85118dd5 292 note [11][6] = 370.00,0.03125;//Fa# semibiscroma
Vito1704 5:413f85118dd5 293 note [12][1] = 370.00,1;//Sol# semibreve
Vito1704 5:413f85118dd5 294 note [12][2] = 370.00,0.5;//Sol# minima
Vito1704 5:413f85118dd5 295 note [12][3] = 370.00,0.25;//Sol# semiminima
Vito1704 5:413f85118dd5 296 note [12][4] = 370.00,0.125;//Sol#croma
Vito1704 5:413f85118dd5 297 note [12][5] = 370.00,0.0625;//Sol# semicroma
Vito1704 5:413f85118dd5 298 note [12][6] = 370.00,0.03125;//Sol# semibiscroma
Vito1704 5:413f85118dd5 299 note [13][1] = 370.00,1;//La# semibreve
Vito1704 5:413f85118dd5 300 note [13][2] = 370.00,0.5;//La# minima
Vito1704 5:413f85118dd5 301 note [13][3] = 370.00,0.25;//La# semiminima
Vito1704 5:413f85118dd5 302 note [13][4] = 370.00,0.125;//La#croma
Vito1704 5:413f85118dd5 303 note [13][5] = 370.00,0.0625;//La# semicroma
Vito1704 5:413f85118dd5 304 note [13][6] = 370.00,0.03125;//La# semibiscroma
Vito1704 5:413f85118dd5 305 note [14][1] = 523.00,1;//Do 5° semibreve
Vito1704 5:413f85118dd5 306 note [14][2] = 523.00,0.5;//Do 5° minima
Vito1704 5:413f85118dd5 307 note [14][3] = 523.00,0.25;//Do 5° semiminima
Vito1704 5:413f85118dd5 308 note [14][4] = 523.00,0.125;//Do 5° croma
Vito1704 5:413f85118dd5 309 note [14][5] = 523.00,0.0625;//Do 5° semicroma
Vito1704 5:413f85118dd5 310 note [14][6] = 523.00,0.03125;//Do 5° semibiscroma
Vito1704 5:413f85118dd5 311 note [15][1] = 523.00,1;//Do# 5° semibreve
Vito1704 5:413f85118dd5 312 note [15][2] = 523.00,0.5;//Do# 5° minima
Vito1704 5:413f85118dd5 313 note [15][3] = 523.00,0.25;//Do# 5° semiminima
Vito1704 5:413f85118dd5 314 note [15][4] = 523.00,0.125;//Do# 5° croma
Vito1704 5:413f85118dd5 315 note [15][5] = 523.00,0.0625;//Do# 5° semicroma
Vito1704 5:413f85118dd5 316 note [15][6] = 523.00,0.03125;//Do# 5° semibiscroma
Vito1704 5:413f85118dd5 317 note [16][1] = 622.00,1;//Re# 5° semibreve
Vito1704 5:413f85118dd5 318 note [16][2] = 622.00,0.5;//Re# 5° minima
Vito1704 5:413f85118dd5 319 note [16][3] = 622.00,0.25;//Re# 5° semiminima
Vito1704 5:413f85118dd5 320 note [16][4] = 622.00,0.125;//Re# 5° croma
Vito1704 5:413f85118dd5 321 note [16][5] = 622.00,0.0625;//Re# 5° semicroma
Vito1704 5:413f85118dd5 322 note [16][6] = 622.00,0.03125;//Re# 5° semibiscroma
Vito1704 5:413f85118dd5 323 note [17][1] = 587.00,1;//Re 5° semibreve
Vito1704 5:413f85118dd5 324 note [17][2] = 587.00,0.5;//Re 5° minima
Vito1704 5:413f85118dd5 325 note [17][3] = 587.00,0.25;//Re 5° semiminima
Vito1704 5:413f85118dd5 326 note [17][4] = 587.00,0.125;//Re 5° croma
Vito1704 5:413f85118dd5 327 note [17][5] = 587.00,0.0625;//Re 5° semicroma
Vito1704 5:413f85118dd5 328 note [17][6] = 587.00,0.03125;//Re 5° semibiscroma
Vito1704 5:413f85118dd5 329 note [18][1] = 659.00,1;//Mi 5° semibreve
Vito1704 5:413f85118dd5 330 note [18][2] = 659.00,0.5;//Mi 5° minima
Vito1704 5:413f85118dd5 331 note [18][3] = 659.00,0.25;//Mi 5° semiminima
Vito1704 5:413f85118dd5 332 note [18][4] = 659.00,0.125;//Mi 5° croma
Vito1704 5:413f85118dd5 333 note [18][5] = 659.00,0.0625;//Mi 5° semicroma
Vito1704 5:413f85118dd5 334 note [18][6] = 659.00,0.03125;//Mi 5° semibiscroma
Vito1704 5:413f85118dd5 335 note [19][1] = 698.00,1;//Fa 5° semibreve
Vito1704 5:413f85118dd5 336 note [19][2] = 698.00,0.5;//Fa 5° minima
Vito1704 5:413f85118dd5 337 note [19][3] = 698.00,0.25;//Fa 5° semiminima
Vito1704 5:413f85118dd5 338 note [19][4] = 698.00,0.125;//Fa 5° croma
Vito1704 5:413f85118dd5 339 note [19][5] = 698.00,0.0625;//Fa 5° semicroma
Vito1704 5:413f85118dd5 340 note [19][6] = 698.00,0.03125;//Fa 5° semibiscroma
Vito1704 5:413f85118dd5 341 note [20][1] = 740.00,1;//Fa# 5° semibreve
Vito1704 5:413f85118dd5 342 note [20][2] = 740.00,0.5;//Fa# 5° minima
Vito1704 5:413f85118dd5 343 note [20][3] = 740.00,0.25;//Fa# 5° semiminima
Vito1704 5:413f85118dd5 344 note [20][4] = 740.00,0.125;//Fa# 5° croma
Vito1704 5:413f85118dd5 345 note [20][5] = 740.00,0.0625;//Fa# 5° semicroma
Vito1704 5:413f85118dd5 346 note [20][6] = 740.00,0.03125;//Fa# 5° semibiscroma
Vito1704 5:413f85118dd5 347 note [21][1] = 784.00,1;//Sol 5° semibreve
Vito1704 5:413f85118dd5 348 note [21][2] = 784.00,0.5;//Sol 5° minima
Vito1704 5:413f85118dd5 349 note [21][3] = 784.00,0.25;//Sol 5° semiminima
Vito1704 5:413f85118dd5 350 note [21][4] = 784.00,0.125;//Sol 5° croma
Vito1704 5:413f85118dd5 351 note [21][5] = 784.00,0.0625;//Sol 5° semicroma
Vito1704 5:413f85118dd5 352 note [21][6] = 784.00,0.03125;//Sol 5° semibiscroma
Vito1704 5:413f85118dd5 353 note [22][1] = 831.00,1;//Sol# 5° semibreve
Vito1704 5:413f85118dd5 354 note [22][2] = 831.00,0.5;//Sol# 5° minima
Vito1704 5:413f85118dd5 355 note [22][3] = 831.00,0.25;//Sol# 5° semiminima
Vito1704 5:413f85118dd5 356 note [22][4] = 831.00,0.125;//Sol# 5° croma
Vito1704 5:413f85118dd5 357 note [22][5] = 831.00,0.0625;//Sol# 5° semicroma
Vito1704 5:413f85118dd5 358 note [22][6] = 831.00,0.03125;//Sol# 5° semibiscroma
Vito1704 5:413f85118dd5 359 note [23][1] = 880.00,1;//La 5° semibreve
Vito1704 5:413f85118dd5 360 note [23][2] = 880.00,0.5;//La 5° minima
Vito1704 5:413f85118dd5 361 note [23][3] = 880.00,0.25;//La 5° semiminima
Vito1704 5:413f85118dd5 362 note [23][4] = 880.00,0.125;//La 5° croma
Vito1704 5:413f85118dd5 363 note [23][5] = 880.00,0.0625;//La 5° semicroma
Vito1704 5:413f85118dd5 364 note [23][6] = 880.00,0.03125;//La 5° semibiscroma
Vito1704 5:413f85118dd5 365 note [24][1] = 932.00,1;//La# 5° semibreve
Vito1704 5:413f85118dd5 366 note [24][2] = 932.00,0.5;//La# 5° minima
Vito1704 5:413f85118dd5 367 note [24][3] = 932.00,0.25;//La# 5° semiminima
Vito1704 5:413f85118dd5 368 note [24][4] = 932.00,0.125;//La# 5° croma
Vito1704 5:413f85118dd5 369 note [24][5] = 932.00,0.0625;//La# 5° semicroma
Vito1704 5:413f85118dd5 370 note [24][6] = 932.00,0.03125;//La# 5° semibiscroma
Vito1704 5:413f85118dd5 371 note [25][1] = 988.00,1;//Si 5° semibreve
Vito1704 5:413f85118dd5 372 note [25][2] = 988.00,0.5;//Si 5° minima
Vito1704 5:413f85118dd5 373 note [25][3] = 988.00,0.25;//Si 5° semiminima
Vito1704 5:413f85118dd5 374 note [25][4] = 988.00,0.125;//Si 5° croma
Vito1704 5:413f85118dd5 375 note [25][5] = 988.00,0.0625;//Si 5° semicroma
Vito1704 5:413f85118dd5 376 note [25][6] = 988.00,0.03125;//Si 5° semibiscroma
pinofal 2:93bba36e0c06 377 while(true)
pinofal 2:93bba36e0c06 378 {
pinofal 2:93bba36e0c06 379 // verifica se è arrivato un carattere dalla seriale del pc
pinofal 2:93bba36e0c06 380 if(pc.readable())
pinofal 2:93bba36e0c06 381 {
pinofal 2:93bba36e0c06 382 cReadChar = pc.getc(); // Read hyperterminal
Vito1704 5:413f85118dd5 383
Vito1704 5:413f85118dd5 384
pinofal 2:93bba36e0c06 385 // genera la nota corrispondente al carattere ricevuto
pinofal 2:93bba36e0c06 386 switch(cReadChar)
pinofal 2:93bba36e0c06 387 {
francesco01 3:3895d3f389b5 388 //La#
francesco01 4:6225b049c06b 389 case 'u':
francesco01 4:6225b049c06b 390 case 'U':
francesco01 3:3895d3f389b5 391 {
francesco01 3:3895d3f389b5 392 fFreq=466.16;// frequenza della sinusoide La#
francesco01 3:3895d3f389b5 393 pc.printf("\n\r--- Generazione La#_SIb= %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 394 bStop = false;
francesco01 3:3895d3f389b5 395 } break;
francesco01 3:3895d3f389b5 396 //sol#
francesco01 4:6225b049c06b 397 case 'y':
francesco01 4:6225b049c06b 398 case 'Y':
francesco01 3:3895d3f389b5 399 {
francesco01 3:3895d3f389b5 400 fFreq=415.3;// frequenza della sinusoide Sol#
francesco01 3:3895d3f389b5 401 pc.printf("\n\r--- Generazione Sol#_LAb = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 402 bStop = false;
francesco01 3:3895d3f389b5 403 } break;
francesco01 3:3895d3f389b5 404 //Sol_b
francesco01 4:6225b049c06b 405 case 't':
francesco01 4:6225b049c06b 406 case 'T':
francesco01 3:3895d3f389b5 407 {
francesco01 3:3895d3f389b5 408 fFreq=369.99;// frequenza della sinusoide Sol_b
francesco01 3:3895d3f389b5 409 pc.printf("\n\r--- Generazione Solb_Fa# = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 410 bStop = false;
francesco01 3:3895d3f389b5 411 } break;
francesco01 3:3895d3f389b5 412 //DO#
francesco01 3:3895d3f389b5 413 case 'e':
francesco01 3:3895d3f389b5 414 case 'E':
francesco01 3:3895d3f389b5 415 {
francesco01 3:3895d3f389b5 416 fFreq=277.18;// frequenza della sinusoide DO diesis
francesco01 3:3895d3f389b5 417 pc.printf("\n\r--- Generazione DO# = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 418 bStop = false;
francesco01 3:3895d3f389b5 419 } break;
pinofal 2:93bba36e0c06 420 //DO
francesco01 3:3895d3f389b5 421 case 'd':
francesco01 3:3895d3f389b5 422 case 'D':
pinofal 2:93bba36e0c06 423 {
pinofal 2:93bba36e0c06 424 fFreq=261.63;// frequenza della sinusoide DO da generare
pinofal 2:93bba36e0c06 425 pc.printf("\n\r--- Generazione DO = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 426 bStop = false;
pinofal 2:93bba36e0c06 427 } break;
pinofal 2:93bba36e0c06 428 // RE
francesco01 3:3895d3f389b5 429 case 'f':
francesco01 3:3895d3f389b5 430 case 'F':
pinofal 2:93bba36e0c06 431 {
pinofal 2:93bba36e0c06 432 fFreq=293.66;// frequenza della sinusoide RE da generare
pinofal 2:93bba36e0c06 433 pc.printf("\n\r--- Generazione RE = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 434 bStop = false;
pinofal 2:93bba36e0c06 435 } break;
pinofal 2:93bba36e0c06 436 // RE#/MIb
francesco01 3:3895d3f389b5 437 case 'r':
francesco01 3:3895d3f389b5 438 case 'R':
pinofal 2:93bba36e0c06 439 {
pinofal 2:93bba36e0c06 440 fFreq=311.13;
pinofal 2:93bba36e0c06 441 pc.printf("\n\r--- Generazione Mib = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 442 bStop = false;
pinofal 2:93bba36e0c06 443 } break;
francesco01 3:3895d3f389b5 444 case 'g':
francesco01 3:3895d3f389b5 445 case 'G':
pinofal 2:93bba36e0c06 446 {
pinofal 2:93bba36e0c06 447 fFreq=329.63; // frequenza della sinusoide MI da generare
pinofal 2:93bba36e0c06 448 pc.printf("\n\r--- Generazione MI = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 449 bStop = false;
pinofal 2:93bba36e0c06 450 } break;
francesco01 3:3895d3f389b5 451 case 'h':
francesco01 3:3895d3f389b5 452 case 'H':
pinofal 2:93bba36e0c06 453 {
pinofal 2:93bba36e0c06 454 fFreq=349.23;// frequenza della sinusoide FA da generare
pinofal 2:93bba36e0c06 455 pc.printf("\n\r--- Generazione FA = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 456 bStop = false;
pinofal 2:93bba36e0c06 457 } break;
pinofal 2:93bba36e0c06 458
pinofal 2:93bba36e0c06 459 // SOL
francesco01 3:3895d3f389b5 460 case 'j':
francesco01 3:3895d3f389b5 461 case 'J':
pinofal 2:93bba36e0c06 462 {
pinofal 2:93bba36e0c06 463 fFreq=392.0;
pinofal 2:93bba36e0c06 464 pc.printf("\n\r--- Generazione SOL = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 465 bStop = false;
pinofal 2:93bba36e0c06 466 } break;
pinofal 2:93bba36e0c06 467 // LA
francesco01 3:3895d3f389b5 468 case 'k':
francesco01 3:3895d3f389b5 469 case 'K':
pinofal 2:93bba36e0c06 470 {
pinofal 2:93bba36e0c06 471 fFreq=440.0; // frequenza della sinusoide LA da generare
pinofal 2:93bba36e0c06 472 pc.printf("\n\r--- Generazione LA = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 473 bStop = false;
pinofal 2:93bba36e0c06 474 } break;
pinofal 2:93bba36e0c06 475 //SI
francesco01 3:3895d3f389b5 476 case 'l':
francesco01 3:3895d3f389b5 477 case 'L':
pinofal 2:93bba36e0c06 478 {
pinofal 2:93bba36e0c06 479 fFreq=493.88;// frequenza della sinusoide SI da generare
pinofal 2:93bba36e0c06 480 pc.printf("\n\r--- Generazione SI = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 481 bStop = false;
pinofal 2:93bba36e0c06 482 } break;
Vito1704 5:413f85118dd5 483 //DO 5°
Vito1704 5:413f85118dd5 484 case 'z':
Vito1704 5:413f85118dd5 485 case 'Z':
Vito1704 5:413f85118dd5 486 {
Vito1704 5:413f85118dd5 487 fFreq=523.00;// frequenza della sinusoide SI da generare
Vito1704 5:413f85118dd5 488 pc.printf("\n\r--- Generazione DO5 = %.2f Hz ampiezza nominale ---\n\r", fFreq);
Vito1704 5:413f85118dd5 489 bStop = false;
Vito1704 5:413f85118dd5 490 } break;
Vito1704 5:413f85118dd5 491 //RE 5°
Vito1704 5:413f85118dd5 492 case 'x':
Vito1704 5:413f85118dd5 493 case 'X':
Vito1704 5:413f85118dd5 494 {
Vito1704 5:413f85118dd5 495 fFreq=587.00;// frequenza della sinusoide SI da generare
Vito1704 5:413f85118dd5 496 pc.printf("\n\r--- Generazione RE5 = %.2f Hz ampiezza nominale ---\n\r", fFreq);
Vito1704 5:413f85118dd5 497 bStop = false;
Vito1704 5:413f85118dd5 498 } break;
pinofal 2:93bba36e0c06 499
pinofal 2:93bba36e0c06 500 // pausa
pinofal 2:93bba36e0c06 501 case ' ':
pinofal 2:93bba36e0c06 502 {
francesco01 4:6225b049c06b 503 bStop = true;
francesco01 4:6225b049c06b 504 pc.printf("\n\r--- Generazione pausa = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 4:6225b049c06b 505
pinofal 2:93bba36e0c06 506 } break;
Vito1704 5:413f85118dd5 507 //prova
Vito1704 5:413f85118dd5 508 case 'o':
Vito1704 5:413f85118dd5 509 {
Vito1704 5:413f85118dd5 510 fFreq=587.00;
Vito1704 5:413f85118dd5 511 wait_ms(600);
Vito1704 5:413f85118dd5 512 fFreq=392.00;
Vito1704 5:413f85118dd5 513 wait_ms(300);
Vito1704 5:413f85118dd5 514 fFreq=440.00;
Vito1704 5:413f85118dd5 515 wait_ms(300);
Vito1704 5:413f85118dd5 516 fFreq=493.88;
Vito1704 5:413f85118dd5 517 wait_ms(300);
Vito1704 5:413f85118dd5 518 fFreq=523.16;
Vito1704 5:413f85118dd5 519 wait_ms(300);
Vito1704 5:413f85118dd5 520 } break;
Vito1704 5:413f85118dd5 521 //Stop
francesco01 4:6225b049c06b 522 case 'b':
francesco01 4:6225b049c06b 523 case 'B':
francesco01 4:6225b049c06b 524 {
francesco01 4:6225b049c06b 525
francesco01 4:6225b049c06b 526 fFreq=0;// stop
francesco01 4:6225b049c06b 527 pc.printf("\n\r--- Generazione Stop = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 4:6225b049c06b 528 bStop = false;
francesco01 4:6225b049c06b 529 } break;
francesco01 4:6225b049c06b 530
pinofal 2:93bba36e0c06 531 default:
pinofal 2:93bba36e0c06 532 {
pinofal 2:93bba36e0c06 533 bStop=true; // se la nota non è riconosciuta blocca la generazione
pinofal 2:93bba36e0c06 534 pc.printf("\n\r--- Wrong Tone ---\n\r");
pinofal 2:93bba36e0c06 535 } break;
pinofal 2:93bba36e0c06 536 } // switch (cReadChar)
pinofal 2:93bba36e0c06 537
pinofal 2:93bba36e0c06 538 // genera la frequenza relativa alla nota che è stata selezionata
pinofal 2:93bba36e0c06 539 fAmp = 0.1; // coefficiente per il quale viene moltiplicato l'ampiezza massima
pinofal 2:93bba36e0c06 540 fDeltaT = 1.0/(fFreq*SAMPLESINENUM);
pinofal 2:93bba36e0c06 541 CalculateSinewave(32767, (32767*fAmp), (PI/2.0)); // generazione della sinusoide con valori nominali
pinofal 2:93bba36e0c06 542 SampleOutTicker.attach(&SampleOut,fDeltaT); // avvia output della sinusoide per generazione
Vito1704 5:413f85118dd5 543
pinofal 2:93bba36e0c06 544
pinofal 2:93bba36e0c06 545 }
pinofal 2:93bba36e0c06 546 else // se non è stato premuto nessun tasto
pinofal 2:93bba36e0c06 547 {
pinofal 2:93bba36e0c06 548
pinofal 2:93bba36e0c06 549 }
pinofal 2:93bba36e0c06 550 }
pinofal 2:93bba36e0c06 551
pinofal 2:93bba36e0c06 552 /******* START ONDA DIGITALE FUNZIONA *****
pinofal 2:93bba36e0c06 553 led1=1;
pinofal 2:93bba36e0c06 554 led2=1;
pinofal 2:93bba36e0c06 555 led3=1;
pinofal 2:93bba36e0c06 556 while(true)
pinofal 2:93bba36e0c06 557 {
pinofal 2:93bba36e0c06 558 DigitalWave=0;
pinofal 2:93bba36e0c06 559 //wait_us(2024); //SI
pinofal 2:93bba36e0c06 560 //wait_us(2551); //SOL
pinofal 2:93bba36e0c06 561 wait_us(1515); //MI
pinofal 2:93bba36e0c06 562 DigitalWave=1;
pinofal 2:93bba36e0c06 563 wait_us(1515);
pinofal 2:93bba36e0c06 564 }
pinofal 2:93bba36e0c06 565 ****** END ONDA DIGITALE FUNZIONA ******/
pinofal 2:93bba36e0c06 566 }