Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2019
2,177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.37 KB | None | 0 0
  1. /*
  2. Button pins:
  3. Button 1 - Pin 2
  4. Button 2 - Pin 3
  5. Button 3 - Pin 4
  6. Button 4 - Pin 5
  7. Button 5 - Pin 6
  8.  
  9. Led Pins:
  10. Green (Looper) - Pin 7
  11. Red (Record) - Pin 8
  12. Yellow (Play) - Pin 9
  13. Buffer (Flashing Blue) - Pin 10
  14.  
  15. A4 = SDA
  16. A5 = SCL
  17. */
  18.  
  19. #include <LiquidCrystal_I2C.h>
  20. #include <MIDI.h>
  21. LiquidCrystal_I2C lcd1(0x27, 16, 2);
  22. LiquidCrystal_I2C lcd2(0x26, 16, 2);
  23. LiquidCrystal_I2C lcd3(0x25, 16, 2);
  24. LiquidCrystal_I2C lcd4(0x24, 16, 2);
  25. LiquidCrystal_I2C lcd5(0x23, 16, 2);
  26.  
  27. MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
  28.  
  29. byte Play_Glyph[] = {
  30. B10000,
  31. B11000,
  32. B11100,
  33. B11110,
  34. B11110,
  35. B11100,
  36. B11000,
  37. B10000
  38. };
  39.  
  40. byte Stop_Glyph[] = {
  41. B00000,
  42. B00000,
  43. B11110,
  44. B11110,
  45. B11110,
  46. B11110,
  47. B00000,
  48. B00000
  49. };
  50.  
  51. byte Loop_Glyph[] = {
  52. B01110,
  53. B10001,
  54. B10001,
  55. B00001,
  56. B00001,
  57. B11101,
  58. B11001,
  59. B10110
  60. };
  61.  
  62. byte Record_Glyph[] = {
  63. B00000,
  64. B00100,
  65. B01110,
  66. B11111,
  67. B11111,
  68. B01110,
  69. B00100,
  70. B00000
  71. };
  72.  
  73. byte Clear_Glyph[] = {
  74. B11011,
  75. B10001,
  76. B00000,
  77. B10001,
  78. B10001,
  79. B00000,
  80. B10001,
  81. B11011
  82. };
  83.  
  84. const int Button1 = 2;
  85. const int Button2 = 3;
  86. const int Button3 = 4;
  87. const int Button4 = 5;
  88. const int Button5 = 6;
  89.  
  90. const int LED_Record = 7;
  91. const int LED_Overdub = 8;
  92. const int LED_Play = 9;
  93. const int LED_Buffer = 10;
  94.  
  95. int buttonState1 = LOW;
  96. int buttonState2 = LOW;
  97. int buttonState3 = LOW;
  98. int buttonState4 = LOW;
  99. int buttonState5 = LOW;
  100.  
  101. int Looper = 0;
  102. int Overdub = 0;
  103. int Play = 0;
  104. int Tracks = 0;
  105. int BufferClear = 0;
  106.  
  107. unsigned long lastDebounceTime1 = 0;
  108. unsigned long lastDebounceTime2 = 0;
  109. unsigned long lastDebounceTime3 = 0;
  110. unsigned long lastDebounceTime4 = 0;
  111. unsigned long lastDebounceTime5 = 0;
  112.  
  113. unsigned long debounceDelay = 250;
  114.  
  115. void setup()
  116. {
  117. pinMode(Button1, INPUT);
  118. pinMode(Button2, INPUT);
  119. pinMode(Button3, INPUT);
  120. pinMode(Button4, INPUT);
  121. pinMode(Button5, INPUT);
  122.  
  123. pinMode(LED_Record, OUTPUT);
  124. pinMode(LED_Overdub, OUTPUT);
  125. pinMode(LED_Play, OUTPUT);
  126. pinMode(LED_Buffer, OUTPUT);
  127.  
  128. MIDI.begin();
  129.  
  130. lcd1.backlight();
  131. lcd2.backlight();
  132. lcd3.backlight();
  133. lcd4.backlight();
  134. lcd5.backlight();
  135. lcd1.init();
  136. lcd2.init();
  137. lcd3.init();
  138. lcd4.init();
  139. lcd5.init();
  140.  
  141.  
  142. lcd1.setCursor(4, 0);
  143. lcd1.print("Activate");
  144. lcd1.setCursor(5, 1);
  145. lcd1.print("Looper");
  146.  
  147. lcd2.setCursor(6, 0);
  148. lcd2.print("****");
  149. lcd2.setCursor(6, 1);
  150. lcd2.print("****");
  151.  
  152. lcd3.setCursor(6, 0);
  153. lcd3.print("****");
  154. lcd3.setCursor(6, 1);
  155. lcd3.print("****");
  156.  
  157. lcd4.setCursor(6, 0);
  158. lcd4.print("****");
  159. lcd4.setCursor(6, 1);
  160. lcd4.print("****");
  161.  
  162. lcd5.setCursor(6, 0);
  163. lcd5.print("****");
  164. lcd5.setCursor(6, 1);
  165. lcd5.print("****");
  166.  
  167. lcd1.createChar(1, Loop_Glyph);
  168. lcd2.createChar(2, Record_Glyph);
  169. lcd3.createChar(3, Play_Glyph);
  170. lcd4.createChar(4, Stop_Glyph);
  171. lcd5.createChar(5, Clear_Glyph);
  172. lcd2.createChar(6, Play_Glyph);
  173.  
  174. }
  175.  
  176. void loop()
  177. {
  178.  
  179. buttonState1 = digitalRead(Button1);
  180. buttonState2 = digitalRead(Button2);
  181. buttonState3 = digitalRead(Button3);
  182. buttonState4 = digitalRead(Button4);
  183. buttonState5 = digitalRead(Button5);
  184.  
  185. /*-------------------------------------------------
  186. Button 1 - Looper enable
  187. -------------------------------------------------*/
  188. if ( (millis() - lastDebounceTime1) > debounceDelay)
  189. {
  190. if ((buttonState1 == HIGH) && (Looper == 0))
  191. {
  192. MIDI.sendControlChange(22, 127, 1);
  193.  
  194. lcd1.clear();
  195. lcd1.setCursor(5, 0);
  196. lcd1.print("Looper");
  197. lcd1.setCursor(6, 1);
  198. lcd1.print("0n");
  199. lcd1.setCursor(9, 1);
  200. lcd1.write(1);
  201.  
  202. lcd2.clear();
  203. lcd2.setCursor(6, 0);
  204. lcd2.print("Start");
  205. lcd2.setCursor(3, 1);
  206. lcd2.print("Recording");
  207. lcd2.setCursor(13, 1);
  208. lcd2.write(2);
  209.  
  210. lcd3.clear();
  211. lcd3.setCursor(6, 0);
  212. lcd3.print("Loop");
  213. lcd3.setCursor(6, 1);
  214. lcd3.print("Empty");
  215.  
  216. lcd4.clear();
  217. lcd4.setCursor(6, 0);
  218. lcd4.print("Loop");
  219. lcd4.setCursor(6, 1);
  220. lcd4.print("Empty");
  221.  
  222. lcd5.clear();
  223. lcd5.setCursor(5, 0);
  224. lcd5.print("Buffer");
  225. lcd5.setCursor(5, 1);
  226. lcd5.print("Empty");
  227. lcd5.setCursor(11, 1);
  228. lcd5.write(5);
  229.  
  230. Looper = 1;
  231.  
  232. digitalWrite(LED_Record, HIGH);
  233.  
  234. lastDebounceTime1 = millis();
  235. }
  236.  
  237. else if ((buttonState1 == HIGH) && (Looper == 1))
  238. {
  239. MIDI.sendControlChange(22, 0, 1);
  240.  
  241. lcd1.clear();
  242. lcd1.setCursor(4, 0);
  243. lcd1.print("Activate");
  244. lcd1.setCursor(5, 1);
  245. lcd1.print("Looper");
  246.  
  247. lcd2.clear();
  248. lcd2.setCursor(6, 0);
  249. lcd2.print("****");
  250. lcd2.setCursor(6, 1);
  251. lcd2.print("****");
  252.  
  253. lcd3.clear();
  254. lcd3.setCursor(6, 0);
  255. lcd3.print("****");
  256. lcd3.setCursor(6, 1);
  257. lcd3.print("****");
  258.  
  259. lcd4.clear();
  260. lcd4.setCursor(6, 0);
  261. lcd4.print("****");
  262. lcd4.setCursor(6, 1);
  263. lcd4.print("****");
  264.  
  265. lcd5.clear();
  266. lcd5.setCursor(6, 0);
  267. lcd5.print("****");
  268. lcd5.setCursor(6, 1);
  269. lcd5.print("****");
  270.  
  271.  
  272. Looper = 0;
  273. Overdub = 0;
  274.  
  275. digitalWrite(LED_Record, LOW);
  276. digitalWrite(LED_Overdub, LOW);
  277. digitalWrite(LED_Play, LOW);
  278. digitalWrite(LED_Buffer, LOW);
  279.  
  280. lastDebounceTime1 = millis();
  281. }
  282. }
  283. /*-------------------------------------------------
  284. Button 2 - Record/Overdub
  285. -------------------------------------------------*/
  286. if ( (millis() - lastDebounceTime2) > debounceDelay)
  287. {
  288. if ((buttonState2 == HIGH) && (Looper == 1) && (Overdub == 0))
  289. {
  290. Tracks++;
  291. BufferClear = 1;
  292. MIDI.sendControlChange(23, 127, 1);
  293.  
  294. lcd2.clear();
  295. lcd2.setCursor(0, 0);
  296. lcd2.print("Recording Loop");
  297. lcd2.setCursor(0, 1);
  298. lcd2.print("Press to overdub");
  299. lcd2.setCursor(15, 0);
  300. lcd2.write(2);
  301.  
  302. lcd3.clear();
  303. lcd3.setCursor(1, 0);
  304. lcd3.print("-- Recording --");
  305. lcd3.setCursor(2, 1);
  306. lcd3.print("Press to play");
  307.  
  308.  
  309. lcd4.clear();
  310. lcd4.setCursor(6, 0);
  311. lcd4.print("Stop");
  312. lcd4.setCursor(3, 1);
  313. lcd4.print("Recording");
  314. lcd4.setCursor(13, 1);
  315. lcd4.write(4);
  316.  
  317. lcd5.clear();
  318. lcd5.setCursor(0, 0);
  319. if (Tracks > 1)
  320. {
  321. lcd5.print(String(Tracks) + String( " Tracks stored"));
  322. }
  323. else
  324. {
  325. lcd5.print(String(Tracks) + String( " Track stored"));
  326. }
  327. lcd5.setCursor(1, 1);
  328. lcd5.print("Press to clear");
  329.  
  330. digitalWrite(LED_Overdub, HIGH);
  331. digitalWrite(LED_Play, LOW);
  332. digitalWrite(LED_Buffer, HIGH);
  333.  
  334. Overdub = 1;
  335.  
  336. lastDebounceTime2 = millis();
  337. }
  338.  
  339. else if ((buttonState2 == HIGH) && (Looper == 1) && (Overdub == 1))
  340. {
  341. Tracks++;
  342. MIDI.sendControlChange(23, 127, 1);
  343.  
  344. lcd2.clear();
  345. lcd2.setCursor(2, 0);
  346. lcd2.print("Overdubbing");
  347. lcd2.setCursor(15, 0);
  348. lcd2.setCursor(2, 1);
  349. lcd2.print("Press to play");
  350.  
  351. lcd3.clear();
  352. lcd3.setCursor(2, 0);
  353. lcd3.print("Overdubbing");
  354. lcd3.setCursor(2, 1);
  355. lcd3.print("Press to play");
  356. lcd3.setCursor(14, 0);
  357. lcd3.write(3);
  358.  
  359. lcd4.clear();
  360. lcd4.setCursor(6, 0);
  361. lcd4.print("Stop");
  362. lcd4.setCursor(2, 1);
  363. lcd4.print("Overdubbing");
  364. lcd4.setCursor(14, 1);
  365. lcd4.write(4);
  366.  
  367. lcd5.clear();
  368. lcd5.setCursor(0, 0);
  369. if (Tracks > 1)
  370. {
  371. lcd5.print(String(Tracks) + String( " Tracks stored"));
  372. }
  373. else
  374. {
  375. lcd5.print(String(Tracks) + String( " Track stored"));
  376. }
  377. lcd5.setCursor(1, 1);
  378. lcd5.print("Press to clear");
  379.  
  380. digitalWrite(LED_Play, HIGH);
  381. digitalWrite(LED_Overdub, HIGH);
  382. digitalWrite(LED_Buffer, HIGH);
  383.  
  384. Play = 1;
  385. Overdub = 2;
  386.  
  387. lastDebounceTime2 = millis();
  388. }
  389.  
  390. else if ((buttonState2 == HIGH) && (Looper == 1) && (Overdub == 2) && (Play == 1))
  391. {
  392. MIDI.sendControlChange(23, 127, 1);
  393.  
  394. lcd2.clear();
  395. lcd2.setCursor(2, 0);
  396. lcd2.print("Playing Loop");
  397. lcd2.setCursor(0, 1);
  398. lcd2.print("Press to overdub");
  399. lcd2.setCursor(15, 0);
  400. lcd2.write(6);
  401.  
  402. lcd3.clear();
  403. lcd3.setCursor(4, 0);
  404. lcd3.print("Playing");
  405. lcd3.setCursor(5, 1);
  406. lcd3.print("Loop");
  407. lcd3.setCursor(10, 1);
  408. lcd3.write(3);
  409.  
  410. lcd4.clear();
  411. lcd4.setCursor(6, 0);
  412. lcd4.print("Stop");
  413. lcd4.setCursor(3, 1);
  414. lcd4.print("Playback");
  415. lcd4.setCursor(12, 1);
  416. lcd4.write(4);
  417.  
  418. digitalWrite(LED_Play, HIGH);
  419. digitalWrite(LED_Overdub, LOW);
  420. digitalWrite(LED_Buffer, HIGH);
  421.  
  422. Play = 1;
  423. Overdub = 1;
  424.  
  425. lastDebounceTime2 = millis();
  426. }
  427.  
  428. }
  429.  
  430. /*-------------------------------------------------
  431. Button 3 - Looper Playback
  432. -------------------------------------------------*/
  433. if ( (millis() - lastDebounceTime1) > debounceDelay)
  434. {
  435.  
  436. if ((buttonState3 == HIGH) && (Looper == 1) && (Overdub > 0))
  437. {
  438. BufferClear = 1;
  439. MIDI.sendControlChange(24, 127, 1);
  440.  
  441. lcd2.clear();
  442. lcd2.setCursor(5, 0);
  443. lcd2.print("Start");
  444. lcd2.setCursor(3, 1);
  445. lcd2.print("Overdub");
  446. lcd2.setCursor(11, 1);
  447. lcd2.write(2);
  448.  
  449. lcd3.clear();
  450. lcd3.setCursor(4, 0);
  451. lcd3.print("Playing");
  452. lcd3.setCursor(3, 1);
  453. lcd3.print("Recording");
  454. lcd3.setCursor(13, 1);
  455. lcd3.write(3);
  456.  
  457. lcd4.clear();
  458. lcd4.setCursor(6, 0);
  459. lcd4.print("Stop");
  460. lcd4.setCursor(3, 1);
  461. lcd4.print("Playback");
  462. lcd4.setCursor(12, 1);
  463. lcd4.write(4);
  464.  
  465. digitalWrite(LED_Overdub, LOW);
  466. digitalWrite(LED_Play, HIGH);
  467.  
  468. Overdub = 1;
  469.  
  470. lastDebounceTime1 = millis();
  471. }
  472. }
  473.  
  474. /*-------------------------------------------------
  475. Button 4 - Stop Playback
  476. -------------------------------------------------*/
  477. if ( (millis() - lastDebounceTime1) > debounceDelay)
  478. {
  479.  
  480. if ((buttonState4 == HIGH) && (Looper == 1) && (Overdub == 1 ))
  481. {
  482. BufferClear = 0;
  483. MIDI.sendControlChange(25, 127, 1);
  484.  
  485. lcd2.clear();
  486. lcd2.setCursor(5, 0);
  487. lcd2.print("Start");
  488. lcd2.setCursor(3, 1);
  489. lcd2.print("Overdub");
  490. lcd2.setCursor(11, 1);
  491. lcd2.write(2);
  492.  
  493. lcd3.clear();
  494. lcd3.setCursor(6, 0);
  495. lcd3.print("Play");
  496. lcd3.setCursor(5, 1);
  497. lcd3.print("Loop");
  498. lcd3.setCursor(10, 1);
  499. lcd3.write(3);
  500.  
  501. lcd4.clear();
  502. lcd4.setCursor(4, 0);
  503. lcd4.print("Playback");
  504. lcd4.setCursor(4, 1);
  505. lcd4.print("Stopped");
  506.  
  507. digitalWrite(LED_Overdub, LOW);
  508. digitalWrite(LED_Play, LOW);
  509.  
  510. Overdub = 1;
  511.  
  512.  
  513. lastDebounceTime1 = millis();
  514. }
  515.  
  516. else if ((buttonState4 == HIGH) && (Looper == 1) && (Overdub == 2 ))
  517. {
  518. BufferClear = 0;
  519. MIDI.sendControlChange(25, 127, 1);
  520.  
  521. lcd3.clear();
  522. lcd3.setCursor(6, 0);
  523. lcd3.print("Play");
  524. lcd3.setCursor(5, 1);
  525. lcd3.print("Loop");
  526. lcd3.setCursor(10, 1);
  527. lcd3.write(3);
  528.  
  529. lcd2.clear();
  530. lcd2.setCursor(5, 0);
  531. lcd2.print("Start");
  532. lcd2.setCursor(3, 1);
  533. lcd2.print("Overdub");
  534. lcd2.setCursor(11, 1);
  535. lcd2.write(2);
  536.  
  537. lcd4.clear();
  538. lcd4.setCursor(3, 0);
  539. lcd4.print("Playback");
  540. lcd4.setCursor(3, 1);
  541. lcd4.print("Stopped");
  542. lcd4.setCursor(11, 1);
  543. lcd4.write(4);
  544.  
  545. digitalWrite(LED_Overdub, LOW);
  546. digitalWrite(LED_Play, LOW);
  547.  
  548. Overdub = 1;
  549.  
  550.  
  551. lastDebounceTime1 = millis();
  552. }
  553. }
  554.  
  555. /*-------------------------------------------------
  556. Button 5 - Clear buffer
  557. -------------------------------------------------*/
  558. if ( (millis() - lastDebounceTime1) > debounceDelay)
  559. {
  560.  
  561. if ((buttonState5 == HIGH) && (Looper == 1) && (Overdub > 0) && (BufferClear == 0))
  562. {
  563. MIDI.sendControlChange(26, 127, 1);
  564.  
  565. Overdub = 0;
  566. Tracks = 0;
  567.  
  568. lcd3.clear();
  569. lcd3.setCursor(6, 0);
  570. lcd3.print("Play");
  571. lcd3.setCursor(5, 1);
  572. lcd3.print("Loop");
  573. lcd3.setCursor(10, 1);
  574. lcd3.write(3);
  575.  
  576. lcd2.clear();
  577. lcd2.setCursor(6, 0);
  578. lcd2.print("Start");
  579. lcd2.setCursor(3, 1);
  580. lcd2.print("Recording");
  581. lcd2.setCursor(13, 1);
  582. lcd2.write(2);
  583.  
  584. lcd5.clear();
  585. lcd5.setCursor(4, 0);
  586. lcd5.print("Clearing");
  587. lcd5.setCursor(5, 1);
  588. lcd5.print("Buffer");
  589. delay(400);
  590. digitalWrite(LED_Buffer, LOW);
  591. lcd5.clear();
  592. delay(400);
  593. digitalWrite(LED_Buffer, HIGH);
  594. lcd5.setCursor(4, 0);
  595. lcd5.print("Clearing");
  596. lcd5.setCursor(5, 1);
  597. lcd5.print("Buffer");
  598. delay(400);
  599. digitalWrite(LED_Buffer, LOW);
  600. lcd5.clear();
  601. delay(400);
  602. lcd5.setCursor(5, 0);
  603. lcd5.print("Buffer");
  604. lcd5.setCursor(4, 1);
  605. lcd5.print("Empty");
  606. lcd5.setCursor(11, 1);
  607. lcd5.write(5);
  608.  
  609. lastDebounceTime1 = millis();
  610. }
  611. }
  612.  
  613. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement