Advertisement
Guest User

Untitled

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