Esercizio aggiornato

Dependencies:   mbed

Fork of Amaldi_9_Exercise_Sound-Generation by Amaldi

Committer:
francesco01
Date:
Wed May 16 16:38:00 2018 +0000
Revision:
3:3895d3f389b5
Parent:
2:93bba36e0c06
Child:
4:6225b049c06b
Modifica con # e b

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
pinofal 2:93bba36e0c06 13 #define C 261.63
pinofal 2:93bba36e0c06 14 #define Cd 277.18
pinofal 2:93bba36e0c06 15 #define Db 277.18
pinofal 2:93bba36e0c06 16 #define D 293.66
pinofal 2:93bba36e0c06 17 #define Dd 311.13
pinofal 2:93bba36e0c06 18 #define Eb 311.13
pinofal 2:93bba36e0c06 19 #define E 329.63
pinofal 2:93bba36e0c06 20 #define F 349.23
pinofal 2:93bba36e0c06 21 #define Fd 369.99
pinofal 2:93bba36e0c06 22 #define Gb 369.99
pinofal 2:93bba36e0c06 23 #define G 392.9
pinofal 2:93bba36e0c06 24 #define Gd 415.3
pinofal 2:93bba36e0c06 25 #define Ab 415.3
pinofal 2:93bba36e0c06 26 #define A 440.0
pinofal 2:93bba36e0c06 27 #define Ad 466.16
pinofal 2:93bba36e0c06 28 #define Bb 466.16
pinofal 2:93bba36e0c06 29 #define B 493.18
pinofal 2:93bba36e0c06 30
pinofal 2:93bba36e0c06 31
pinofal 2:93bba36e0c06 32
pinofal 2:93bba36e0c06 33
pinofal 2:93bba36e0c06 34
pinofal 2:93bba36e0c06 35
pinofal 2:93bba36e0c06 36 // numero di campioni che compongono un periodo della sinusoide in Output sull'ADC
pinofal 2:93bba36e0c06 37 #define SAMPLESINENUM 45// consigliabile avere multipli di 45
pinofal 2:93bba36e0c06 38
pinofal 2:93bba36e0c06 39 // parametri dell'onda coseno da generare
pinofal 2:93bba36e0c06 40 #define PI (3.141592653589793238462)
pinofal 2:93bba36e0c06 41 #define AMPLITUDE 32767 //(1.0) // x * 3.3V
pinofal 2:93bba36e0c06 42 #define PHASE (PI/2) // 2*pi è un periodo
pinofal 2:93bba36e0c06 43 #define OFFSET 32767 //(0x7FFF)
pinofal 2:93bba36e0c06 44
pinofal 2:93bba36e0c06 45 // numero di note componenti la scala diatonica
pinofal 2:93bba36e0c06 46 #define NUMTONE 120
pinofal 2:93bba36e0c06 47
pinofal 2:93bba36e0c06 48 // Output LED di diagnostica
pinofal 2:93bba36e0c06 49 DigitalOut led(LED1);
pinofal 2:93bba36e0c06 50
pinofal 2:93bba36e0c06 51 // ticker per la generazione dell'onda con DAC
pinofal 2:93bba36e0c06 52 Ticker SampleOutTicker;
pinofal 2:93bba36e0c06 53
pinofal 2:93bba36e0c06 54 // Buffer contenente la sinusoide da porre in output.
pinofal 2:93bba36e0c06 55 unsigned short usaSine[SAMPLESINENUM];
pinofal 2:93bba36e0c06 56
pinofal 2:93bba36e0c06 57 // prototipo di funzione che genera i campioni della sinusoide da utilizzare per la generazione tramite DAC
pinofal 2:93bba36e0c06 58 void CalculateSinewave(void);
pinofal 2:93bba36e0c06 59
pinofal 2:93bba36e0c06 60 // carattere in arrivo dal PC
pinofal 2:93bba36e0c06 61 volatile char cReadChar;
pinofal 2:93bba36e0c06 62
pinofal 2:93bba36e0c06 63 // indice, nell'array, del campione da porre in output
pinofal 2:93bba36e0c06 64 volatile int nSampleOutIndex;
pinofal 2:93bba36e0c06 65 // contatore dei campioni in output sul DAC
pinofal 2:93bba36e0c06 66 volatile int nSampleOutCount;
pinofal 2:93bba36e0c06 67 // Periodo di generazione campioni in output DeltaT = T/NumSample
pinofal 2:93bba36e0c06 68 double fDeltaT;
pinofal 2:93bba36e0c06 69 // amplificazione per il dato da spedire sull'ADC
pinofal 2:93bba36e0c06 70 volatile double fAmp;
pinofal 2:93bba36e0c06 71 //volatile double fAmpNew;
pinofal 2:93bba36e0c06 72 // flag per bloccare la generazione del segnale
pinofal 2:93bba36e0c06 73 volatile bool bStop;
pinofal 2:93bba36e0c06 74 // frequenza segnale da generare
pinofal 2:93bba36e0c06 75 volatile double fFreq;
pinofal 2:93bba36e0c06 76 // periodo della sinusoide da generare
pinofal 2:93bba36e0c06 77 double fPeriod;
pinofal 2:93bba36e0c06 78 double dDiatonic[NUMTONE];
pinofal 2:93bba36e0c06 79
pinofal 2:93bba36e0c06 80 //****************************
pinofal 2:93bba36e0c06 81 // Create the sinewave buffer
pinofal 2:93bba36e0c06 82 //****************************
pinofal 2:93bba36e0c06 83 void CalculateSinewave(int nOffset, int nAmplitude, double fPhase)
pinofal 2:93bba36e0c06 84 {
pinofal 2:93bba36e0c06 85 // variabile contenente l'angolo in radianti
pinofal 2:93bba36e0c06 86 double fRads;
pinofal 2:93bba36e0c06 87 // indici per i cicli
pinofal 2:93bba36e0c06 88 int nIndex;
pinofal 2:93bba36e0c06 89 // passo in frequenza fissato dal numero di campioni in cui voglio dividere un periodo di sinusoide: DeltaF = 360°/NUMSAMPLE
pinofal 2:93bba36e0c06 90 double fDeltaF;
pinofal 2:93bba36e0c06 91 // angolo per il quale bisogna calcolare il valore di sinusoide: fAngle = nIndex*DeltaF
pinofal 2:93bba36e0c06 92 double fAngle;
pinofal 2:93bba36e0c06 93
pinofal 2:93bba36e0c06 94 fDeltaF = 360.0/SAMPLESINENUM;
pinofal 2:93bba36e0c06 95 for (nIndex = 0; nIndex < SAMPLESINENUM; nIndex++)
pinofal 2:93bba36e0c06 96 {
pinofal 2:93bba36e0c06 97 fAngle = nIndex*fDeltaF; // angolo per il quale bisogna calcolare il campione di sinusoide
pinofal 2:93bba36e0c06 98 fRads = (PI * fAngle)/180.0; // Convert degree in radian
pinofal 2:93bba36e0c06 99 //usaSine[nIndex] = AMPLITUDE * cos(fRads + PHASE) + OFFSET;
pinofal 2:93bba36e0c06 100 usaSine[nIndex] = nAmplitude * cos(fRads + fPhase) + nOffset;
pinofal 2:93bba36e0c06 101 }
pinofal 2:93bba36e0c06 102 }
pinofal 2:93bba36e0c06 103
pinofal 2:93bba36e0c06 104
pinofal 2:93bba36e0c06 105 //**********************************************
pinofal 2:93bba36e0c06 106 // Crea le frequenze delle note del pianoforte
pinofal 2:93bba36e0c06 107 //**********************************************
pinofal 2:93bba36e0c06 108 void CreateDiatonic()
pinofal 2:93bba36e0c06 109 {
pinofal 2:93bba36e0c06 110 int nTono;
pinofal 2:93bba36e0c06 111 int nOttava;
pinofal 2:93bba36e0c06 112
pinofal 2:93bba36e0c06 113 // ottava centrale = ottava 4
pinofal 2:93bba36e0c06 114 dDiatonic[4*12+0]=261.63; // C
pinofal 2:93bba36e0c06 115 dDiatonic[4*12+1]=277.18; // C#/Db
pinofal 2:93bba36e0c06 116 dDiatonic[4*12+2]=293.66; // D
pinofal 2:93bba36e0c06 117 dDiatonic[4*12+3]=311.13; // D#/Eb
pinofal 2:93bba36e0c06 118 dDiatonic[4*12+4]=329.63; // E
pinofal 2:93bba36e0c06 119 dDiatonic[4*12+5]=349.23; // F
pinofal 2:93bba36e0c06 120 dDiatonic[4*12+6]=369.99; // F#/Gb
pinofal 2:93bba36e0c06 121 dDiatonic[4*12+7]=392.00; // G
pinofal 2:93bba36e0c06 122 dDiatonic[4*12+8]=415.30; // G#/Ab
pinofal 2:93bba36e0c06 123 dDiatonic[4*12+9]=440.00; // A
pinofal 2:93bba36e0c06 124 dDiatonic[4*12+10]=466.16; // A#/Bb
pinofal 2:93bba36e0c06 125 dDiatonic[4*12+11]=493.88; // B
pinofal 2:93bba36e0c06 126
pinofal 2:93bba36e0c06 127 // dalla ottava 5 alla 9
pinofal 2:93bba36e0c06 128 for(nOttava=5; nOttava<9; nOttava++)
pinofal 2:93bba36e0c06 129 {
pinofal 2:93bba36e0c06 130 for(nTono=0; nTono<12; nTono++)
pinofal 2:93bba36e0c06 131 {
pinofal 2:93bba36e0c06 132 dDiatonic[(nOttava*12)+nTono]=dDiatonic[((nOttava-1)*12)+nTono]*2;
pinofal 2:93bba36e0c06 133 }
pinofal 2:93bba36e0c06 134 }
pinofal 2:93bba36e0c06 135
pinofal 2:93bba36e0c06 136 // dalla ottava 0 alla 3
pinofal 2:93bba36e0c06 137 for(nOttava=3; nOttava>=0; nOttava--)
pinofal 2:93bba36e0c06 138 {
pinofal 2:93bba36e0c06 139 for(nTono=0; nTono<12; nTono++)
pinofal 2:93bba36e0c06 140 {
pinofal 2:93bba36e0c06 141 dDiatonic[(nOttava*12)+nTono]=dDiatonic[((nOttava+1)*12)+nTono]/2;
pinofal 2:93bba36e0c06 142 }
pinofal 2:93bba36e0c06 143 }
pinofal 2:93bba36e0c06 144 }
pinofal 2:93bba36e0c06 145
pinofal 2:93bba36e0c06 146 //***************************
pinofal 2:93bba36e0c06 147 // generazione sample da DAC
pinofal 2:93bba36e0c06 148 //***************************
pinofal 2:93bba36e0c06 149 void SampleOut()
pinofal 2:93bba36e0c06 150 {
pinofal 2:93bba36e0c06 151 // se è stato inviato il comando Stop, non fare niente fino a nuovo comando
pinofal 2:93bba36e0c06 152 if(bStop)
pinofal 2:93bba36e0c06 153 {
pinofal 2:93bba36e0c06 154 }
pinofal 2:93bba36e0c06 155 else // se non è stato inviato il comando di bStop continua
pinofal 2:93bba36e0c06 156 {
pinofal 2:93bba36e0c06 157 // output del campione della forma d'onda
pinofal 2:93bba36e0c06 158 OutWave.write_u16(usaSine[nSampleOutIndex]);
pinofal 2:93bba36e0c06 159
pinofal 2:93bba36e0c06 160 // incrementa l'indice del campione in output, modulo NUMSAMPLE: se NUMSAMPLE è 360, nSampleOutIndex va da 0 a 359
pinofal 2:93bba36e0c06 161 nSampleOutIndex++;
pinofal 2:93bba36e0c06 162 if(nSampleOutIndex >= SAMPLESINENUM)
pinofal 2:93bba36e0c06 163 {
pinofal 2:93bba36e0c06 164 nSampleOutIndex=0;
pinofal 2:93bba36e0c06 165 }
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 // Loop Principale
pinofal 2:93bba36e0c06 175 //*******************
pinofal 2:93bba36e0c06 176 int main()
pinofal 2:93bba36e0c06 177 {
pinofal 2:93bba36e0c06 178 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 2:93bba36e0c06 179 pc.baud(921600); //921600 bps
pinofal 2:93bba36e0c06 180
pinofal 2:93bba36e0c06 181
pinofal 2:93bba36e0c06 182 // messaggio di benvenuto
pinofal 2:93bba36e0c06 183 pc.printf("\r\nHallo Amaldi Students - Exercise 9 \r\n");
pinofal 2:93bba36e0c06 184 pc.printf("\r\n*** SineWave Generation ***\r\n");
pinofal 2:93bba36e0c06 185
pinofal 2:93bba36e0c06 186 //inizializza variabili
pinofal 2:93bba36e0c06 187 cReadChar = 0;
pinofal 2:93bba36e0c06 188 nSampleOutIndex=0;
pinofal 2:93bba36e0c06 189 nSampleOutCount=0;
pinofal 2:93bba36e0c06 190 bStop=true;
pinofal 2:93bba36e0c06 191
pinofal 2:93bba36e0c06 192 // test dei LED
pinofal 2:93bba36e0c06 193 led1=1; //Verde
pinofal 2:93bba36e0c06 194 wait_ms(1000);
pinofal 2:93bba36e0c06 195 led1=0;
pinofal 2:93bba36e0c06 196 led2=1; // Blu
pinofal 2:93bba36e0c06 197 wait_ms(1000);
pinofal 2:93bba36e0c06 198 led2=0;
pinofal 2:93bba36e0c06 199 led3=1; //Rosso
pinofal 2:93bba36e0c06 200 wait_ms(1000);
pinofal 2:93bba36e0c06 201 led3=0;
pinofal 2:93bba36e0c06 202
pinofal 2:93bba36e0c06 203
pinofal 2:93bba36e0c06 204 while(true)
pinofal 2:93bba36e0c06 205 {
pinofal 2:93bba36e0c06 206 // verifica se è arrivato un carattere dalla seriale del pc
pinofal 2:93bba36e0c06 207 if(pc.readable())
pinofal 2:93bba36e0c06 208 {
pinofal 2:93bba36e0c06 209 cReadChar = pc.getc(); // Read hyperterminal
pinofal 2:93bba36e0c06 210
pinofal 2:93bba36e0c06 211 // genera la nota corrispondente al carattere ricevuto
pinofal 2:93bba36e0c06 212 switch(cReadChar)
pinofal 2:93bba36e0c06 213 {
francesco01 3:3895d3f389b5 214 //La#
francesco01 3:3895d3f389b5 215 case 'o':
francesco01 3:3895d3f389b5 216 case 'O':
francesco01 3:3895d3f389b5 217 {
francesco01 3:3895d3f389b5 218 fFreq=466.16;// frequenza della sinusoide La#
francesco01 3:3895d3f389b5 219 pc.printf("\n\r--- Generazione La#_SIb= %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 220 bStop = false;
francesco01 3:3895d3f389b5 221 } break;
francesco01 3:3895d3f389b5 222 //sol#
francesco01 3:3895d3f389b5 223 case 'u':
francesco01 3:3895d3f389b5 224 case 'U':
francesco01 3:3895d3f389b5 225 {
francesco01 3:3895d3f389b5 226 fFreq=415.3;// frequenza della sinusoide Sol#
francesco01 3:3895d3f389b5 227 pc.printf("\n\r--- Generazione Sol#_LAb = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 228 bStop = false;
francesco01 3:3895d3f389b5 229 } break;
francesco01 3:3895d3f389b5 230 //Sol_b
francesco01 3:3895d3f389b5 231 case 'y':
francesco01 3:3895d3f389b5 232 case 'Y':
francesco01 3:3895d3f389b5 233 {
francesco01 3:3895d3f389b5 234 fFreq=369.99;// frequenza della sinusoide Sol_b
francesco01 3:3895d3f389b5 235 pc.printf("\n\r--- Generazione Solb_Fa# = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 236 bStop = false;
francesco01 3:3895d3f389b5 237 } break;
francesco01 3:3895d3f389b5 238 //DO#
francesco01 3:3895d3f389b5 239 case 'e':
francesco01 3:3895d3f389b5 240 case 'E':
francesco01 3:3895d3f389b5 241 {
francesco01 3:3895d3f389b5 242 fFreq=277.18;// frequenza della sinusoide DO diesis
francesco01 3:3895d3f389b5 243 pc.printf("\n\r--- Generazione DO# = %.2f Hz ampiezza nominale ---\n\r", fFreq);
francesco01 3:3895d3f389b5 244 bStop = false;
francesco01 3:3895d3f389b5 245 } break;
pinofal 2:93bba36e0c06 246 //DO
francesco01 3:3895d3f389b5 247 case 'd':
francesco01 3:3895d3f389b5 248 case 'D':
pinofal 2:93bba36e0c06 249 {
pinofal 2:93bba36e0c06 250 fFreq=261.63;// frequenza della sinusoide DO da generare
pinofal 2:93bba36e0c06 251 pc.printf("\n\r--- Generazione DO = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 252 bStop = false;
pinofal 2:93bba36e0c06 253 } break;
pinofal 2:93bba36e0c06 254 // RE
francesco01 3:3895d3f389b5 255 case 'f':
francesco01 3:3895d3f389b5 256 case 'F':
pinofal 2:93bba36e0c06 257 {
pinofal 2:93bba36e0c06 258 fFreq=293.66;// frequenza della sinusoide RE da generare
pinofal 2:93bba36e0c06 259 pc.printf("\n\r--- Generazione RE = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 260 bStop = false;
pinofal 2:93bba36e0c06 261 } break;
pinofal 2:93bba36e0c06 262 // RE#/MIb
francesco01 3:3895d3f389b5 263 case 'r':
francesco01 3:3895d3f389b5 264 case 'R':
pinofal 2:93bba36e0c06 265 {
pinofal 2:93bba36e0c06 266 fFreq=311.13;
pinofal 2:93bba36e0c06 267 pc.printf("\n\r--- Generazione Mib = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 268 bStop = false;
pinofal 2:93bba36e0c06 269 } break;
francesco01 3:3895d3f389b5 270 case 'g':
francesco01 3:3895d3f389b5 271 case 'G':
pinofal 2:93bba36e0c06 272 {
pinofal 2:93bba36e0c06 273 fFreq=329.63; // frequenza della sinusoide MI da generare
pinofal 2:93bba36e0c06 274 pc.printf("\n\r--- Generazione MI = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 275 bStop = false;
pinofal 2:93bba36e0c06 276 } break;
francesco01 3:3895d3f389b5 277 case 'h':
francesco01 3:3895d3f389b5 278 case 'H':
pinofal 2:93bba36e0c06 279 {
pinofal 2:93bba36e0c06 280 fFreq=349.23;// frequenza della sinusoide FA da generare
pinofal 2:93bba36e0c06 281 pc.printf("\n\r--- Generazione FA = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 282 bStop = false;
pinofal 2:93bba36e0c06 283 } break;
pinofal 2:93bba36e0c06 284
pinofal 2:93bba36e0c06 285 // SOL
francesco01 3:3895d3f389b5 286 case 'j':
francesco01 3:3895d3f389b5 287 case 'J':
pinofal 2:93bba36e0c06 288 {
pinofal 2:93bba36e0c06 289 fFreq=392.0;
pinofal 2:93bba36e0c06 290 pc.printf("\n\r--- Generazione SOL = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 291 bStop = false;
pinofal 2:93bba36e0c06 292 } break;
pinofal 2:93bba36e0c06 293 // LA
francesco01 3:3895d3f389b5 294 case 'k':
francesco01 3:3895d3f389b5 295 case 'K':
pinofal 2:93bba36e0c06 296 {
pinofal 2:93bba36e0c06 297 fFreq=440.0; // frequenza della sinusoide LA da generare
pinofal 2:93bba36e0c06 298 pc.printf("\n\r--- Generazione LA = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 299 bStop = false;
pinofal 2:93bba36e0c06 300 } break;
pinofal 2:93bba36e0c06 301 //SI
francesco01 3:3895d3f389b5 302 case 'l':
francesco01 3:3895d3f389b5 303 case 'L':
pinofal 2:93bba36e0c06 304 {
pinofal 2:93bba36e0c06 305 fFreq=493.88;// frequenza della sinusoide SI da generare
pinofal 2:93bba36e0c06 306 pc.printf("\n\r--- Generazione SI = %.2f Hz ampiezza nominale ---\n\r", fFreq);
pinofal 2:93bba36e0c06 307 bStop = false;
pinofal 2:93bba36e0c06 308 } break;
pinofal 2:93bba36e0c06 309
pinofal 2:93bba36e0c06 310 // pausa
pinofal 2:93bba36e0c06 311 case ' ':
pinofal 2:93bba36e0c06 312 {
pinofal 2:93bba36e0c06 313 bStop=true;
pinofal 2:93bba36e0c06 314 pc.printf("\n\r--- Generation Stopped ---\n\r");
pinofal 2:93bba36e0c06 315 } break;
pinofal 2:93bba36e0c06 316 default:
pinofal 2:93bba36e0c06 317 {
pinofal 2:93bba36e0c06 318 bStop=true; // se la nota non è riconosciuta blocca la generazione
pinofal 2:93bba36e0c06 319 pc.printf("\n\r--- Wrong Tone ---\n\r");
pinofal 2:93bba36e0c06 320 } break;
pinofal 2:93bba36e0c06 321 } // switch (cReadChar)
pinofal 2:93bba36e0c06 322
pinofal 2:93bba36e0c06 323 // genera la frequenza relativa alla nota che è stata selezionata
pinofal 2:93bba36e0c06 324 fAmp = 0.1; // coefficiente per il quale viene moltiplicato l'ampiezza massima
pinofal 2:93bba36e0c06 325 fDeltaT = 1.0/(fFreq*SAMPLESINENUM);
pinofal 2:93bba36e0c06 326 CalculateSinewave(32767, (32767*fAmp), (PI/2.0)); // generazione della sinusoide con valori nominali
pinofal 2:93bba36e0c06 327 SampleOutTicker.attach(&SampleOut,fDeltaT); // avvia output della sinusoide per generazione
pinofal 2:93bba36e0c06 328
pinofal 2:93bba36e0c06 329
pinofal 2:93bba36e0c06 330 }
pinofal 2:93bba36e0c06 331 else // se non è stato premuto nessun tasto
pinofal 2:93bba36e0c06 332 {
pinofal 2:93bba36e0c06 333
pinofal 2:93bba36e0c06 334 }
pinofal 2:93bba36e0c06 335 }
pinofal 2:93bba36e0c06 336
pinofal 2:93bba36e0c06 337 /******* START ONDA DIGITALE FUNZIONA *****
pinofal 2:93bba36e0c06 338 led1=1;
pinofal 2:93bba36e0c06 339 led2=1;
pinofal 2:93bba36e0c06 340 led3=1;
pinofal 2:93bba36e0c06 341 while(true)
pinofal 2:93bba36e0c06 342 {
pinofal 2:93bba36e0c06 343 DigitalWave=0;
pinofal 2:93bba36e0c06 344 //wait_us(2024); //SI
pinofal 2:93bba36e0c06 345 //wait_us(2551); //SOL
pinofal 2:93bba36e0c06 346 wait_us(1515); //MI
pinofal 2:93bba36e0c06 347 DigitalWave=1;
pinofal 2:93bba36e0c06 348 wait_us(1515);
pinofal 2:93bba36e0c06 349 }
pinofal 2:93bba36e0c06 350 ****** END ONDA DIGITALE FUNZIONA ******/
pinofal 2:93bba36e0c06 351 }