183 lines
3.1 KiB
C++
183 lines
3.1 KiB
C++
#include <Adafruit_NeoPixel.h>
|
|
|
|
// Currently always asume with 2 pedals
|
|
//8 LEDs and Pin is 11
|
|
Adafruit_NeoPixel leds = Adafruit_NeoPixel(8, 11, NEO_GRB + NEO_KHZ800);
|
|
|
|
|
|
bool oldValues[8] = {
|
|
1, 1, 1, 1, 1, 1, 1, 1
|
|
};
|
|
|
|
|
|
//byte counter;
|
|
byte CLOCK = 248;
|
|
byte START = 250;
|
|
byte CONTINUE = 251;
|
|
byte STOP = 252;
|
|
|
|
uint8_t pins[8] = {
|
|
17, 16, 15, 14, 2, 4, 3, 5
|
|
};
|
|
int tempState = 1;
|
|
int time = 0;
|
|
int bar = 1;
|
|
int pedalNote = 10;
|
|
int clearNote = 9;
|
|
|
|
void tick()
|
|
{
|
|
if (time == 24)
|
|
time = 0;
|
|
|
|
|
|
if (bar == 4)
|
|
bar = 0;
|
|
|
|
|
|
if ((time == 0) && (bar == 0)){
|
|
leds.setPixelColor(0,0,0,255);
|
|
leds.setPixelColor(1,0,0,255);
|
|
leds.show();
|
|
}
|
|
|
|
if (time == 3){
|
|
leds.setPixelColor(0,0,0,0);
|
|
leds.setPixelColor(1,0,0,0);
|
|
leds.show();
|
|
}
|
|
|
|
if ((time == 0) && (bar != 0)){
|
|
leds.setPixelColor(0,0,255,0);
|
|
leds.setPixelColor(1,0,255,0);
|
|
leds.show();
|
|
}
|
|
|
|
if (time == 0)
|
|
bar++;
|
|
time++;
|
|
|
|
|
|
}
|
|
|
|
void goClock()
|
|
{
|
|
time = 0;
|
|
bar = 0;
|
|
}
|
|
|
|
void stopClock()
|
|
{
|
|
digitalWrite(13, LOW);
|
|
digitalWrite(12, LOW);
|
|
}
|
|
|
|
|
|
void RealTimeSystem(byte realtimebyte) {
|
|
if (realtimebyte == 248) {
|
|
tick();
|
|
}
|
|
|
|
if (realtimebyte == START || realtimebyte == CONTINUE) {
|
|
goClock();
|
|
}
|
|
|
|
if (realtimebyte == STOP) {
|
|
stopClock();
|
|
}
|
|
|
|
}
|
|
|
|
void setup() {
|
|
for (int i = 0; i < 8; i++) {
|
|
pinMode(pins[i], INPUT_PULLUP);
|
|
}
|
|
pinMode(13, OUTPUT); //LED
|
|
|
|
//MIDI.begin(MIDI_CHANNEL_OMNI);
|
|
// MIDI.setHandleClock(tick);
|
|
//MIDI.setHandleStart(goClock);
|
|
// // MIDI.setHandleContinue(goClock);
|
|
//MIDI.setHandleStop(stopClock);
|
|
|
|
//Modeled
|
|
// digitalWrite(11,HIGH);
|
|
|
|
usbMIDI.setHandleRealTimeSystem(RealTimeSystem);
|
|
leds.begin();
|
|
leds.show();
|
|
/*
|
|
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
|
|
leds.setPixelColor(i,255,255,255);
|
|
}
|
|
leds.show();
|
|
*/
|
|
}
|
|
|
|
void loop() {
|
|
usbMIDI.read();
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
//Ned ganz
|
|
tempState = digitalRead(pins[i]);
|
|
|
|
if (tempState != oldValues[i - 2])
|
|
{
|
|
// debouncetime
|
|
delay(1);
|
|
tempState = digitalRead(pins[i]);
|
|
|
|
if (tempState != oldValues[i - 2]) {
|
|
/* if(i == 10)
|
|
{
|
|
if(tempState == 0)
|
|
MIDI.sendNoteOn(pedalNote, 127, 1);
|
|
else
|
|
MIDI.sendNoteOff(pedalNote, 0, 1);
|
|
}
|
|
else if(i == 7)
|
|
{
|
|
if(tempState == 0){
|
|
if(pedalNote == 10)
|
|
{
|
|
pedalNote = 11;
|
|
clearNote = 13;
|
|
digitalWrite(11,LOW);
|
|
}
|
|
else{
|
|
|
|
pedalNote = 10;
|
|
clearNote = 9;
|
|
digitalWrite(11,HIGH);
|
|
}
|
|
}
|
|
}
|
|
else if(i == 9)
|
|
{
|
|
if(tempState == 0)
|
|
MIDI.sendNoteOn(clearNote, 127, 1);
|
|
else
|
|
MIDI.sendNoteOff(clearNote, 0, 1);
|
|
}
|
|
else
|
|
{*/
|
|
if (tempState == 0) {
|
|
usbMIDI.sendNoteOn(i, 127, 1);
|
|
leds.setPixelColor(i,255,255,255);
|
|
leds.show();
|
|
} else {
|
|
usbMIDI.sendNoteOff(i, 0, 1);
|
|
leds.setPixelColor(i,0,0,0);
|
|
leds.show();
|
|
}
|
|
// }
|
|
|
|
}
|
|
|
|
}
|
|
oldValues[i - 2] = tempState;
|
|
}
|
|
|
|
}
|
|
|