Esercizio aggiornato

Dependencies:   mbed

Fork of Amaldi_9_Exercise_Sound-Generation by Amaldi

Committer:
francesco01
Date:
Wed May 16 16:55:02 2018 +0000
Revision:
4:6225b049c06b
Parent:
3:3895d3f389b5
Child:
5:413f85118dd5
Modifica_sintetizzatore_con_ottava_completa

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"
pinofal 2:93bba36e0c06 3
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;
pinofal 2:93bba36e0c06 63
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");
pinofal 2:93bba36e0c06 185 pc.printf("\r\n*** SineWave Generation ***\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
pinofal 2:93bba36e0c06 205 while(true)
pinofal 2:93bba36e0c06 206 {
pinofal 2:93bba36e0c06 207 // verifica se è arrivato un carattere dalla seriale del pc
pinofal 2:93bba36e0c06 208 if(pc.readable())
pinofal 2:93bba36e0c06 209 {
pinofal 2:93bba36e0c06 210 cReadChar = pc.getc(); // Read hyperterminal
pinofal 2:93bba36e0c06 211
pinofal 2:93bba36e0c06 212 // genera la nota corrispondente al carattere ricevuto
pinofal 2:93bba36e0c06 213 switch(cReadChar)
pinofal 2:93bba36e0c06 214 {
francesco01 3:3895d3f389b5 215 //La#
francesco01 4:6225b049c06b 216 case 'u':
francesco01 4:6225b049c06b 217 case 'U':
francesco01 3:3895d3f389b5 218 {
francesco01 3:3895d3f389b5 219 fFreq=466.16;// frequenza della sinusoide La#
francesco01 3:3895d3f389b5 220 pc.printf("\n\r--- Generazione La#_SIb= %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 221 bStop = false;
francesco01 3:3895d3f389b5 222 } break;
francesco01 3:3895d3f389b5 223 //sol#
francesco01 4:6225b049c06b 224 case 'y':
francesco01 4:6225b049c06b 225 case 'Y':
francesco01 3:3895d3f389b5 226 {
francesco01 3:3895d3f389b5 227 fFreq=415.3;// frequenza della sinusoide Sol#
francesco01 3:3895d3f389b5 228 pc.printf("\n\r--- Generazione Sol#_LAb = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 229 bStop = false;
francesco01 3:3895d3f389b5 230 } break;
francesco01 3:3895d3f389b5 231 //Sol_b
francesco01 4:6225b049c06b 232 case 't':
francesco01 4:6225b049c06b 233 case 'T':
francesco01 3:3895d3f389b5 234 {
francesco01 3:3895d3f389b5 235 fFreq=369.99;// frequenza della sinusoide Sol_b
francesco01 3:3895d3f389b5 236 pc.printf("\n\r--- Generazione Solb_Fa# = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 237 bStop = false;
francesco01 3:3895d3f389b5 238 } break;
francesco01 3:3895d3f389b5 239 //DO#
francesco01 3:3895d3f389b5 240 case 'e':
francesco01 3:3895d3f389b5 241 case 'E':
francesco01 3:3895d3f389b5 242 {
francesco01 3:3895d3f389b5 243 fFreq=277.18;// frequenza della sinusoide DO diesis
francesco01 3:3895d3f389b5 244 pc.printf("\n\r--- Generazione DO# = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 245 bStop = false;
francesco01 3:3895d3f389b5 246 } break;
pinofal 2:93bba36e0c06 247 //DO
francesco01 3:3895d3f389b5 248 case 'd':
francesco01 3:3895d3f389b5 249 case 'D':
pinofal 2:93bba36e0c06 250 {
pinofal 2:93bba36e0c06 251 fFreq=261.63;// frequenza della sinusoide DO da generare
pinofal 2:93bba36e0c06 252 pc.printf("\n\r--- Generazione DO = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 253 bStop = false;
pinofal 2:93bba36e0c06 254 } break;
pinofal 2:93bba36e0c06 255 // RE
francesco01 3:3895d3f389b5 256 case 'f':
francesco01 3:3895d3f389b5 257 case 'F':
pinofal 2:93bba36e0c06 258 {
pinofal 2:93bba36e0c06 259 fFreq=293.66;// frequenza della sinusoide RE da generare
pinofal 2:93bba36e0c06 260 pc.printf("\n\r--- Generazione RE = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 261 bStop = false;
pinofal 2:93bba36e0c06 262 } break;
pinofal 2:93bba36e0c06 263 // RE#/MIb
francesco01 3:3895d3f389b5 264 case 'r':
francesco01 3:3895d3f389b5 265 case 'R':
pinofal 2:93bba36e0c06 266 {
pinofal 2:93bba36e0c06 267 fFreq=311.13;
pinofal 2:93bba36e0c06 268 pc.printf("\n\r--- Generazione Mib = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 269 bStop = false;
pinofal 2:93bba36e0c06 270 } break;
francesco01 3:3895d3f389b5 271 case 'g':
francesco01 3:3895d3f389b5 272 case 'G':
pinofal 2:93bba36e0c06 273 {
pinofal 2:93bba36e0c06 274 fFreq=329.63; // frequenza della sinusoide MI da generare
pinofal 2:93bba36e0c06 275 pc.printf("\n\r--- Generazione MI = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 276 bStop = false;
pinofal 2:93bba36e0c06 277 } break;
francesco01 3:3895d3f389b5 278 case 'h':
francesco01 3:3895d3f389b5 279 case 'H':
pinofal 2:93bba36e0c06 280 {
pinofal 2:93bba36e0c06 281 fFreq=349.23;// frequenza della sinusoide FA da generare
pinofal 2:93bba36e0c06 282 pc.printf("\n\r--- Generazione FA = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 283 bStop = false;
pinofal 2:93bba36e0c06 284 } break;
pinofal 2:93bba36e0c06 285
pinofal 2:93bba36e0c06 286 // SOL
francesco01 3:3895d3f389b5 287 case 'j':
francesco01 3:3895d3f389b5 288 case 'J':
pinofal 2:93bba36e0c06 289 {
pinofal 2:93bba36e0c06 290 fFreq=392.0;
pinofal 2:93bba36e0c06 291 pc.printf("\n\r--- Generazione SOL = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 292 bStop = false;
pinofal 2:93bba36e0c06 293 } break;
pinofal 2:93bba36e0c06 294 // LA
francesco01 3:3895d3f389b5 295 case 'k':
francesco01 3:3895d3f389b5 296 case 'K':
pinofal 2:93bba36e0c06 297 {
pinofal 2:93bba36e0c06 298 fFreq=440.0; // frequenza della sinusoide LA da generare
pinofal 2:93bba36e0c06 299 pc.printf("\n\r--- Generazione LA = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 300 bStop = false;
pinofal 2:93bba36e0c06 301 } break;
pinofal 2:93bba36e0c06 302 //SI
francesco01 3:3895d3f389b5 303 case 'l':
francesco01 3:3895d3f389b5 304 case 'L':
pinofal 2:93bba36e0c06 305 {
pinofal 2:93bba36e0c06 306 fFreq=493.88;// frequenza della sinusoide SI da generare
pinofal 2:93bba36e0c06 307 pc.printf("\n\r--- Generazione SI = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 308 bStop = false;
pinofal 2:93bba36e0c06 309 } break;
pinofal 2:93bba36e0c06 310
pinofal 2:93bba36e0c06 311 // pausa
pinofal 2:93bba36e0c06 312 case ' ':
pinofal 2:93bba36e0c06 313 {
francesco01 4:6225b049c06b 314 bStop = true;
francesco01 4:6225b049c06b 315 pc.printf("\n\r--- Generazione pausa = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 4:6225b049c06b 316
pinofal 2:93bba36e0c06 317 } break;
francesco01 4:6225b049c06b 318 //DO
francesco01 4:6225b049c06b 319 case 'b':
francesco01 4:6225b049c06b 320 case 'B':
francesco01 4:6225b049c06b 321 {
francesco01 4:6225b049c06b 322
francesco01 4:6225b049c06b 323 fFreq=0;// stop
francesco01 4:6225b049c06b 324 pc.printf("\n\r--- Generazione Stop = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 4:6225b049c06b 325 bStop = false;
francesco01 4:6225b049c06b 326 } break;
francesco01 4:6225b049c06b 327
pinofal 2:93bba36e0c06 328 default:
pinofal 2:93bba36e0c06 329 {
pinofal 2:93bba36e0c06 330 bStop=true; // se la nota non è riconosciuta blocca la generazione
pinofal 2:93bba36e0c06 331 pc.printf("\n\r--- Wrong Tone ---\n\r");
pinofal 2:93bba36e0c06 332 } break;
pinofal 2:93bba36e0c06 333 } // switch (cReadChar)
pinofal 2:93bba36e0c06 334
pinofal 2:93bba36e0c06 335 // genera la frequenza relativa alla nota che è stata selezionata
pinofal 2:93bba36e0c06 336 fAmp = 0.1; // coefficiente per il quale viene moltiplicato l'ampiezza massima
pinofal 2:93bba36e0c06 337 fDeltaT = 1.0/(fFreq*SAMPLESINENUM);
pinofal 2:93bba36e0c06 338 CalculateSinewave(32767, (32767*fAmp), (PI/2.0)); // generazione della sinusoide con valori nominali
pinofal 2:93bba36e0c06 339 SampleOutTicker.attach(&SampleOut,fDeltaT); // avvia output della sinusoide per generazione
pinofal 2:93bba36e0c06 340
pinofal 2:93bba36e0c06 341
pinofal 2:93bba36e0c06 342 }
pinofal 2:93bba36e0c06 343 else // se non è stato premuto nessun tasto
pinofal 2:93bba36e0c06 344 {
pinofal 2:93bba36e0c06 345
pinofal 2:93bba36e0c06 346 }
pinofal 2:93bba36e0c06 347 }
pinofal 2:93bba36e0c06 348
pinofal 2:93bba36e0c06 349 /******* START ONDA DIGITALE FUNZIONA *****
pinofal 2:93bba36e0c06 350 led1=1;
pinofal 2:93bba36e0c06 351 led2=1;
pinofal 2:93bba36e0c06 352 led3=1;
pinofal 2:93bba36e0c06 353 while(true)
pinofal 2:93bba36e0c06 354 {
pinofal 2:93bba36e0c06 355 DigitalWave=0;
pinofal 2:93bba36e0c06 356 //wait_us(2024); //SI
pinofal 2:93bba36e0c06 357 //wait_us(2551); //SOL
pinofal 2:93bba36e0c06 358 wait_us(1515); //MI
pinofal 2:93bba36e0c06 359 DigitalWave=1;
pinofal 2:93bba36e0c06 360 wait_us(1515);
pinofal 2:93bba36e0c06 361 }
pinofal 2:93bba36e0c06 362 ****** END ONDA DIGITALE FUNZIONA ******/
pinofal 2:93bba36e0c06 363 }