Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. #include <util/delay.h>
  2. #include <LiquidCrystal.h>
  3.  
  4. LiquidCrystal lcd(12, NULL, 11, 9,8,7,6);
  5.  
  6. const int speakerPin = 4;
  7. volatile int mod = 0; // 0 - stop, 1 - play
  8. volatile int track = 0; // numarul piesei
  9. volatile int n;
  10.  
  11. const int length[6] = {73,69,71,29,51,77}; //,64,63}; // numarul de note din fiecare piesa
  12. const char * notes[6] = {"ggagsed deggsgg ggagsed deggsgg DCbCDbCbabCabagabgagsgasgsesgeseddeggsgg ", \
  13. "ddaagfedcdefga ddaagfedcdefga avgavCDagfdefgfgavaagfedfedgfgavCDagfed" , \
  14. "cfffgagavCavafggfcfffgagavCavafggffaCDCvagfgavCcfagfccfffgagavCavafggf " , \
  15. "faagfvvagaCCbCaDCvagfeagffef ", \
  16. "aavCagfgagdgavCaggfgagff vavCDDaaCagfecavCagfgagff ", \
  17. "cffefaagCCCvagacffefaagCffeedcCCCfvaagCCCfvaagDDDCvavgavCffgaDDDCvavgavCffgf " };
  18. // "ggdgadbabCbaggsesgabsedd DCbCbabgasedggsgagdbbabCbabCbagsgCbagg ", \
  19. // "egbbbaCbagabgegasedeaaeesgsedgabbbaCbag DD bb baCdagabgegasede "} ;
  20. const int beats[6][77] = { { 2,2,1,1,1,1,4,2,2,2,2,2,2,4,2,2,2,2,1,1,1,1,4,2,2,2,2,2,2,4,2,2,3,1,1,1,1,1,3,1,1,1,1,1,3,1,1,1,1,1,3,1,1,1,1,1,3,1,1,1,1,1,3,1,2,2,2,2,2,2,4,2,2 }, \
  21. { 2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,4,2,2,2,2,2,2,4,1,1,2,4,2,2,2,2,2,2,2,2,2,2,8 } , \
  22. { 2,2,2,2,2,1,1,1,1,2,2,2,1,1,2,2,6,2,2,2,2,2,1,1,1,1,2,2,2,1,1,2,2,6,1,1,3,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,4,4,2,2,2,2,1,1,1,1,2,2,2,1,1,2,2,6,2 } , \
  23. { 2,3,1,2,2,2,2,2,2,2,2,2,2,6,2,3,1,2,2,2,2,2,2,2,2,2,2,6,2 }, \
  24. { 2,3,1,2,2,4,4,3,1,2,2,8,3,1,2,2,3,1,4,2,2,3,1,6,2,3,1,2,2,2,2,2,2,2,2,2,2,6,2,2,2,2,2,4,4,2,2,3,1,8,8}, \
  25. { 2,2,3,1,2,2,2,2,2,2,3,1,2,2,4,2,2,3,1,2,2,2,2,2,2,3,1,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,1,1,3,1,2,2,4,3,1,2,2,2,2,4,2,1,1,3,1,2,2,4,8} };
  26. // { 2,4,2,2,4,4,2,2,2,2,4,2,2,4,2,2,2,2,2,2,4,3,1,6,2,4,2,2,4,4,2,2,2,2,3,1,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,2,2,2,2,4,2,2,4,3,1,6,8 }, \
  27. // { 2,2,2,2,2,2,2,2,2,6,2,2,2,2,2,2,2,2,2,6,2,2,2,2,2,4,2,2,6,2,2,2,2,2,2,2,2,2,4,2,2,4,2,2,4,2,2,2,2,2,2,6,2,2,2,2,2,2,2,2,2,8,8 }};
  28. const int tempo[6] = {150,150,150,150,150,150}; //,150,150};
  29. const char * piesa[6] = {"Ding Dong Merrily on High ", \
  30. "God Rest Ye Merry Gentlemen ", \
  31. "O Little Town of Bethlehem ", \
  32. "While Shephards Watched ", \
  33. "In The Bleak Midwinter ", \
  34. "Hark the Herald " };
  35. // "O come all Ye Faithful ", \
  36. // "O Come O Come Emmanuel " };
  37.  
  38. void playTone(int tone, int duration) {
  39. for (long i = 0; i < duration * 1000L; i += tone * 2) {
  40. digitalWrite(speakerPin, HIGH);
  41. delayMicroseconds(tone);
  42. digitalWrite(speakerPin, LOW);
  43. delayMicroseconds(tone);
  44. }
  45. }
  46.  
  47. void playNote(char note, int duration) {
  48.  
  49. const char names[] = { 'c', 'd', 'e', 'f', 's', 'g', 'a', 'v', 'b', 'C', 'D', 'E' }; // note
  50. const int tones[] = { 1915, 1700, 1519, 1432, 1352, 1275, 1136, 1073, 1014, 956, 852, 758 }; // frecvente
  51.  
  52. for (int i = 0; i < 12; i++) {
  53. if (names[i] == note) playTone(tones[i], duration);
  54. }
  55. }
  56.  
  57. void setup() {
  58. pinMode(speakerPin, OUTPUT);
  59. lcd.begin(16, 2);
  60. lcd.noCursor();
  61. //activare int0 si int1
  62. EIMSK |= (1 << INT0);
  63. EIMSK |= (1 << INT1);
  64. // sei();
  65. }
  66.  
  67. void loop()
  68. {
  69. if (mod==0)
  70. {
  71. lcd.setCursor(0,0);
  72. lcd.print("Stop");
  73. lcd.setCursor(5,0);
  74. lcd.print("Piesa ");
  75. lcd.print(track+1);
  76. lcd.setCursor(0,1);
  77. lcd.print(" ");
  78. }
  79. else
  80. {
  81. for (n = 0; n < length[track]; n++)
  82. {
  83. if (mod==0) break;
  84. lcd.setCursor(0,0);
  85. lcd.print("Play");
  86. lcd.setCursor(5,0);
  87. lcd.print("Piesa ");
  88. lcd.print(track+1);
  89. lcd.setCursor(0,1);
  90. for (int j=n; j<(n+30); j++) lcd.print(piesa[track][j % 30]);
  91. if (notes[track][n] == ' ') delay(beats[track][n] * tempo[track]); // pauză
  92. else playNote(notes[track][n], beats[track][n] * tempo[track]);
  93. }
  94. // pauza intre note
  95. delay(tempo[track] / 2);
  96. }
  97. }
  98.  
  99. ISR(INT0_vect) {
  100. mod=!mod;
  101. _delay_ms(400);
  102. }
  103.  
  104. ISR(INT1_vect) {
  105. track++;
  106. track = (track % 6);
  107. n = 0; // resetez la prima nota din melodie
  108. _delay_ms(400);
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement