Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Button pins:
- Button 1 - Pin 2
- Button 2 - Pin 3
- Button 3 - Pin 4
- Button 4 - Pin 5
- Button 5 - Pin 6
- Led Pins:
- Green (Looper) - Pin 7
- Red (Record) - Pin 8
- Yellow (Play) - Pin 9
- Buffer (Flashing Blue) - Pin 10
- A4 = SDA
- A5 = SCL
- */
- #include <LiquidCrystal_I2C.h>
- #include <MIDI.h>
- LiquidCrystal_I2C lcd1(0x27, 16, 2);
- LiquidCrystal_I2C lcd2(0x26, 16, 2);
- LiquidCrystal_I2C lcd3(0x25, 16, 2);
- LiquidCrystal_I2C lcd4(0x24, 16, 2);
- LiquidCrystal_I2C lcd5(0x23, 16, 2);
- MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);
- byte Play_Glyph[] = {
- B10000,
- B11000,
- B11100,
- B11110,
- B11110,
- B11100,
- B11000,
- B10000
- };
- byte Stop_Glyph[] = {
- B00000,
- B00000,
- B11110,
- B11110,
- B11110,
- B11110,
- B00000,
- B00000
- };
- byte Loop_Glyph[] = {
- B01110,
- B10001,
- B10001,
- B00001,
- B00001,
- B11101,
- B11001,
- B10110
- };
- byte Record_Glyph[] = {
- B00000,
- B00100,
- B01110,
- B11111,
- B11111,
- B01110,
- B00100,
- B00000
- };
- byte Clear_Glyph[] = {
- B11011,
- B10001,
- B00000,
- B10001,
- B10001,
- B00000,
- B10001,
- B11011
- };
- const int Button1 = 2;
- const int Button2 = 3;
- const int Button3 = 4;
- const int Button4 = 5;
- const int Button5 = 6;
- const int LED_Record = 7;
- const int LED_Overdub = 8;
- const int LED_Play = 9;
- const int LED_Buffer = 10;
- int buttonState1 = LOW;
- int buttonState2 = LOW;
- int buttonState3 = LOW;
- int buttonState4 = LOW;
- int buttonState5 = LOW;
- int Looper = 0;
- int Overdub = 0;
- int Play = 0;
- int Tracks = 0;
- int BufferClear = 0;
- unsigned long lastDebounceTime1 = 0;
- unsigned long lastDebounceTime2 = 0;
- unsigned long lastDebounceTime3 = 0;
- unsigned long lastDebounceTime4 = 0;
- unsigned long lastDebounceTime5 = 0;
- unsigned long debounceDelay = 250;
- void setup()
- {
- pinMode(Button1, INPUT);
- pinMode(Button2, INPUT);
- pinMode(Button3, INPUT);
- pinMode(Button4, INPUT);
- pinMode(Button5, INPUT);
- pinMode(LED_Record, OUTPUT);
- pinMode(LED_Overdub, OUTPUT);
- pinMode(LED_Play, OUTPUT);
- pinMode(LED_Buffer, OUTPUT);
- MIDI.begin();
- lcd1.backlight();
- lcd2.backlight();
- lcd3.backlight();
- lcd4.backlight();
- lcd5.backlight();
- lcd1.init();
- lcd2.init();
- lcd3.init();
- lcd4.init();
- lcd5.init();
- lcd1.setCursor(4, 0);
- lcd1.print("Activate");
- lcd1.setCursor(5, 1);
- lcd1.print("Looper");
- lcd2.setCursor(6, 0);
- lcd2.print("****");
- lcd2.setCursor(6, 1);
- lcd2.print("****");
- lcd3.setCursor(6, 0);
- lcd3.print("****");
- lcd3.setCursor(6, 1);
- lcd3.print("****");
- lcd4.setCursor(6, 0);
- lcd4.print("****");
- lcd4.setCursor(6, 1);
- lcd4.print("****");
- lcd5.setCursor(6, 0);
- lcd5.print("****");
- lcd5.setCursor(6, 1);
- lcd5.print("****");
- lcd1.createChar(1, Loop_Glyph);
- lcd2.createChar(2, Record_Glyph);
- lcd3.createChar(3, Play_Glyph);
- lcd4.createChar(4, Stop_Glyph);
- lcd5.createChar(5, Clear_Glyph);
- lcd2.createChar(6, Play_Glyph);
- }
- void loop()
- {
- buttonState1 = digitalRead(Button1);
- buttonState2 = digitalRead(Button2);
- buttonState3 = digitalRead(Button3);
- buttonState4 = digitalRead(Button4);
- buttonState5 = digitalRead(Button5);
- /*-------------------------------------------------
- Button 1 - Looper enable
- -------------------------------------------------*/
- if ( (millis() - lastDebounceTime1) > debounceDelay)
- {
- if ((buttonState1 == HIGH) && (Looper == 0))
- {
- MIDI.sendControlChange(22, 127, 1);
- lcd1.clear();
- lcd1.setCursor(5, 0);
- lcd1.print("Looper");
- lcd1.setCursor(6, 1);
- lcd1.print("0n");
- lcd1.setCursor(9, 1);
- lcd1.write(1);
- lcd2.clear();
- lcd2.setCursor(6, 0);
- lcd2.print("Start");
- lcd2.setCursor(3, 1);
- lcd2.print("Recording");
- lcd2.setCursor(13, 1);
- lcd2.write(2);
- lcd3.clear();
- lcd3.setCursor(6, 0);
- lcd3.print("Loop");
- lcd3.setCursor(6, 1);
- lcd3.print("Empty");
- lcd4.clear();
- lcd4.setCursor(6, 0);
- lcd4.print("Loop");
- lcd4.setCursor(6, 1);
- lcd4.print("Empty");
- lcd5.clear();
- lcd5.setCursor(5, 0);
- lcd5.print("Buffer");
- lcd5.setCursor(5, 1);
- lcd5.print("Empty");
- lcd5.setCursor(11, 1);
- lcd5.write(5);
- Looper = 1;
- digitalWrite(LED_Record, HIGH);
- lastDebounceTime1 = millis();
- }
- else if ((buttonState1 == HIGH) && (Looper == 1))
- {
- MIDI.sendControlChange(22, 0, 1);
- lcd1.clear();
- lcd1.setCursor(4, 0);
- lcd1.print("Activate");
- lcd1.setCursor(5, 1);
- lcd1.print("Looper");
- lcd2.clear();
- lcd2.setCursor(6, 0);
- lcd2.print("****");
- lcd2.setCursor(6, 1);
- lcd2.print("****");
- lcd3.clear();
- lcd3.setCursor(6, 0);
- lcd3.print("****");
- lcd3.setCursor(6, 1);
- lcd3.print("****");
- lcd4.clear();
- lcd4.setCursor(6, 0);
- lcd4.print("****");
- lcd4.setCursor(6, 1);
- lcd4.print("****");
- lcd5.clear();
- lcd5.setCursor(6, 0);
- lcd5.print("****");
- lcd5.setCursor(6, 1);
- lcd5.print("****");
- Looper = 0;
- Overdub = 0;
- digitalWrite(LED_Record, LOW);
- digitalWrite(LED_Overdub, LOW);
- digitalWrite(LED_Play, LOW);
- digitalWrite(LED_Buffer, LOW);
- lastDebounceTime1 = millis();
- }
- }
- /*-------------------------------------------------
- Button 2 - Record/Overdub
- -------------------------------------------------*/
- if ( (millis() - lastDebounceTime2) > debounceDelay)
- {
- if ((buttonState2 == HIGH) && (Looper == 1) && (Overdub == 0))
- {
- Tracks++;
- BufferClear = 1;
- MIDI.sendControlChange(23, 127, 1);
- lcd2.clear();
- lcd2.setCursor(0, 0);
- lcd2.print("Recording Loop");
- lcd2.setCursor(0, 1);
- lcd2.print("Press to overdub");
- lcd2.setCursor(15, 0);
- lcd2.write(2);
- lcd3.clear();
- lcd3.setCursor(1, 0);
- lcd3.print("-- Recording --");
- lcd3.setCursor(2, 1);
- lcd3.print("Press to play");
- lcd4.clear();
- lcd4.setCursor(6, 0);
- lcd4.print("Stop");
- lcd4.setCursor(3, 1);
- lcd4.print("Recording");
- lcd4.setCursor(13, 1);
- lcd4.write(4);
- lcd5.clear();
- lcd5.setCursor(0, 0);
- if (Tracks > 1)
- {
- lcd5.print(String(Tracks) + String( " Tracks stored"));
- }
- else
- {
- lcd5.print(String(Tracks) + String( " Track stored"));
- }
- lcd5.setCursor(1, 1);
- lcd5.print("Press to clear");
- digitalWrite(LED_Overdub, HIGH);
- digitalWrite(LED_Play, LOW);
- digitalWrite(LED_Buffer, HIGH);
- Overdub = 1;
- lastDebounceTime2 = millis();
- }
- else if ((buttonState2 == HIGH) && (Looper == 1) && (Overdub == 1))
- {
- Tracks++;
- MIDI.sendControlChange(23, 127, 1);
- lcd2.clear();
- lcd2.setCursor(2, 0);
- lcd2.print("Overdubbing");
- lcd2.setCursor(15, 0);
- lcd2.setCursor(2, 1);
- lcd2.print("Press to play");
- lcd3.clear();
- lcd3.setCursor(2, 0);
- lcd3.print("Overdubbing");
- lcd3.setCursor(2, 1);
- lcd3.print("Press to play");
- lcd3.setCursor(14, 0);
- lcd3.write(3);
- lcd4.clear();
- lcd4.setCursor(6, 0);
- lcd4.print("Stop");
- lcd4.setCursor(2, 1);
- lcd4.print("Overdubbing");
- lcd4.setCursor(14, 1);
- lcd4.write(4);
- lcd5.clear();
- lcd5.setCursor(0, 0);
- if (Tracks > 1)
- {
- lcd5.print(String(Tracks) + String( " Tracks stored"));
- }
- else
- {
- lcd5.print(String(Tracks) + String( " Track stored"));
- }
- lcd5.setCursor(1, 1);
- lcd5.print("Press to clear");
- digitalWrite(LED_Play, HIGH);
- digitalWrite(LED_Overdub, HIGH);
- digitalWrite(LED_Buffer, HIGH);
- Play = 1;
- Overdub = 2;
- lastDebounceTime2 = millis();
- }
- else if ((buttonState2 == HIGH) && (Looper == 1) && (Overdub == 2) && (Play == 1))
- {
- MIDI.sendControlChange(23, 127, 1);
- lcd2.clear();
- lcd2.setCursor(2, 0);
- lcd2.print("Playing Loop");
- lcd2.setCursor(0, 1);
- lcd2.print("Press to overdub");
- lcd2.setCursor(15, 0);
- lcd2.write(6);
- lcd3.clear();
- lcd3.setCursor(4, 0);
- lcd3.print("Playing");
- lcd3.setCursor(5, 1);
- lcd3.print("Loop");
- lcd3.setCursor(10, 1);
- lcd3.write(3);
- lcd4.clear();
- lcd4.setCursor(6, 0);
- lcd4.print("Stop");
- lcd4.setCursor(3, 1);
- lcd4.print("Playback");
- lcd4.setCursor(12, 1);
- lcd4.write(4);
- digitalWrite(LED_Play, HIGH);
- digitalWrite(LED_Overdub, LOW);
- digitalWrite(LED_Buffer, HIGH);
- Play = 1;
- Overdub = 1;
- lastDebounceTime2 = millis();
- }
- }
- /*-------------------------------------------------
- Button 3 - Looper Playback
- -------------------------------------------------*/
- if ( (millis() - lastDebounceTime1) > debounceDelay)
- {
- if ((buttonState3 == HIGH) && (Looper == 1) && (Overdub > 0))
- {
- BufferClear = 1;
- MIDI.sendControlChange(24, 127, 1);
- lcd2.clear();
- lcd2.setCursor(5, 0);
- lcd2.print("Start");
- lcd2.setCursor(3, 1);
- lcd2.print("Overdub");
- lcd2.setCursor(11, 1);
- lcd2.write(2);
- lcd3.clear();
- lcd3.setCursor(4, 0);
- lcd3.print("Playing");
- lcd3.setCursor(3, 1);
- lcd3.print("Recording");
- lcd3.setCursor(13, 1);
- lcd3.write(3);
- lcd4.clear();
- lcd4.setCursor(6, 0);
- lcd4.print("Stop");
- lcd4.setCursor(3, 1);
- lcd4.print("Playback");
- lcd4.setCursor(12, 1);
- lcd4.write(4);
- digitalWrite(LED_Overdub, LOW);
- digitalWrite(LED_Play, HIGH);
- Overdub = 1;
- lastDebounceTime1 = millis();
- }
- }
- /*-------------------------------------------------
- Button 4 - Stop Playback
- -------------------------------------------------*/
- if ( (millis() - lastDebounceTime1) > debounceDelay)
- {
- if ((buttonState4 == HIGH) && (Looper == 1) && (Overdub == 1 ))
- {
- BufferClear = 0;
- MIDI.sendControlChange(25, 127, 1);
- lcd2.clear();
- lcd2.setCursor(5, 0);
- lcd2.print("Start");
- lcd2.setCursor(3, 1);
- lcd2.print("Overdub");
- lcd2.setCursor(11, 1);
- lcd2.write(2);
- lcd3.clear();
- lcd3.setCursor(6, 0);
- lcd3.print("Play");
- lcd3.setCursor(5, 1);
- lcd3.print("Loop");
- lcd3.setCursor(10, 1);
- lcd3.write(3);
- lcd4.clear();
- lcd4.setCursor(4, 0);
- lcd4.print("Playback");
- lcd4.setCursor(4, 1);
- lcd4.print("Stopped");
- digitalWrite(LED_Overdub, LOW);
- digitalWrite(LED_Play, LOW);
- Overdub = 1;
- lastDebounceTime1 = millis();
- }
- else if ((buttonState4 == HIGH) && (Looper == 1) && (Overdub == 2 ))
- {
- BufferClear = 0;
- MIDI.sendControlChange(25, 127, 1);
- lcd3.clear();
- lcd3.setCursor(6, 0);
- lcd3.print("Play");
- lcd3.setCursor(5, 1);
- lcd3.print("Loop");
- lcd3.setCursor(10, 1);
- lcd3.write(3);
- lcd2.clear();
- lcd2.setCursor(5, 0);
- lcd2.print("Start");
- lcd2.setCursor(3, 1);
- lcd2.print("Overdub");
- lcd2.setCursor(11, 1);
- lcd2.write(2);
- lcd4.clear();
- lcd4.setCursor(3, 0);
- lcd4.print("Playback");
- lcd4.setCursor(3, 1);
- lcd4.print("Stopped");
- lcd4.setCursor(11, 1);
- lcd4.write(4);
- digitalWrite(LED_Overdub, LOW);
- digitalWrite(LED_Play, LOW);
- Overdub = 1;
- lastDebounceTime1 = millis();
- }
- }
- /*-------------------------------------------------
- Button 5 - Clear buffer
- -------------------------------------------------*/
- if ( (millis() - lastDebounceTime1) > debounceDelay)
- {
- if ((buttonState5 == HIGH) && (Looper == 1) && (Overdub > 0) && (BufferClear == 0))
- {
- MIDI.sendControlChange(26, 127, 1);
- Overdub = 0;
- Tracks = 0;
- lcd3.clear();
- lcd3.setCursor(6, 0);
- lcd3.print("Play");
- lcd3.setCursor(5, 1);
- lcd3.print("Loop");
- lcd3.setCursor(10, 1);
- lcd3.write(3);
- lcd2.clear();
- lcd2.setCursor(6, 0);
- lcd2.print("Start");
- lcd2.setCursor(3, 1);
- lcd2.print("Recording");
- lcd2.setCursor(13, 1);
- lcd2.write(2);
- lcd5.clear();
- lcd5.setCursor(4, 0);
- lcd5.print("Clearing");
- lcd5.setCursor(5, 1);
- lcd5.print("Buffer");
- delay(400);
- digitalWrite(LED_Buffer, LOW);
- lcd5.clear();
- delay(400);
- digitalWrite(LED_Buffer, HIGH);
- lcd5.setCursor(4, 0);
- lcd5.print("Clearing");
- lcd5.setCursor(5, 1);
- lcd5.print("Buffer");
- delay(400);
- digitalWrite(LED_Buffer, LOW);
- lcd5.clear();
- delay(400);
- lcd5.setCursor(5, 0);
- lcd5.print("Buffer");
- lcd5.setCursor(4, 1);
- lcd5.print("Empty");
- lcd5.setCursor(11, 1);
- lcd5.write(5);
- lastDebounceTime1 = millis();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement