-
Notifications
You must be signed in to change notification settings - Fork 1
/
arduinopod.ino
105 lines (95 loc) · 2.72 KB
/
arduinopod.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// POD 2.0 MIDI-Controller
// 4 Buttons that send CC-Signals to the POD and Switch to
// a different Program (1A - 1D)
// Added functionality: Switch between banks 1 and 2
int PinButton1 = 12;
int PinButton2 = 11;
int PinButton3 = 10;
int PinButton4 = 9;
int PinLED1 = 5;
int PinLED2 = 4;
int PinLED3 = 3;
int PinLED4 = 2;
int currentBank = 0;
int currentProg = 0; // So we can see if we even need to change the Program
void resetLEDs() {
digitalWrite(PinLED1, LOW);
digitalWrite(PinLED2, LOW);
digitalWrite(PinLED3, LOW);
digitalWrite(PinLED4, LOW);
}
void setLEDs() {
digitalWrite(PinLED1, HIGH);
digitalWrite(PinLED2, HIGH);
digitalWrite(PinLED3, HIGH);
digitalWrite(PinLED4, HIGH);
}
void sendMIDI(int program) {
// Sysex to change to program 1A:
// f0 00 01 0c 00 00 c0 01 f7
Serial.write(0xf0);
Serial.write(0x00);
Serial.write(0x01);
Serial.write(0x0c);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0xc0);
Serial.write(program);
Serial.write(0xf7);
}
void setup() {
Serial.begin(31250); // Baud-Rate for MIDI
pinMode(PinButton1, INPUT);
pinMode(PinButton2, INPUT);
pinMode(PinButton3, INPUT);
pinMode(PinButton4, INPUT);
pinMode(PinLED1, OUTPUT);
pinMode(PinLED2, OUTPUT);
pinMode(PinLED3, OUTPUT);
pinMode(PinLED4, OUTPUT);
resetLEDs();
}
void buttonAction(int button, int led, int prog) {
// Buttons are HIGH by default and LOW when pressed
if (digitalRead(button) == LOW) {
while (digitalRead(button) == LOW) {
// wait until the button gets released:
delay(1);
}
if (currentProg != prog) {
currentProg = prog;
if (currentBank == 1) {
// if we are in bank 2 we "invert" the LEDs
setLEDs();
digitalWrite(led, LOW);
}
else {
resetLEDs();
digitalWrite(led, HIGH);
}
sendMIDI(currentBank*4+prog);
delay(250);
}
else if (currentProg == prog) {
currentBank = currentBank ^ 1;
if (currentBank == 1) {
// if we are in bank 2 we "invert" the LEDs
setLEDs();
digitalWrite(led, LOW);
}
else {
resetLEDs();
digitalWrite(led, HIGH);
}
sendMIDI(currentBank*4+prog);
delay(50);
}
}
}
void loop() {
// check if buttons were pressed:
buttonAction(PinButton1, PinLED1, 1);
buttonAction(PinButton2, PinLED2, 2);
buttonAction(PinButton3, PinLED3, 3);
buttonAction(PinButton4, PinLED4, 4);
}