Guest User

Untitled

a guest
Aug 26th, 2017
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.65 KB | None | 0 0
  1. /*
  2.   Arduino Mario Bros Tunes
  3.   With Piezo Buzzer and PWM
  4.  
  5.   Connect the positive side of the Buzzer to pin 3,
  6.   then the negative side to a 1k ohm resistor. Connect
  7.   the other side of the 1 k ohm resistor to
  8.   ground(GND) pin on the Arduino.
  9.  
  10.   by: Dipto Pratyaksa
  11.   last updated: 31/3/13
  12. */
  13.  
  14. /*************************************************
  15.  * Public Constants
  16.  *************************************************/
  17.  
  18. #define C0  16
  19. #define CS0 17
  20. #define D0  18
  21. #define DS0 19
  22. #define E0  21
  23. #define FS0 23
  24. #define G0  24
  25. #define A0  27
  26. #define AS0 29
  27. #define B0  31
  28. #define C1  33
  29. #define CS1 35
  30. #define D1  37
  31. #define DS1 39
  32. #define E1  41
  33. #define F1  44
  34. #define FS1 46
  35. #define G1  49
  36. #define GS1 52
  37. #define A1  55
  38. #define AS1 58
  39. #define B1  62
  40. #define C2  65
  41. #define CS2 69
  42. #define D2  73
  43. #define DS2 78
  44. #define E2  82
  45. #define F2  87
  46. #define FS2 93
  47. #define G2  98
  48. #define GS2 104
  49. #define A2  110
  50. #define AS2 117
  51. #define B2  123
  52. #define C3  131
  53. #define CS3 139
  54. #define D3  147
  55. #define DS3 156
  56. #define E3  165
  57. #define F3  175
  58. #define FS3 185
  59. #define G3  196
  60. #define GS3 208
  61. #define A3  220
  62. #define AS3 233
  63. #define B3  247
  64. #define C4  262  
  65. #define CS4 277
  66. #define D4  294
  67. #define DS4 311
  68. #define E4  330   //To save space comment out
  69. #define F4  349   //notes not used :)
  70. #define FS4 370
  71. #define N_G4  392   //lowest Note in Song
  72. #define N_GS4 415
  73. #define N_A4  440
  74. #define N_AS4 466
  75. #define N_B4  494
  76. #define N_C5  523  
  77. #define N_CS5 554
  78. #define N_D5  587  
  79. #define N_DS5 622
  80. #define N_E5  659
  81. #define N_F5  698
  82. #define N_FS5 740
  83. #define N_G5  784  
  84. #define N_GS5 831
  85. #define N_A5  880
  86. #define N_AS5 932
  87. #define N_B5  988  //Highest note in song
  88. #define C6  1047
  89. #define CS6 1109
  90. #define D6  1175
  91. #define DS6 1245
  92. #define E6  1319
  93. #define F6  1397
  94. #define FS6 1480
  95. #define G6  1568
  96. #define GS6 1661
  97. #define A6  1760
  98. #define AS6 1865
  99. #define B6  1976
  100. #define C7  2093
  101. #define CS7 2217
  102. #define D7  2349
  103. #define DS7 2489
  104. #define E7  2637
  105. #define F7  2794
  106. #define FS7 2960
  107. #define G7  3136
  108. #define GS7 3322
  109. #define A7  3520
  110. #define AS7 3729
  111. #define B7  3951
  112. #define C8  4186
  113. #define CS8 4435
  114. #define D8  4699
  115. #define DS8 4978
  116. #define ES8 5247
  117. #define F8  5587
  118. #define FS8 5919
  119. #define G8  6271
  120. #define GS8 6644
  121. #define A8  7040
  122. #define AS8 7458
  123. #define B8  7902
  124.  
  125.  
  126. #define NOTE_B0  31
  127. #define NOTE_C1  33
  128. #define NOTE_CS1 35
  129. #define NOTE_D1  37
  130. #define NOTE_DS1 39
  131. #define NOTE_E1  41
  132. #define NOTE_F1  44
  133. #define NOTE_FS1 46
  134. #define NOTE_G1  49
  135. #define NOTE_GS1 52
  136. #define NOTE_A1  55
  137. #define NOTE_AS1 58
  138. #define NOTE_B1  62
  139. #define NOTE_C2  65
  140. #define NOTE_CS2 69
  141. #define NOTE_D2  73
  142. #define NOTE_DS2 78
  143. #define NOTE_E2  82
  144. #define NOTE_F2  87
  145. #define NOTE_FS2 93
  146. #define NOTE_G2  98
  147. #define NOTE_GS2 104
  148. #define NOTE_A2  110
  149. #define NOTE_AS2 117
  150. #define NOTE_B2  123
  151. #define NOTE_C3  131
  152. #define NOTE_CS3 139
  153. #define NOTE_D3  147
  154. #define NOTE_DS3 156
  155. #define NOTE_E3  165
  156. #define NOTE_F3  175
  157. #define NOTE_FS3 185
  158. #define NOTE_G3  196
  159. #define NOTE_GS3 208
  160. #define NOTE_A3  220
  161. #define NOTE_AS3 233
  162. #define NOTE_B3  247
  163. #define NOTE_C4  262
  164. #define NOTE_CS4 277
  165. #define NOTE_D4  294
  166. #define NOTE_DS4 311
  167. #define NOTE_E4  330
  168. #define NOTE_F4  349
  169. #define NOTE_FS4 370
  170. #define NOTE_G4  392
  171. #define NOTE_GS4 415
  172. #define NOTE_A4  440
  173. #define NOTE_AS4 466
  174. #define NOTE_B4  494
  175. #define NOTE_C5  523
  176. #define NOTE_CS5 554
  177. #define NOTE_D5  587
  178. #define NOTE_DS5 622
  179. #define NOTE_E5  659
  180. #define NOTE_F5  698
  181. #define NOTE_FS5 740
  182. #define NOTE_G5  784
  183. #define NOTE_GS5 831
  184. #define NOTE_A5  880
  185. #define NOTE_AS5 932
  186. #define NOTE_B5  988
  187. #define NOTE_C6  1047
  188. #define NOTE_CS6 1109
  189. #define NOTE_D6  1175
  190. #define NOTE_DS6 1245
  191. #define NOTE_E6  1319
  192. #define NOTE_F6  1397
  193. #define NOTE_FS6 1480
  194. #define NOTE_G6  1568
  195. #define NOTE_GS6 1661
  196. #define NOTE_A6  1760
  197. #define NOTE_AS6 1865
  198. #define NOTE_B6  1976
  199. #define NOTE_C7  2093
  200. #define NOTE_CS7 2217
  201. #define NOTE_D7  2349
  202. #define NOTE_DS7 2489
  203. #define NOTE_E7  2637
  204. #define NOTE_F7  2794
  205. #define NOTE_FS7 2960
  206. #define NOTE_G7  3136
  207. #define NOTE_GS7 3322
  208. #define NOTE_A7  3520
  209. #define NOTE_AS7 3729
  210. #define NOTE_B7  3951
  211. #define NOTE_C8  4186
  212. #define NOTE_CS8 4435
  213. #define NOTE_D8  4699
  214. #define NOTE_DS8 4978
  215.  
  216.  
  217.  
  218. #define melodyPin 3
  219. //Mario main theme melody
  220. int melody[] = {/*
  221.   N_E5,N_F5,N_E5, N_D5,0, N_C5,N_D5, N_C5,N_A4,0,N_G4,N_A4,//1
  222.    N_E5,N_F5,N_E5, N_D5,0, N_C5,N_D5, N_C5,N_A4,0,N_GS4,//2
  223.    N_E5,N_F5,N_E5, N_D5,0, N_C5,N_D5, N_C5,N_A4,0,N_G4,N_A4,//3
  224.    N_E5,N_F5,N_E5, N_D5, 0, N_C5, 0, N_D5, 0, N_A5, 0, N_G5, 0, N_F5,//4
  225.    N_E5,N_F5,N_E5, N_D5,0, N_C5,N_D5, N_C5,N_A4,0,N_G4,N_A4,//5
  226.    N_E5,N_F5,N_E5, N_D5, 0, N_C5, 0, N_D5, 0, N_A5, 0, N_G5, 0, N_F5,//6
  227.    E7,F7,E7, D7,0, C7,D7, C7,A6,0,G6,A6,//7
  228.    E7,F7,E7, D7, 0, C7, 0, D7, 0, A7, 0, G7, 0, F7,//8
  229.  
  230.    //START
  231. */
  232.    0,G7, E7, A6, C7, D7, E7, 0, E7, D7,
  233.    0,C7, C7, C7, 0 , C7, C7, C7,
  234.    0,C7,E7,D7, A6, 0,
  235.    0,G7, E7, A6, C7, D7, E7, 0, E7, D7,
  236.    0,C7, C7, C7, 0 , C7, C7, C7,
  237.    0, A6, A6, A6, 0, A6, A6, A6,
  238.    0, A6, C7, D7, E7, E7, E7, E7,
  239.    E7, C7, A6, E7, E7, D7,
  240.    D7, D7, G7, G7, E7, C7 ,
  241.    A6, G6, A6, 0,
  242.    0, A6, C7, D7, E7, E7, E7, E7,
  243.    C7, A6, E7, E7, D7,
  244.    D7, D7, G7, G7, E7, C7,
  245.    A6, C7, D7, 0, D7, D7,
  246.  
  247.  
  248.    //YOULLNEVER
  249.   D7, F7, D7, A7, C8,
  250.  
  251.    
  252. };
  253. //Mario main them tempo
  254. int tempo[] = {
  255. /*
  256.   24,24,24,24,24,24,24,24,12,12,
  257.   24,24,24,24,24,24,24,24,6,
  258.   24,24,24,24,24,24,24,24,12,12,
  259.   24,24,24,24, 24, 24, 24, 24, 24,
  260.   24,24,24,24,24,24,24,24,12,12,
  261.   24, 24, 24, 24, 24, 24, 24, 24, 6,
  262.   24,24,24,24,24,24,24,24,12,12,
  263.   24,24,24,24, 24, 24, 24, 24, 24,//8
  264. */
  265.   //START
  266.  
  267.   24, 24, 24, 12, 12, 16, 16, 16,//9
  268.   12, 24, 24, 12, 24, 24,
  269.   12, 24, 12, 24,
  270.   24, 24, 24, 12, 12, 16, 16, 16,
  271.   12, 24, 24, 12, 24, 24,
  272.   12, 24, 24, 12, 24, 24,
  273.   12, 12, 12, 12, 12, 12, 12,
  274.   12, 12, 12, 6, 6, 24,
  275.   12, 12, 6, 12, 12, 12,
  276.   12, 12, 12,
  277.   12, 12, 12, 12, 12, 12, 12,
  278.   12, 12, 6, 6, 6,
  279.   12, 12, 6, 12, 12, 6,
  280.   12, 12, 6, 12, 12,
  281.  
  282.  
  283.   //LAST SURPRISE
  284.   12, 12, 6, 3
  285.  
  286. };
  287.  
  288. int underworld_melody[] = {
  289.   NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4,
  290.   NOTE_AS3, NOTE_AS4, 0,
  291.   0,
  292.   NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4,
  293.   NOTE_AS3, NOTE_AS4, 0,
  294.   0,
  295.   NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4,
  296.   NOTE_DS3, NOTE_DS4, 0,
  297.   0,
  298.   NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4,
  299.   NOTE_DS3, NOTE_DS4, 0,
  300.   0, NOTE_DS4, NOTE_CS4, NOTE_D4,
  301.   NOTE_CS4, NOTE_DS4,
  302.   NOTE_DS4, NOTE_GS3,
  303.   NOTE_G3, NOTE_CS4,
  304.   NOTE_C4, NOTE_FS4, NOTE_F4, NOTE_E3, NOTE_AS4, NOTE_A4,
  305.   NOTE_GS4, NOTE_DS4, NOTE_B3,
  306.   NOTE_AS3, NOTE_A3, NOTE_GS3,
  307.   0, 0, 0
  308. };
  309. //Underwolrd tempo
  310. int underworld_tempo[] = {
  311.   12, 12, 12, 12,
  312.   12, 12, 6,
  313.   3,
  314.   12, 12, 12, 12,
  315.   12, 12, 6,
  316.   3,
  317.   12, 12, 12, 12,
  318.   12, 12, 6,
  319.   3,
  320.   12, 12, 12, 12,
  321.   12, 12, 6,
  322.   6, 18, 18, 18,
  323.   6, 6,
  324.   6, 6,
  325.   6, 6,
  326.   18, 18, 18, 18, 18, 18,
  327.   10, 10, 10,
  328.   10, 10, 10,
  329.   3, 3, 3
  330. };
  331.  
  332.  
  333. void setup(void)
  334. {
  335.   pinMode(3, OUTPUT);//buzzer
  336.   pinMode(13, OUTPUT);//led indicator when singing a note
  337.  
  338. }
  339. void loop()
  340. {
  341.   //sing the tunes
  342.   sing(1);
  343.  
  344.  
  345.  
  346. }
  347. int song = 0;
  348.  
  349.  
  350.  
  351. void sing(int s) {
  352.   // iterate over the notes of the melody:
  353.   song = s;
  354.   if (song == 2) {
  355.     Serial.println(" 'Underworld Theme'");
  356.     int size = sizeof(underworld_melody) / sizeof(int);
  357.     for (int thisNote = 0; thisNote < size; thisNote++) {
  358.  
  359.       // to calculate the note duration, take one second
  360.       // divided by the note type.
  361.       //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
  362.       int noteDuration = 1000 / underworld_tempo[thisNote];
  363.  
  364.       buzz(melodyPin, underworld_melody[thisNote], noteDuration);
  365.  
  366.       // to distinguish the notes, set a minimum time between them.
  367.       // the note's duration + 30% seems to work well:
  368.       int pauseBetweenNotes = noteDuration * 1.30;
  369.       delay(pauseBetweenNotes);
  370.  
  371.       // stop the tone playing:
  372.       buzz(melodyPin, 0, noteDuration);
  373.  
  374.     }
  375.  
  376.   } else {
  377.  
  378.     Serial.println(" 'Mario Theme'");
  379.     int size = sizeof(melody) / sizeof(int);
  380.     for (int thisNote = 0; thisNote < size; thisNote++) {
  381.     Serial.println("Wew");
  382.       // to calculate the note duration, take one second
  383.       // divided by the note type.
  384.       //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
  385.       int noteDuration = 1500 / tempo[thisNote];
  386.  
  387.       buzz(melodyPin, melody[thisNote], noteDuration);
  388.  
  389.       // to distinguish the notes, set a minimum time between them.
  390.       // the note's duration + 30% seems to work well:
  391.       int pauseBetweenNotes = noteDuration * 1.30;
  392.       delay(pauseBetweenNotes);
  393.  
  394.       // stop the tone playing:
  395.       buzz(melodyPin, 0, noteDuration);
  396.  
  397.     }
  398.   }
  399. }
  400.  
  401. void buzz(int targetPin, long frequency, long length) {
  402.   digitalWrite(13, HIGH);
  403.   long delayValue = 1000000 / frequency / 2; // calculate the delay value between transitions
  404.   //// 1 second's worth of microseconds, divided by the frequency, then split in half since
  405.   //// there are two phases to each cycle
  406.   long numCycles = frequency * length / 1000; // calculate the number of cycles for proper timing
  407.   //// multiply frequency, which is really cycles per second, by the number of seconds to
  408.   //// get the total number of cycles to produce
  409.   for (long i = 0; i < numCycles; i++) { // for the calculated length of time...
  410.     digitalWrite(targetPin, HIGH); // write the buzzer pin high to push out the diaphram
  411.     delayMicroseconds(delayValue); // wait for the calculated delay value
  412.     digitalWrite(targetPin, LOW); // write the buzzer pin low to pull back the diaphram
  413.     delayMicroseconds(delayValue); // wait again or the calculated delay value
  414.   }
  415.   digitalWrite(13, LOW);
  416.  
  417. }
Add Comment
Please, Sign In to add comment