Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.16 KB | None | 0 0
  1. #include <Arduino.h>
  2. #include <LiquidCrystal_I2C.h>
  3.  
  4. #define CLK A1
  5. #define DT A0
  6. #define SW A2
  7.  
  8. #include "GyverEncoder.h"
  9. Encoder enc1(CLK, DT, SW);
  10. LiquidCrystal_I2C lcd(0x3F,16,2);
  11.  
  12. int value=1;
  13.  
  14. #define OCTAVE_OFFSET 0
  15. #define TONE_PIN 9
  16.  
  17. #define NOTE_C4 262
  18. #define NOTE_CS4 277
  19. #define NOTE_D4 294
  20. #define NOTE_DS4 311
  21. #define NOTE_E4 330
  22. #define NOTE_F4 349
  23. #define NOTE_FS4 370
  24. #define NOTE_G4 392
  25. #define NOTE_GS4 415
  26. #define NOTE_A4 440
  27. #define NOTE_AS4 466
  28. #define NOTE_B4 494
  29. #define NOTE_C5 523
  30. #define NOTE_CS5 554
  31. #define NOTE_D5 587
  32. #define NOTE_DS5 622
  33. #define NOTE_E5 659
  34. #define NOTE_F5 698
  35. #define NOTE_FS5 740
  36. #define NOTE_G5 784
  37. #define NOTE_GS5 831
  38. #define NOTE_A5 880
  39. #define NOTE_AS5 932
  40. #define NOTE_B5 988
  41. #define NOTE_C6 1047
  42. #define NOTE_CS6 1109
  43. #define NOTE_D6 1175
  44. #define NOTE_DS6 1245
  45. #define NOTE_E6 1319
  46. #define NOTE_F6 1397
  47. #define NOTE_FS6 1480
  48. #define NOTE_G6 1568
  49. #define NOTE_GS6 1661
  50. #define NOTE_A6 1760
  51. #define NOTE_AS6 1865
  52. #define NOTE_B6 1976
  53. #define NOTE_C7 2093
  54. #define NOTE_CS7 2217
  55. #define NOTE_D7 2349
  56. #define NOTE_DS7 2489
  57. #define NOTE_E7 2637
  58. #define NOTE_F7 2794
  59. #define NOTE_FS7 2960
  60. #define NOTE_G7 3136
  61. #define NOTE_GS7 3322
  62. #define NOTE_A7 3520
  63. #define NOTE_AS7 3729
  64. #define NOTE_B7 3951
  65.  
  66. int notes[] = { 0,
  67. NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4,
  68. NOTE_C5, NOTE_CS5, NOTE_D5, NOTE_DS5, NOTE_E5, NOTE_F5, NOTE_FS5, NOTE_G5, NOTE_GS5, NOTE_A5, NOTE_AS5, NOTE_B5,
  69. NOTE_C6, NOTE_CS6, NOTE_D6, NOTE_DS6, NOTE_E6, NOTE_F6, NOTE_FS6, NOTE_G6, NOTE_GS6, NOTE_A6, NOTE_AS6, NOTE_B6,
  70. NOTE_C7, NOTE_CS7, NOTE_D7, NOTE_DS7, NOTE_E7, NOTE_F7, NOTE_FS7, NOTE_G7, NOTE_GS7, NOTE_A7, NOTE_AS7, NOTE_B7
  71. };
  72. const char *chosenSong;
  73. const char *song1 = "The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6";
  74. const char *song2 = "Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6";
  75. const char *song3 = "Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6";
  76. const char *song4 = "Looney:d=4,o=5,b=140:32p,c6,8f6,8e6,8d6,8c6,a.,8c6,8f6,8e6,8d6,8d#6,e.6,8e6,8e6,8c6,8d6,8c6,8e6,8c6,8d6,8a,8c6,8g,8a#,8a,8f";
  77. const char *song5 = "Bond:d=4,o=5,b=80:32p,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d#6,16d#6,16c#6,32d#6,32d#6,16d#6,8d#6,16c#6,16c#6,16c#6,16c#6,32e6,32e6,16e6,8e6,16d#6,16d6,16c#6,16c#7,c.7,16g#6,16f#6,g#.6";
  78. const char *song6 = "MASH:d=8,o=5,b=140:4a,4g,f#,g,p,f#,p,g,p,f#,p,2e.,p,f#,e,4f#,e,f#,p,e,p,4d.,p,f#,4e,d,e,p,d,p,e,p,d,p,2c#.,p,d,c#,4d,c#,d,p,e,p,4f#,p,a,p,4b,a,b,p,a,p,b,p,2a.,4p,a,b,a,4b,a,b,p,2a.,a,4f#,a,b,p,d6,p,4e.6,d6,b,p,a,p,2b";
  79. const char *song7 = "StarWars:d=4,o=5,b=45:32p,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#.6,32f#,32f#,32f#,8b.,8f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32c#6,8b.6,16f#.6,32e6,32d#6,32e6,8c#6";
  80. const char *song8 = "GoodBad:d=4,o=5,b=56:32p,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,d#,32a#,32d#6,32a#,32d#6,8a#.,16f#.,16g#.,c#6,32a#,32d#6,32a#,32d#6,8a#.,16f#.,32f.,32d#.,c#,32a#,32d#6,32a#,32d#6,8a#.,16g#.,d#";
  81. const char *song9 = "TopGun:d=4,o=4,b=31:32p,16c#,16g#,16g#,32f#,32f,32f#,32f,16d#,16d#,32c#,32d#,16f,32d#,32f,16f#,32f,32c#,16f,d#,16c#,16g#,16g#,32f#,32f,32f#,32f,16d#,16d#,32c#,32d#,16f,32d#,32f,16f#,32f,32c#,g#";
  82. const char *song10 = "A-Team:d=8,o=5,b=125:4d#6,a#,2d#6,16p,g#,4a#,4d#.,p,16g,16a#,d#6,a#,f6,2d#6,16p,c#.6,16c6,16a#,g#.,2a#";
  83. const char *song11 = "Flinstones:d=4,o=5,b=40:32p,16f6,16a#,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,d6,16f6,16a#.,16a#6,32g6,16f6,16a#.,32f6,32f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c6,a#,16a6,16d.6,16a#6,32a6,32a6,32g6,32f#6,32a6,8g6,16g6,16c.6,32a6,32a6,32g6,32g6,32f6,32e6,32g6,8f6,16f6,16a#.,16a#6,32g6,16f6,16a#.,16f6,32d#6,32d6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#,16c.6,32d6,32d#6,32f6,16a#6,16c7,8a#.6";
  84. const char *song12 = "Jeopardy:d=4,o=6,b=125:c,f,c,f5,c,f,2c,c,f,c,f,a.,8g,8f,8e,8d,8c#,c,f,c,f5,c,f,2c,f.,8d,c,a#5,a5,g5,f5,p,d#,g#,d#,g#5,d#,g#,2d#,d#,g#,d#,g#,c.7,8a#,8g#,8g,8f,8e,d#,g#,d#,g#5,d#,g#,2d#,g#.,8f,d#,c#,c,p,a#5,p,g#.5,d#,g#";
  85. const char *song13 = "MahnaMahna:d=16,o=6,b=125:c#,c.,b5,8a#.5,8f.,4g#,a#,g.,4d#,8p,c#,c.,b5,8a#.5,8f.,g#.,8a#.,4g,8p,c#,c.,b5,8a#.5,8f.,4g#,f,g.,8d#.,f,g.,8d#.,f,8g,8d#.,f,8g,d#,8c,a#5,8d#.,8d#.,4d#,8d#.";
  86. const char *song14 = "MissionImp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8d";
  87. const char *song15 = "KnightRider:d=4,o=5,b=125:16e,16p,16f,16e,16e,16p,16e,16e,16f,16e,16e,16e,16d#,16e,16e,16e,16e,16p,16f,16e,16e,16p,16f,16e,16f,16e,16e,16e,16d#,16e,16e,16e,16d,16p,16e,16d,16d,16p,16e,16d,16e,16d,16d,16d,16c,16d,16d,16d,16d,16p,16e,16d,16d,16p,16e,16d,16e,16d,16d,16d,16c,16d,16d,16d";
  88.  
  89. void setup(void)
  90. {
  91. Serial.begin(9600);
  92. lcd.init();
  93. lcd.backlight();
  94. pinMode(2, INPUT_PULLUP); // определяем вывод как вход
  95. pinMode(8, INPUT_PULLUP);
  96. enc1.setType(TYPE2);
  97. }
  98.  
  99. #define isdigit(n) (n >= '0' && n <= '9')
  100.  
  101. void play_rtttl(const char *p)
  102. {
  103. // Absolutely no error checking in here
  104.  
  105. byte default_dur = 4;
  106. byte default_oct = 6;
  107. int bpm = 63;
  108. int num;
  109. long wholenote;
  110. long duration;
  111. byte note;
  112. byte scale;
  113.  
  114. // format: d=N,o=N,b=NNN:
  115. // find the start (skip name, etc)
  116.  
  117. while(*p != ':') p++; // ignore name
  118. p++; // skip ':'
  119.  
  120. // get default duration
  121. if(*p == 'd')
  122. {
  123. p++; p++; // skip "d="
  124. num = 0;
  125. while(isdigit(*p))
  126. {
  127. num = (num * 10) + (*p++ - '0');
  128. }
  129. if(num > 0) default_dur = num;
  130. p++; // skip comma
  131. }
  132.  
  133. Serial.print("ddur: "); Serial.println(default_dur, 10);
  134.  
  135. // get default octave
  136. if(*p == 'o')
  137. {
  138. p++; p++; // skip "o="
  139. num = *p++ - '0';
  140. if(num >= 3 && num <=7) default_oct = num;
  141. p++; // skip comma
  142. }
  143.  
  144. Serial.print("doct: "); Serial.println(default_oct, 10);
  145.  
  146. // get BPM
  147. if(*p == 'b')
  148. {
  149. p++; p++; // skip "b="
  150. num = 0;
  151. while(isdigit(*p))
  152. {
  153. num = (num * 10) + (*p++ - '0');
  154. }
  155. bpm = num;
  156. p++; // skip colon
  157. }
  158.  
  159. Serial.print("bpm: "); Serial.println(bpm, 10);
  160.  
  161. // BPM usually expresses the number of quarter notes per minute
  162. wholenote = (60 * 1000L / bpm) * 4; // this is the time for whole note (in milliseconds)
  163.  
  164. Serial.print("wn: "); Serial.println(wholenote, 10);
  165.  
  166.  
  167. // now begin note loop
  168. while(*p)
  169. {
  170. // first, get note duration, if available
  171. num = 0;
  172. while(isdigit(*p))
  173. {
  174. num = (num * 10) + (*p++ - '0');
  175. }
  176.  
  177. if(num) duration = wholenote / num;
  178. else duration = wholenote / default_dur; // we will need to check if we are a dotted note after
  179.  
  180. // now get the note
  181. note = 0;
  182.  
  183. switch(*p)
  184. {
  185. case 'c':
  186. note = 1;
  187. break;
  188. case 'd':
  189. note = 3;
  190. break;
  191. case 'e':
  192. note = 5;
  193. break;
  194. case 'f':
  195. note = 6;
  196. break;
  197. case 'g':
  198. note = 8;
  199. break;
  200. case 'a':
  201. note = 10;
  202. break;
  203. case 'b':
  204. note = 12;
  205. break;
  206. case 'p':
  207. default:
  208. note = 0;
  209. }
  210. p++;
  211.  
  212. // now, get optional '#' sharp
  213. if(*p == '#')
  214. {
  215. note++;
  216. p++;
  217. }
  218.  
  219. // now, get optional '.' dotted note
  220. if(*p == '.')
  221. {
  222. duration += duration/2;
  223. p++;
  224. }
  225.  
  226. // now, get scale
  227. if(isdigit(*p))
  228. {
  229. scale = *p - '0';
  230. p++;
  231. }
  232. else
  233. {
  234. scale = default_oct;
  235. }
  236.  
  237. scale += OCTAVE_OFFSET;
  238.  
  239. if(*p == ',')
  240. p++; // skip comma for next note (or we may be at the end)
  241.  
  242. // now play the note
  243.  
  244. if(note)
  245. {
  246. Serial.print("Playing: ");
  247. Serial.print(scale, 10); Serial.print(' ');
  248. Serial.print(note, 10); Serial.print(" (");
  249. Serial.print(notes[(scale - 4) * 12 + note], 10);
  250. Serial.print(") ");
  251. Serial.println(duration, 10);
  252. tone(TONE_PIN, notes[(scale - 4) * 12 + note]);
  253. delay(duration);
  254. noTone(TONE_PIN);
  255. }
  256. else
  257. {
  258. Serial.print("Pausing: ");
  259. Serial.println(duration, 10);
  260. delay(duration);
  261. }
  262. }
  263. }
  264.  
  265. void loop(void)
  266. {
  267. enc1.tick();
  268.  
  269. if (enc1.isRight()) value++; // если был поворот направо, увеличиваем на 1
  270. if (enc1.isLeft()) value--; // если был поворот налево, уменьшаем на 1
  271.  
  272. if (value < 1){
  273. value=1;
  274. }
  275. if (value > 15){
  276. value=15;
  277. }
  278.  
  279.  
  280. // if (value == 1){
  281.  
  282. //
  283. // lcd.setCursor(0,0);
  284. // lcd.print("The Simpsons #1");
  285.  
  286. // if(enc1.isClick())
  287. // {
  288. // lcd.setCursor(0,1);
  289. // lcd.print("Playing...");
  290. // play_rtttl(song1);
  291. // Serial.println("Played");
  292. // }
  293. // }
  294. else
  295.  
  296. if (value == 2){
  297.  
  298. lcd.setCursor(0,0);
  299. lcd.print("Indiana #2");
  300.  
  301. if(enc1.isClick())
  302. {
  303. lcd.setCursor(0,1);
  304. lcd.print("Playing...");
  305. play_rtttl(song2);
  306. Serial.println("Played");
  307. }
  308. }
  309. else
  310.  
  311. if (value == 3){
  312.  
  313. lcd.setCursor(0,0);
  314. lcd.print("Entertainer #3");
  315.  
  316. if(enc1.isClick())
  317. {
  318. lcd.setCursor(0,1);
  319. lcd.print("Playing...");
  320. play_rtttl(song3);
  321. Serial.println("Played");
  322. }
  323. }
  324. else
  325.  
  326. // if (value == 4){
  327. //
  328. // lcd.setCursor(0,0);
  329. // lcd.print("Looney #4");
  330.  
  331. // if(enc1.isClick())
  332. // {
  333. // lcd.setCursor(0,1);
  334. // lcd.print("Playing...");
  335. // play_rtttl(song4);
  336. // Serial.println("Played");
  337. // }
  338. // }
  339. // else
  340.  
  341. // if (value == 5){
  342. //
  343. // lcd.setCursor(0,0);
  344. // lcd.print("Bond #5");
  345.  
  346. // if(enc1.isClick())
  347. // {
  348. // lcd.setCursor(0,1);
  349. // lcd.print("Playing...");
  350. // play_rtttl(song5);
  351. // Serial.println("Played");
  352. // }
  353. // }
  354. // else
  355.  
  356. if (value == 6){
  357.  
  358. lcd.setCursor(0,0);
  359. lcd.print("MASH #6");
  360.  
  361. if(enc1.isClick())
  362. {
  363. lcd.setCursor(0,1);
  364. lcd.print("Playing...");
  365. play_rtttl(song6);
  366. Serial.println("Played");
  367. }
  368. }
  369. else
  370. if (value == 7){
  371.  
  372. lcd.setCursor(0,0);
  373. lcd.print("StarWars #7");
  374.  
  375. if(enc1.isClick())
  376. {
  377. lcd.setCursor(0,1);
  378. lcd.print("Playing...");
  379. play_rtttl(song7);
  380. Serial.println("Played");
  381. }
  382. }
  383. else
  384. // if (value == 8){
  385. //
  386. // lcd.setCursor(0,0);
  387. // lcd.print("GoodBad #8");
  388.  
  389. // if(enc1.isClick())
  390. // {
  391. // lcd.setCursor(0,1);
  392. // lcd.print("Playing...");
  393. // play_rtttl(song8);
  394. // Serial.println("Played");
  395. // }
  396. // }
  397. // else
  398. // if (value == 9){
  399. //
  400. // lcd.setCursor(0,0);
  401. // lcd.print("TopGun #9");
  402.  
  403. // if(enc1.isClick())
  404. // {
  405. // lcd.setCursor(0,1);
  406. // lcd.print("Playing...");
  407. // play_rtttl(song9);
  408. // Serial.println("Played");
  409. // }
  410. // }
  411. // else
  412. // if (value == 10){
  413. //
  414. // lcd.setCursor(0,0);
  415. // lcd.print("A-Team #10");
  416.  
  417. // if(enc1.isClick())
  418. // {
  419. // lcd.setCursor(0,1);
  420. // lcd.print("Playing...");
  421. // play_rtttl(song10);
  422. // Serial.println("Played");
  423. // }
  424. // }
  425. // else
  426. // if (value == 11){
  427. //
  428. // lcd.setCursor(0,0);
  429. // lcd.print("Flinstones #11");
  430.  
  431. // if(enc1.isClick())
  432. // {
  433. // lcd.setCursor(0,1);
  434. // lcd.print("Playing...");
  435. // play_rtttl(song11);
  436. // Serial.println("Played");
  437. // }
  438. // }
  439. // else
  440. if (value == 12){
  441.  
  442. lcd.setCursor(0,0);
  443. lcd.print("Jeopardy #12");
  444.  
  445. if(enc1.isClick())
  446. {
  447. lcd.setCursor(0,1);
  448. lcd.print("Playing...");
  449. play_rtttl(song12);
  450. Serial.println("Played");
  451. }
  452. }
  453. else
  454. // if (value == 13){
  455. //
  456. // lcd.setCursor(0,0);
  457. // lcd.print("MahnaMahna #13");
  458.  
  459. // if(enc1.isClick())
  460. // {
  461. // lcd.setCursor(0,1);
  462. // lcd.print("Playing...");
  463. // play_rtttl(song13);
  464. // Serial.println("Played");
  465. // }
  466. // }
  467. // else
  468. if (value == 14){
  469.  
  470. lcd.setCursor(0,0);
  471. lcd.print("MissionImp #14");
  472.  
  473. if(enc1.isClick())
  474. {
  475. lcd.setCursor(0,1);
  476. lcd.print("Playing...");
  477. play_rtttl(song14);
  478. Serial.println("Played");
  479. }
  480. }
  481. // else
  482. // if (value == 15){
  483. //
  484. // lcd.setCursor(0,0);
  485. // lcd.print("KnightRider #15");
  486.  
  487. // if(enc1.isClick())
  488. // {
  489. // lcd.setCursor(0,1);
  490. // lcd.print("Playing...");
  491. // play_rtttl(song15);
  492. // Serial.println("Played");
  493. // }
  494. // }
  495.  
  496. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement