Advertisement
Nicklaj

Untitled

Jun 7th, 2020
1,229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. //definizione delle note musicali (a,b,c,etc... nomi delle note
  2. //che vengono identificate con i numeri scritti accanto
  3. //R=pausa)
  4. #define  c     3830    
  5. #define  d     3400    
  6. #define  e     3038    
  7. #define  f     2864    
  8. #define  g     2550    
  9. #define  a     2272    
  10. #define  b     2028    
  11. #define  C     1912    
  12. #define  R     0
  13. // speakerOut è il pin del Piezo; int indica una variabile intera
  14. int speakerOut = 6;
  15.  
  16. //nel set up impostiamo i pin in OUTPUT(pin di uscita)
  17. void setup()
  18. {
  19.     //pinMode serve per mettere speakerOut in OUTPUT
  20.     pinMode(speakerOut, OUTPUT);  
  21.     //il ciclo for imposta tutti i pin da 7 a 13 in OUTPUT
  22.     //tramite variabile i (int sta per intera)
  23.     int i = 7;
  24.     for(i; i<14; i++);
  25.         pinMode(i, OUTPUT);
  26. }
  27.  
  28. //variabili necessarie a playTone per funzionare
  29. //melody=note
  30. //beats=lett. battiti per allungare la durata delle note
  31. //tempo=tempo complessivo
  32. //long è un tipo della variabile
  33. //pause=durata fra le note
  34. //playTone è la funzione da richiamare per eseguire la melodia
  35. int melody[] = {  C,  b,  g,  C,  b,   e,  R,  C,  c,  g, a, C };
  36. int beats[]  = { 16, 16, 16,  8,  8,  16, 32, 16, 16, 16, 8, 8 };
  37. int MAX_COUNT = sizeof(melody) / 2;
  38. long tempo = 10000;
  39. int pause = 1000;
  40. int rest_count = 100;
  41. int tone_ = 0;
  42. int beat = 0;
  43. long duration  = 0;
  44. void playTone() {
  45.   //elapsed_time=tempo trascorso dall'inizio
  46.   long elapsed_time = 0;
  47.   // n è la variabile che contiene quale led accendere
  48.   int n = 0;
  49.   switch(tone_) {
  50.     case 3830:
  51.     case 1912:
  52.         //c - do
  53.         n = 13;
  54.         break;
  55.     case 3400:
  56.         //f - fa
  57.         n = 12;
  58.         break;
  59.     case 3038:
  60.         //d - re
  61.         n = 11;
  62.         break;
  63.     case 2864:
  64.         //g - sol
  65.         n = 10;
  66.         break;
  67.     case 2550:
  68.         //e - mi
  69.         n = 9;
  70.         break;
  71.     case 2272:
  72.         //a - la
  73.         n = 8;
  74.         break;
  75.     case 2028:
  76.         //b - si
  77.         n = 7;
  78.         break;
  79.     default:
  80.         n = 0;
  81.   }
  82.   if(n != 0)
  83.     digitalWrite(n, HIGH);
  84.   //se è definita una melodia la riproduce
  85.   if (tone_ > 0) {
  86.     while (elapsed_time < duration) {
  87.       digitalWrite(n,LOW);
  88.       digitalWrite(speakerOut,HIGH);
  89.       delayMicroseconds(tone_ / 2);
  90.       digitalWrite(speakerOut, LOW);
  91.       delayMicroseconds(tone_ / 2);
  92.       elapsed_time += (tone_);
  93.       //questa successione permette di accendere un led
  94.       //in base alla nota che si sta riproducendo
  95.     }
  96.   }
  97.  
  98.  else {
  99.     for (int j = 0; j < rest_count; j++) {
  100.       delayMicroseconds(duration);  
  101.     }                                
  102.   }                                
  103. }
  104.  
  105.     //nel loop eseguiamo la melodia
  106. void loop()
  107. {
  108.     //impostiamo i parametri necessari alla riproduzione della melodia
  109.     for (int i=0; i<MAX_COUNT; i++) {
  110.     tone_ = melody[i];
  111.     beat = beats[i];
  112.     duration = beat * tempo;
  113.     playTone();
  114.     delayMicroseconds(pause);  
  115.   }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement